【css / javascript】スクロールバーが反応しない!?
先日、こんな感じ↓のレイアウトを作ろうとしました。
要素Aの子に横スクロールできる要素1があって、
要素2がその下にくっついてる感じです。
今回親要素にはposition: relative、要素1にはposition: absoluteが設定されてるので、要素2は要素1の高さの影響を受けません。
また、要素1の高ささをいろいろと変えたいので、親要素には高さを設定していません。
なのでそのままだと要素2は要素1に重なってしまいます。
これを回避するためにこんなスクリプトを当てていました。
要素1の高さを要素2の位置(top)に設定します。
これできれいに縦に並んだぜ!やったぜ!と思いきや…
要素1のスクロールバーがまったく反応しない(押せない)事態が発生。
(表示はされてます)
これはどうしましょう…と会社の先輩方に相談したところ、
大変迅速に原因と対処法を頂いたのでまとめておきます。
原因
そもそもの原因は要素2がスクロールバーの上に重なってしまっていることでした。
要素が上に重なっていると、スクロールバーを押すことは出来ないみたいです。
今回は要素2のtopを要素1のheightと同じ値に設定していたのですが、
これは要素1と2が1ピクセルの隙間もなく縦に並ぶことを意味します。
一方でスクロールバーは要素1をちょっとはみ出た所に表示されるので、今回のようなことが起きてしまったのです。
ちなみに実験してみたのですが、
marginが重なるのはokでpaddingはダメでした。borderより内側ならダメということですね。
対処法
jsで設定する要素2のtopに適当な数字を足して、要素1との間に隙間をあけてやればOKです。
もしくは要素1にmargin-bottomを適当に設定して、heightでなくouterHeightを取得する方法でもOKです。
まとめ
スクロールバーは、上にある要素のborderより内側が重なっていると押せない。
position:absoluteを使うときは要注意ですね…