Q. overflow-yを指定したら、縦スクロールバーが表示されるようになった
overflow-yを指定したら、縦スクロールバーが表示されるようになる状況の解説と対処法について書いた。
状況
簡易的な例を挙げると、次のような状況になっていた。
<style>
h1 {
font-family: "Noto Sans JP, sans-serif";
font-size: 24px;
line-height: 1.2;
}
.overflow-ellipsis {
white-space: nowrap;
overflow-y: hidden;
text-overflow: ellipsis;
}
</style>
<h1>とても長いタイトル</h1>
原因
まず、overflow-x
とoverflow-y
は副作用があるプロパティである。どちらのプロパティも初期値はvisible
であるが、どちらか一方を指定すると、もう一方は暗黙的にauto
として扱われる。
つまり、overflow-y: hidden
を指定した場合、overflow-x
はauto
として扱われる。そのため、コンテンツがコンテナからはみ出ていれば縦スクロールバーが表示されるようになる。
次に、フォントにはフォント自体に高さがあり、line-height
がこれを下回ると、コンテナをコンテンツが超えた判定を受ける。日本語フォントの場合、最低でも1.4は必要なことが多い。
この2つの要因が重なったことで、縦スクロールバーが表示されるようになっていた。
対処法
overflow-y: hidden
をoverflow: hidden
に変更することで、overflow-x
もhidden
として扱われるようになる。これにより、縦スクロールバーが表示されなくなる。
一方、overflow-x: visible
にすることは無意味である。なぜなら暗黙的にauto
になるわけではなく、visible
が暗黙的にauto
のように振る舞うためである。