「Webサイトで画像ギャラリーを作りたいけど、JavaScriptは難しそう…」そんな悩みを抱えていませんか?
実は、CSSだけでスクロール時にピタッと止まる、スマホアプリのような滑らかなUIを実装できます。それが「スクロールスナップ」です。
この記事では、CSS初心者の方でもすぐに使えるよう、スクロールスナップの基礎から実装方法まで、わかりやすく解説します。
スクロールスナップとは?
スクロールスナップ(Scroll Snap)とは、ユーザーがスクロールした際に、特定の位置で自動的に止まるようにするCSS機能です。
例えば、InstagramのStoriesやNetflixの作品一覧のように、スクロールすると各コンテンツがちょうど良い位置で止まる、あの動きを実現できます。
従来の方法との違い
- 従来:JavaScriptライブラリ(Swiperなど)を使用
- スクロールスナップ:CSSのみで実装可能、軽量でシンプル
スクロールスナップの3つのメリット
1. コードがシンプル
JavaScriptを書かずに、数行のCSSだけで実装できます。初心者でも扱いやすく、メンテナンスも簡単です。
2. パフォーマンスが良い
ブラウザネイティブの機能なので、外部ライブラリを読み込む必要がありません。ページの読み込み速度も向上します。
3. レスポンシブ対応が簡単
PC・タブレット・スマホ、どのデバイスでも自然に動作します。スワイプ操作にも対応しているため、モバイルユーザーにも快適です。
基本的な実装方法
スクロールスナップを実装するには、親要素と子要素にそれぞれCSSを指定します。
ステップ1:HTMLを準備
<div class="container">
<div class="item">コンテンツ1</div>
<div class="item">コンテンツ2</div>
<div class="item">コンテンツ3</div>
</div>
ステップ2:親要素にスクロールスナップを設定
.container {
/* スクロールを有効化 */
overflow-x: scroll;
/* スクロールスナップを有効化 */
scroll-snap-type: x mandatory;
/* 横並びにする */
display: flex;
}
プロパティの意味
scroll-snap-type: x mandatoryx:横方向にスクロール(縦方向ならy)mandatory:必ずスナップ位置に止まる(緩やかに止めるならproximity)
ステップ3:子要素にスナップ位置を指定
.item {
/* スナップする位置を指定 */
scroll-snap-align: start;
/* 各アイテムのサイズ */
min-width: 300px;
height: 400px;
}
scroll-snap-alignの値
start:要素の開始位置でスナップcenter:要素の中央でスナップend:要素の終了位置でスナップ
たったこれだけで、スクロールスナップが完成です!
実践的な使用例3選
例1:画像ギャラリー(横スクロール)
.gallery {
display: flex;
overflow-x: scroll;
scroll-snap-type: x mandatory;
gap: 20px;
}
.gallery img {
scroll-snap-align: center;
width: 80vw;
max-width: 500px;
border-radius: 10px;
}
用途:商品画像、ポートフォリオ、写真集など
例2:フルスクリーンセクション(縦スクロール)
.sections {
height: 100vh;
overflow-y: scroll;
scroll-snap-type: y mandatory;
}
.section {
height: 100vh;
scroll-snap-align: start;
display: flex;
align-items: center;
justify-content: center;
}
用途:ランディングページ、プレゼンテーション風サイト
例3:カード型リスト
.card-list {
display: flex;
overflow-x: scroll;
scroll-snap-type: x mandatory;
padding: 20px;
gap: 15px;
}
.card {
scroll-snap-align: start;
min-width: 280px;
background: white;
border-radius: 8px;
padding: 20px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
用途:ブログ記事一覧、商品カード、お知らせ一覧
よくある質問(FAQ)
Q1. ブラウザ対応状況は?
A. 主要なモダンブラウザ(Chrome、Firefox、Safari、Edge)はすべて対応しています。IE11は非対応ですが、現在のシェアを考えると問題ないでしょう。
Q2. スマホでも使える?
A. はい、むしろスマホでのスワイプ操作に最適です。タッチ操作に自動対応します。
Q3. JavaScriptと併用できる?
A. できます。スクロール位置の取得やページネーションの追加など、JavaScriptで機能を拡張することも可能です。
Q4. スクロールバーを非表示にできる?
A. できます。以下のCSSを追加してください。
.container {
scrollbar-width: none; /* Firefox */
-ms-overflow-style: none; /* IE, Edge */
}
.container::-webkit-scrollbar {
display: none; /* Chrome, Safari */
}
まとめ
スクロールスナップは、CSSだけで実装できる強力なUI機能です。
この記事のポイント
- JavaScriptなしで、スマホアプリ風のスクロールUIを実装可能
scroll-snap-typeとscroll-snap-alignの2つのプロパティが基本- 画像ギャラリー、フルスクリーンセクション、カードリストなど用途は多彩
まずは簡単な横スクロールギャラリーから試してみて、徐々に応用していくのがおすすめです。
モダンで快適なユーザー体験を、ぜひあなたのWebサイトにも取り入れてみてください!