≪ Today I learned.
RSS購読
    公開日
    タグ
    CSS
    著者
    ダーシノ

    overflowプロパティのhiddenとclipの違いとユースケース

    overflowプロパティにはhiddenclipという似たような挙動をする値がある。どちらもコンテンツが溢れたときに非表示にする値だが、ユースケースは異なる。

    overflow: hidden

    hiddenは溢れたコンテンツは非表示にされるが、スクロールコンテナを生成するためscrollToなどのAPIを使うことでJavaScriptからスクロールできる。

    さらにhiddenoverflow-xoverflow-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を使ってもスクロールできない。

    さらにclipoverflow-xoverflow-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: hiddenoverflow: clip
    スクロールコンテナの生成ありなし
    scrollToが使えるか不可
    目的視覚的トリミング描画領域の制限