overflowプロパティのhiddenとclipの違いとユースケース
overflowプロパティにはhidden
とclip
という似たような挙動をする値がある。どちらもコンテンツが溢れたときに非表示にする値だが、ユースケースは異なる。
overflow: hidden
hidden
は溢れたコンテンツは非表示にされるが、スクロールコンテナを生成するためscrollToなどのAPIを使うことでJavaScriptからスクロールできる。
さらにhidden
はoverflow-x
やoverflow-y
で非表示にする方向を指定しても、水平方向(X軸)と垂直方向(Y軸)の両方でクリッピングが発生する。
<section class="container">
<p>...</p>
<img class="symbol" src="..." />
</section>
.container {
overflow-y: hidden;
max-height: 200px;
position: relative;
}
.symbol {
position: absolute;
bottom: -50px;
right: -50px;
}
const container = document.querySelector('.container')
// スクロールすることで非表示コンテンツも表示できる
container.scrollTo({
top: 100,
})
デモ: overflow: hidden
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
overflow: clip
clip
は溢れたコンテンツを非表示にするところはhidden
と同じだが、スクロールコンテナを生成しないのでJavaScriptを使ってもスクロールできない。
さらにclip
はoverflow-x
やoverflow-y
で非表示にする方向を指定できる。
.container {
overflow-y: clip;
max-height: 200px;
max-width: 200px;
position: relative;
}
.symbol {
position: absolute;
bottom: -50px;
right: -50px;
}
const container = document.querySelector('.container')
// スクロールできない
container.scrollTo({
top: 100,
})
デモ: overflow: clip
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
まとめ
特性 | overflow: hidden | overflow: clip |
---|---|---|
スクロールコンテナの生成 | あり | なし |
scrollToが使えるか | 可 | 不可 |
目的 | 視覚的トリミング | 描画領域の制限 |