解決したい課題
あるdiv要素の上に、position:relative
な要素をオーバーレイ表示させたいとします。
(例: 地図の上にツールバーを表示させたい、など)
このとき両要素の親要素にoverflow:auto
が設定されていると、見た目上は要素が範囲内におさまっているのにスクロールバーが出るという現象が起きます。
overflow:hidden
にできればいいのですが、ウィンドウを縮小されたときなどにはスクロールバーが必要になります。
overflow:auto
は維持したまま、不要なスクロールバーを非表示にしたい。
<divclass="container"><divclass="text">
This content should not have a vertical scrollbar.
</div><divclass="relative"></div></div>
.container{width:500px;height:200px;margin:10px;border:2pxsolidblue;overflow:auto;}.text{width:90%;height:80%;padding:10px;border:2pxsolidblack;margin:5px;}.relative{width:50px;height:50px;bottom:80px;left:80px;position:relative;border:2pxsolidred;background-color:red;}
解決策
以下のコードのように、position:relative
要素にラッパーを用意し、ラッパーをheight:0px
に設定すると、不要なスクロールバーをなくすことができます。
<divclass="container"><divclass="text">
Relative wrapper class can avoid the scrollbar.
</div><divclass="relative-wrapper"><divclass="relative-inner"></div></div></div>
/* Trick! */.relative-wrapper{height:0px;bottom:80px;left:80px;position:relative;}.relative-inner{width:50px;height:50px;border:2pxsolidred;background-color:red;}
紹介したコードは以下のCodepenで動かせますので、よろしければ覗いてみてください。
Avoid scroll bar with a relative element in overflow:auto area