ユーザー操作

scroll-snap-align

scroll-snap-align は、吸い付くスクロールの箱の中で、要素のどこを箱のどこに合わせて止めるかを指定します。start なら要素の先頭を箱の先頭に合わせます。

構文

[ none | start | end | center ]{1,2}

プレビュー

123
プリセット
右下の角をドラッグするとサイズを変えられます

コード

.box {
  overflow: auto;
  scroll-snap-type: y mandatory;
}

.box > :nth-child(2) {
  scroll-snap-align: start;
}

コントロール

scroll-snap-alignstart
ブロック方向(横書きでは縦)
ブロック方向(横書きでは縦)
インライン方向(横書きでは横)を別に決める
123

解説

値の意味

  • none:初期値です。この要素には吸い付きません。
  • start:要素の先頭(横書きの縦なら上)を、箱の先頭に合わせます。
  • end:要素の末尾(横書きの縦なら下)を、箱の末尾に合わせます。
  • center:要素の真ん中を、箱の真ん中に合わせます。

値を 2 つ書くと、1 つ目がブロック方向(横書きでは縦)、2 つ目がインライン方向(横書きでは横)になります。1 つだけなら両方に同じ値を使います。

プレビューは scroll-snap-type: y mandatory で縦にスクロールする箱で、3 枚の札のうち 2 枚目に書いています。start では 2 枚目が箱の上に、end では下にそろい、none では吸い付かずに 1 枚目から見えます。

よく使う場面

カルーセルの 1 枚ずつのカードや、1 画面ずつのセクションに書いて、スクロールが止まったときにきれいにそろうようにします。

気をつけること

  • スクロールする親の箱に scroll-snap-type を書かないと効きません。吸い付く向きも、そちらで決めます。
  • 箱の端にぴったり合わせたくないときは、箱に scroll-padding、要素に scroll-margin を書いて、合わせる位置をずらします。
  • 要素が箱より大きいときは、mandatory でも、要素が箱を覆っている間はその中で自由にスクロールできます。

コメント