CSSスクロール操作

CSSスクロールスナップの種類
縦(Y) 横(X)
CSSのスクロールスナップは、ユーザーがスクロール操作を行った際
特定の位置に自動的にスナップする機能
これにより、ユーザーはコンテンツをより直感的に閲覧できるようになります。
scroll-snap-type 値
値 | 意味 | 説明 | 例 |
---|---|---|---|
none | スナップ無効 | スクロールスナップの機能を無効化 デフォルト値 |
scroll-snap-type: none; |
mandatory | 強制スナップ | スクロールが終わると必ずスナップ位置に合わせてスクロール | scroll-snap-type: y mandatory; |
proximity | 近ければスナップ | ユーザーがスナップポイントの近くまでスクロールした場合のみスナップが発動 | scroll-snap-type: y proximity; |
scroll-snap-type 構文
方向の種類 | 説明 | 使用例 |
---|---|---|
x | 横スクロールに適用 | scroll-snap-type: x mandatory; |
y | 縦スクロールに適用 | croll-snap-type: y mandatory; |
block | 書字方向のブロック軸 | 通常は y と同等 |
inline | 書字方向のインライン軸 | 通常は x と同等 |
both | 横・縦両方に適用 | scroll-snap-type: both mandatory; |
scroll-snap-align 値
値 | 意味・効果 | 例 |
---|---|---|
none | スクロールスナップしない | scroll-snap-align: none; |
start | 開始位置でスナップ | scroll-snap-align: start; |
end | 終了位置でスナップ | scroll-snap-align: end; |
center | 要素の中央でスナップ | scroll-snap-align: center; |
CSSスクロールスナップ(縦)Y方
HTML
<div class="scroll-main-div">
<div class="scroll-container"> /* 要素の開始位置でスナップ */
<section class="scroll-section">
<img class="scroll-img" src="../img/logo/scroll.jpg" alt="スクロール画像">
</section>
</div>
<div class="scroll-container"> /* 要素の開始位置でスナップ */
<section class="scroll-section">
<img class="scroll-img" src="../img/logo/scroll1.jpg" alt="スクロール画像">
</section>
</div>
<div class="scroll-container"> /* 要素の開始位置でスナップ */
<section class="scroll-section">
<img class="scroll-img" src="../img/logo/scroll2.jpg" alt="スクロール画像">
</section>
</div>
</div>
CSS
/* スクロールスナップのメインコンテナ */
.scroll-main-div {
scroll-snap-type: y mandatory; /* Y軸方向の強制的なスクロールスナップを有効化 */
overflow-y: scroll; /* 縦スクロールを可能にする */
height: 100vh; /* ビューポートの高さに設定 */
}
/* 各スクロールセクションのコンテナ */
.scroll-container {
scroll-snap-align: start; /* 要素の開始位置でスナップ */
height: 100vh; /* 各セクションを画面の高さに設定 */
}
/* スクロールセクション内のコンテンツエリア */
.scroll-section {
width: 100%; /* 幅を100%に設定 */
height: 100%; /* 高さを100%に設定 */
}
/* スクロール表示される画像 */
.scroll-img {
width: 100%; /* 幅を100%に設定 */
height: 100%; /* 高さを100%に設定 */
object-fit: cover; /* 画像のアスペクト比を保持しつつ要素全体を覆う */
object-position: center; /* 画像の中央部分を表示 */
}



CSSスクロールスナップ(横)X方向
HTML
<div class="X-scroll-main-div">
<div class="X-scroll-container"> /* 要素の開始位置でスナップ */
<section class="X-scroll-section">
<img class="X-scroll-img" src="../img/logo/scroll.jpg" alt="スクロール画像">
</section>
</div>
<div class="X-scroll-container"> /* 要素の開始位置でスナップ */
<section class="X-scroll-section">
<img class="X-scroll-img" src="../img/logo/scroll1.jpg" alt="スクロール画像">
</section>
</div>
<div class="X-scroll-container"> /* 要素の開始位置でスナップ */
<section class="X-scroll-section">
<img class="X-scroll-img" src="../img/logo/scroll2.jpg" alt="スクロール画像">
</section>
</div>
</div>
CSS
.X-scroll-main-div {
scroll-snap-type: x mandatory; /* X軸方向の強制的なスクロールスナップを有効化 */
overflow-x: scroll; /* 横スクロールを可能にする */
overflow-y: hidden; /* 縦スクロールを無効にする */
width: 100%; /* 各セクションを画面の幅に設定 */
height: 100vh; /* ビューポートの高さに設定 */
display: flex; /* フレックスボックスを使用して横並びにする */
justify-content: flex-start; /* コンテンツを左端から開始 */
align-items: center; /* コンテンツを垂直方向に中央に配置 */
scroll-behavior: smooth; /* スムーズなスクロール動作 */
}
/* 各横スクロールセクションのコンテナ */
.X-scroll-container {
scroll-snap-align: start; /* 要素の開始位置でスナップ */
width: 100%; /* 各セクションを画面の幅に設定 */
height: 100vh; /* 各セクションを画面の高さに設定 */
flex-shrink: 0; /* コンテナが縮小されないようにする */
display: flex; /* フレックスボックスを使用 */
justify-content: center; /* 水平方向に中央配置 */
align-items: center; /* 垂直方向に中央配置 */
}
/* 横スクロールセクション内のコンテンツエリア */
.X-scroll-section {
width: 100%; /* 幅を100%に設定 */
height: 100%; /* 高さを100%に設定 */
}
/* 横スクロール表示される画像 */
.X-scroll-img {
width: 100%; /* 幅を100%に設定 */
height: 100%; /* 高さを100%に設定 */
object-fit: cover; /* 画像のアスペクト比を保持しつつ要素全体を覆う */
object-position: center; /* 画像の中央部分を表示 */
}



CSSスムーズスクロール
スムーズスクロールの効果
ページ内リンクをクリックした際
<a href="#id">
ページ内リンクに対して滑らかにスクロール
CSS
/* スムーズスクロールを有効化 */
html {
scroll-behavior: smooth; /* スムーズスクロールを有効化 */
}
