scroll-margin-inline
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.
scroll-margin-inline
は一括指定プロパティで、インライン方向のスクロールマージンを設定します。
試してみましょう
構成要素のプロパティ
このプロパティは以下の CSS プロパティの一括指定です。
構文
/* <length> 値 */
scroll-margin-inline: 10px;
scroll-margin-inline: 1em 0.5em;
/* グローバル値 */
scroll-margin-inline: inherit;
scroll-margin-inline: initial;
scroll-margin-inline: revert;
scroll-margin-inline: unset;
値
<length>
-
スクロールコンテナーの対応する辺からの距離です。
解説
scroll-margin 系のプロパティは、このボックスをスナップポートにスナップするために使用されます。スクロールスナップ領域は変換された境界ボックスによって定義され、四角形の囲みボックスを探して (スクロールコンテナーの座標空間における軸に合わせられ)、それから指定された外部距離が追加されます。
公式定義
初期値 | 一括指定の次の各プロパティとして |
---|---|
適用対象 | すべての要素 |
継承 | なし |
計算値 | 一括指定の次の各プロパティとして |
アニメーションの種類 | 計算値の型による |
形式文法
例
簡単なデモ
この例では、上記のインタラクティブ例と非常によく似たものを実装していますが、ここではその実装方法を説明します。
ここでの目的は、水平方向にスクロールする 4 つのブロックを作成することです。2 つ目と 3 つ目のブロックは、それぞれのブロックの右端に近いところでスナップします。
HTML
ブロックを表す HTML はとても簡単です。
<div class="scroller">
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
</div>
CSS
外側のコンテナーのスタイルは以下のようになっています。
.scroller {
text-align: left;
width: 250px;
height: 250px;
overflow-x: scroll;
display: flex;
box-sizing: border-box;
border: 1px solid #000;
scroll-snap-type: x mandatory;
}
スクロールスナップに関連する主な部品は、overflow-x: scroll
で、コンテンツがスクロールしても隠れないようにしています。また、scroll-snap-type: x mandatory
で、スクロールのスナップは水平軸に沿って行わなければならず、スクロールは常にスナップ点で静止するようになっています。
子要素のスタイルは次のようになっています。
.scroller > div {
flex: 0 0 250px;
width: 250px;
background-color: #663399;
color: #fff;
font-size: 30px;
display: flex;
align-items: center;
justify-content: center;
scroll-snap-align: end;
}
.scroller > div:nth-child(2n) {
background-color: #fff;
color: #663399;
}
ここで最も重要なのは scroll-snap-align: end
で、これは右側の端 (ここでは x 軸に沿った「末尾」) をスナップ点として指定するものです。
最後に、スクロールのマージン値を指定しますが、これは 2 番目と 3 番目の子要素に対して異なる値を指定します。
.scroller > div:nth-child(2) {
scroll-margin-inline: 1rem;
}
.scroller > div:nth-child(3) {
scroll-margin-inline: 2rem;
}
つまり、真ん中の子要素を過ぎてスクロールした場合、2 番目の <div>
のインラインの末尾から 1rem
、3 番目の <div>
のインラインの末尾から 2rem
のところでスナップすることになります。
メモ:
ここでは scroll-margin
をインライン軸 (この場合は X 軸) の先頭と末尾に一度に設定していますが、実際に関係するのは末尾側だけです。例えば scroll-margin-inline: 0 1rem
や scroll-margin-inline-end: 1rem
などのように、一辺のみにスクロールマージンを設定しても同様に機能します。
結果
自分でやってみましょう。
仕様書
Specification |
---|
CSS Scroll Snap Module Level 1 # propdef-scroll-margin-inline |
ブラウザーの互換性
BCD tables only load in the browser