Scroll Snap
scroll-margin は一括指定プロパティで、ちょうど margin プロパティが要素のマージンを値を割り当てるように、要素のすべてのスクロールマージンを一度に値を割り当てます。
対応ブラウザ
| 機能 | デスクトップ | モバイル | ||||
|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Safari | Chrome Android | Safari iOS | |
| 69 | 79 | 90 | 14.1 | 69 | 14.5 | |
| その他 | ||||||
| scroll-margin-block は一括指定プロパティで、ブロック方向のスクロールマージンを設定します。 | 69 | 79 | 68 | 15 | 69 | 15 |
| scroll-margin-block-end プロパティは、スクロールスナップ領域のブロック方向における末尾側のマージンを定義し、このボックスをスナップポートにスナップするために使用されます。スクロールスナップ領域は変換された境界ボックスによって定義され、四角形の囲みボックスを探して(スクロールコンテナーの座標空間における軸に合わせられ)、それから指定された外部距離が追加されます。 | 69 | 79 | 68 | 15 | 69 | 15 |
| scroll-margin-block-start プロパティは、スクロールスナップ領域のブロック方向における先頭側のマージンを定義し、このボックスをスナップポートにスナップするために使用されます。スクロールスナップ領域は変換された境界ボックスによって定義され、四角形の囲みボックスを探して(スクロールコンテナーの座標空間における軸に合わせられ)、それから指定された外部距離が追加されます。 | 69 | 79 | 68 | 15 | 69 | 15 |
| scroll-margin-bottom プロパティは、スクロールスナップ領域の下側のマージンを定義し、このボックスをスナップポートにスナップするために使用されます。スクロールスナップ領域は変換された境界ボックスによって定義され、四角形の囲みボックスを探して(スクロールコンテナーの座標空間における軸に合わせられ)、それから指定された外部距離が追加されます。 | 69 | 79 | 68 | 14.1 | 69 | 14.5 |
| scroll-margin-inline は一括指定プロパティで、インライン方向のスクロールマージンを設定します。 | 69 | 79 | 68 | 15 | 69 | 15 |
| scroll-margin-inline-end プロパティは、スクロールスナップ領域のインライン方向における末尾側のマージンを定義し、このボックスをスナップポートにスナップするために使用されます。スクロールスナップ領域は変換された境界ボックスによって定義され、四角形の囲みボックスを探して(スクロールコンテナーの座標空間における軸に合わせられ)、それから指定された外部距離が追加されます。 | 69 | 79 | 68 | 15 | 69 | 15 |
| scroll-margin-inline-start プロパティは、スクロールスナップ領域のインライン方向における先頭側のマージンを定義し、このボックスをスナップポートにスナップするために使用されます。スクロールスナップ領域は変換された境界ボックスによって定義され、四角形の囲みボックスを探して(スクロールコンテナーの座標空間における軸に合わせられ)、それから指定された外部距離が追加されます。 | 69 | 79 | 68 | 15 | 69 | 15 |
| scroll-margin-left プロパティは、スクロールスナップ領域の左側のマージンを定義し、このボックスをスナップポートにスナップするために使用されます。スクロールスナップ領域は変換された境界ボックスによって定義され、四角形の囲みボックスを探して(スクロールコンテナーの座標空間における軸に合わせられ)、それから指定された外部距離が追加されます。 | 69 | 79 | 68 | 14.1 | 69 | 14.5 |
| scroll-margin-right プロパティは、スクロールスナップ領域の右側のマージンを定義し、このボックスをスナップポートにスナップするために使用されます。スクロールスナップ領域は変換された境界ボックスによって定義され、四角形の囲みボックスを探して(スクロールコンテナーの座標空間における軸に合わせられ)、それから指定された外部距離が追加されます。 | 69 | 79 | 68 | 14.1 | 69 | 14.5 |
| scroll-margin-top プロパティは、スクロールスナップ領域の上側のマージンを定義し、このボックスをスナップポートにスナップするために使用されます。スクロールスナップ領域は変換された境界ボックスによって定義され、四角形の囲みボックスを探して(スクロールコンテナーの座標空間における軸に合わせられ)、それから指定された外部距離が追加されます。 | 69 | 79 | 68 | 14.1 | 69 | 14.5 |
| scroll-padding は一括指定プロパティで、要素のすべての辺に一度にスクロールパディングを設定します。scroll container内におけるスクロールポートの最適表示領域を定義するオフセットを指定します。 | 69 | 79 | 68 | 14.1 | 69 | 14.5 |
| scroll-padding-block は一括指定プロパティで、要素のブロック方向のスクロールパディングを設定します。 | 69 | 79 | 68 | 15 | 69 | 15 |
| scroll-padding-block-end プロパティは、スクロールポートの最適表示領域のブロック方向における末尾側のオフセットを定義します。ユーザーのビュー内でものを配置するためのターゲット領域として使用される領域です。これにより、他のコンテンツ(固定位置のツールバーやサイドバーなど)によって隠されているスクロールポートの領域を除外したり、単にターゲット要素とスクロールポートの端との間により多くの余裕を持たせたりすることができます。 | 69 | 79 | 68 | 15 | 69 | 15 |
| CSS プロパティ | ||||||
auto | 69 | 79 | 68 | 15 | 69 | 15 |
| その他 | ||||||
| scroll-padding-block-start プロパティは、スクロールポートの最適表示領域のブロック方向における先頭側のオフセットを定義します。ユーザーのビュー内でものを配置するためのターゲット領域として使用される領域です。これにより、他のコンテンツ(固定位置のツールバーやサイドバーなど)によって隠されているスクロールポートの領域を除外したり、単にターゲット要素とスクロールポートの端との間により多くの余裕を持たせたりすることができます。 | 69 | 79 | 68 | 15 | 69 | 15 |
| CSS プロパティ | ||||||
auto | 69 | 79 | 68 | 15 | 69 | 15 |
auto | 69 | 79 | 68 | 15 | 69 | 15 |
| その他 | ||||||
| scroll-padding-bottom プロパティは、スクロールポートの最適表示領域の下のオフセットを定義します。ユーザーのビュー内でものを配置するためのターゲット領域として使用される領域です。これにより、他のコンテンツ(固定位置のツールバーやサイドバーなど)によって隠されているスクロールポートの領域を除外したり、単にターゲット要素とスクロールポートの端との間により多くの余裕を持たせたりすることができます。 | 69 | 79 | 68 | 14.1 | 69 | 14.5 |
| scroll-padding-inline は一括指定プロパティで、要素のインライン方向のスクロールパディングを設定します。 | 69 | 79 | 68 | 15 | 69 | 15 |
| scroll-padding-inline-end プロパティは、スクロールポートの最適表示領域のインライン方向における末尾側のオフセットを定義します。ユーザーのビュー内でものを配置するためのターゲット領域として使用される領域です。これにより、他のコンテンツ(固定位置のツールバーやサイドバーなど)によって隠されているスクロールポートの領域を除外したり、単にターゲット要素とスクロールポートの端との間により多くの余裕を持たせたりすることができます。 | 69 | 79 | 68 | 15 | 69 | 15 |
| CSS プロパティ | ||||||
auto | 69 | 79 | 68 | 15 | 69 | 15 |
| その他 | ||||||
| scroll-padding-inline-start プロパティは、スクロールポートの最適表示領域のインライン方向における先頭側のオフセットを定義します。ユーザーのビュー内でものを配置するためのターゲット領域として使用される領域です。これにより、他のコンテンツ(固定位置のツールバーやサイドバーなど)によって隠されているスクロールポートの領域を除外したり、単にターゲット要素とスクロールポートの端との間により多くの余裕を持たせたりすることができます。 | 69 | 79 | 68 | 15 | 69 | 15 |
| CSS プロパティ | ||||||
auto | 69 | 79 | 68 | 15 | 69 | 15 |
auto | 69 | 79 | 68 | 15 | 69 | 15 |
| その他 | ||||||
| scroll-padding-left プロパティは、スクロールポートの最適表示領域の左のオフセットを定義します。ユーザーのビュー内でものを配置するためのターゲット領域として使用される領域です。これにより、他のコンテンツ(固定位置のツールバーやサイドバーなど)によって隠されているスクロールポートの領域を除外したり、単にターゲット要素とスクロールポートの端との間により多くの余裕を持たせたりすることができます。 | 69 | 79 | 68 | 14.1 | 69 | 14.5 |
| scroll-padding-right プロパティは、スクロールポートの最適表示領域の右のオフセットを定義します。ユーザーのビュー内でものを配置するためのターゲット領域として使用される領域です。これにより、他のコンテンツ(固定位置のツールバーやサイドバーなど)によって隠されているスクロールポートの領域を除外したり、単にターゲット要素とスクロールポートの端との間により多くの余裕を持たせたりすることができます。 | 69 | 79 | 68 | 14.1 | 69 | 14.5 |
| scroll-padding-top プロパティは、スクロールポートの最適表示領域の上のオフセットを定義します。ユーザーのビュー内でものを配置するためのターゲット領域として使用される領域です。これにより、他のコンテンツ(固定位置のツールバーやサイドバーなど)によって隠されているスクロールポートの領域を除外したり、単にターゲット要素とスクロールポートの端との間により多くの余裕を持たせたりすることができます。 | 69 | 79 | 68 | 14.1 | 69 | 14.5 |
| CSS プロパティ | ||||||
auto | 69 | 79 | 68 | 11 | 69 | 11 |
| その他 | ||||||
| scroll-snap-align プロパティは、ボックスのスナップ位置を、そのスナップコンテナーのスナップポート(つまりalignment container)の中におけるスナップ領域(つまり alignment subject)の配置として指定します。 | 69 | 79 | 68 | 11 | 69 | 11 |
| CSS プロパティ | ||||||
center | 69 | 79 | 68 | 11 | 69 | 11 |
end | 69 | 79 | 68 | 11 | 69 | 11 |
none | 69 | 79 | 68 | 11 | 69 | 11 |
start | 69 | 79 | 68 | 11 | 69 | 11 |
| その他 | ||||||
| scroll-snap-stop は CSS のプロパティで、スクロールコンテナーが可能なスナップ位置を「通り過ぎる」ことを許可するかどうかを定義します。 | 75 | 79 | 103 | 15 | 75 | 15 |
| CSS プロパティ | ||||||
always | 75 | 79 | 103 | 15 | 75 | 15 |
normal | 75 | 79 | 103 | 15 | 75 | 15 |
| その他 | ||||||
| scroll-snap-type は CSS のプロパティで、scroll containerに設定され、スナップポート内のスナップポイントの強制の方向と厳格さを設定することで、スクロールスナップを有効にします。 | 69 | 79 | 99 | 11 | 69 | 11 |
| CSS プロパティ | ||||||
block | 69 | 79 | 68 | 11 | 69 | 11 |
both | 69 | 79 | 68 | 11 | 69 | 11 |
inline | 69 | 79 | 68 | 11 | 69 | 11 |
none | 69 | 79 | 39 | 11 | 69 | 11 |
x | 69 | 79 | 68 | 11 | 69 | 11 |
y | 69 | 79 | 68 | 11 | 69 | 11 |
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (90)
- `scroll-margin` プロパティにより、要素の可視性が `element.focus()` に対して誤って計算される可能性があります。 バグ 1708303 を参照してください。
- このブラウザでは部分的にしか実装されていません
- 以前は別名で対応していました: scroll-snap-margin (11)
- バージョン 14.1 より前では、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールにはスクロール マージンが適用されません。バグ 189265 を参照してください。
- このブラウザでは部分的にしか実装されていません
- 以前は別名で対応していました: scroll-snap-margin (11)
- バージョン 14.5 より前では、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールにはスクロール マージンが適用されません。バグ 189265 を参照してください。
- このブラウザでは部分的にしか実装されていません
- 以前は別名で対応していました: scroll-snap-margin-bottom (11)
- バージョン 14.1 より前では、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールにはスクロール マージンが適用されません。バグ 189265 を参照してください。
- このブラウザでは部分的にしか実装されていません
- 以前は別名で対応していました: scroll-snap-margin-bottom (11)
- バージョン 14.5 より前では、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールにはスクロール マージンが適用されません。バグ 189265 を参照してください。
- このブラウザでは部分的にしか実装されていません
- 以前は別名で対応していました: scroll-snap-margin-left (11)
- バージョン 14.1 より前では、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールにはスクロール マージンが適用されません。バグ 189265 を参照してください。
- このブラウザでは部分的にしか実装されていません
- 以前は別名で対応していました: scroll-snap-margin-left (11)
- バージョン 14.5 より前では、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールにはスクロール マージンが適用されません。バグ 189265 を参照してください。
- このブラウザでは部分的にしか実装されていません
- 以前は別名で対応していました: scroll-snap-margin-right (11)
- バージョン 14.1 より前では、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールにはスクロール マージンが適用されません。バグ 189265 を参照してください。
- このブラウザでは部分的にしか実装されていません
- 以前は別名で対応していました: scroll-snap-margin-right (11)
- バージョン 14.5 より前では、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールにはスクロール マージンが適用されません。バグ 189265 を参照してください。
- このブラウザでは部分的にしか実装されていません
- 以前は別名で対応していました: scroll-snap-margin-top (11)
- バージョン 14.1 より前では、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールにはスクロール マージンが適用されません。バグ 189265 を参照してください。
- このブラウザでは部分的にしか実装されていません
- 以前は別名で対応していました: scroll-snap-margin-top (11)
- バージョン 14.5 より前では、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールにはスクロール マージンが適用されません。バグ 189265 を参照してください。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (14.1)
- スクロール パディングは、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールには適用されません。バグ 179379 を参照してください。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (14.5)
- スクロール パディングは、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールには適用されません。バグ 179379 を参照してください。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (14.1)
- スクロール パディングは、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールには適用されません。バグ 179379 を参照してください。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (14.5)
- スクロール パディングは、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールには適用されません。バグ 179379 を参照してください。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (14.1)
- スクロール パディングは、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールには適用されません。バグ 179379 を参照してください。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (14.5)
- スクロール パディングは、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールには適用されません。バグ 179379 を参照してください。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (14.1)
- スクロール パディングは、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールには適用されません。バグ 179379 を参照してください。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (14.5)
- スクロール パディングは、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールには適用されません。バグ 179379 を参照してください。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (14.1)
- スクロール パディングは、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールには適用されません。バグ 179379 を参照してください。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (14.5)
- スクロール パディングは、フラグメント ターゲットまたは `scrollIntoView()` へのスクロールには適用されません。バグ 179379 を参照してください。
- このバージョンで機能が削除されました (79)
- ベンダープレフィックス付きで対応: -ms- (12)
- Edge は、軸値のない CSS スクロール スナップの以前のドラフトをサポートしています。
- このブラウザでは部分的にしか実装されていません
- このバージョンで機能が削除されました (99)
- このバージョンで機能が削除されました (68)
- macOS Monterey では、スクロール スナップが確実に完了しません。 バグ 1749352 を参照してください。
- 軸の値を含まない CSS スクロール スナップの初期のドラフト。
- ベンダープレフィックス付きで対応: -webkit- (9)
- 古い Safari バージョンでは、軸値のない CSS スクロール スナップの以前のドラフトがサポートされています。
- ベンダープレフィックス付きで対応: -webkit- (9)
- iOS バージョンの古い Safari は、軸値のない CSS スクロール スナップの以前のドラフトをサポートしています。
基本構文
.scroll-container {
scroll-snap-type: x mandatory;
overflow-x: auto;
display: flex;
}
.scroll-container > .item {
scroll-snap-align: start;
flex: 0 0 100%;
} ライブデモ
実務での使いどころ
-
画像カルーセル
横スクロールで画像を1枚ずつスナップさせるカルーセルをJSなしで実装できる。
-
フルページスクロール
セクションごとにスナップするフルスクリーンのページ送りUIを実現する。
注意点
- mandatory は強制的にスナップするため、コンテンツが見切れるケースに注意。proximity の方が柔軟な場合もある。
- ネストされたスクロールコンテナでは意図しない挙動になることがある。
アクセシビリティ
- キーボードやスクリーンリーダーでもスナップポイント間を移動できることを確認する。