body に overflow:hidden; をあてるとなぜスクロールしなくなるのでしょうか?
body {
overflow:hidden;
}
この記述を加えると、コンテンツ量に関わらずブラウザのスクロールバーが消えて、
スクロールができなくなるというのは、よく知られたテクニック?の1つかと思います。
私も簡単なモーダルを実装するときによく使っています。
body.fixed {
overflow:hidden;
}
みたいな感じで、モーダルを出すときにbodyにclassを加えてoverflow:hidden;
にする簡単なものです。
何も考えずよく使っていたのですが、ふと疑問が湧きました。
なぜbodyにoverflow:hidden;
が指定されていると、ページのスクロールが無効になるのか?
たとえば高さが3000pxにおよぶコンテンツがあったとして、その場合のbody要素の高さも3000pxです。
3000pxの要素にoverflow:hidden;
がかかっていたところで高さは3000pxのまま。
ブラウザwindowの中にその高さを超えるコンテンツものがあったら、スクロールできるのが当然のように思えるのですが、実際にはそうはなりません。
body要素のoverflow:hidden;
はブラウザwindowそのものに指定したのと同じことになるということでしょうか?
これは別件で質問立てることなのかもしれませんが、
上記の方法で実装したモーダルで、特定の環境下のEdge*のみ、
モーダルを閉じたとき(overflow:hidden;を削除)に、
スクロール位置がページ下に落ちてしまう現象にぶつかりました。
それで実はoverflow:hidden;
のことをよくわかっていないことに気づき
投稿させてもらいました。
body に overflow:hidden; をあてるとなぜスクロールしなくなるのか?
詳しくわかる方がいたら教えてください。
よろしくお願いします。
*お客さんの閲覧環境でのみ発生していてどのような環境下のEdgeでそうなるのかわかっていません。