MENU

【CSS初心者向け】スクロールスナップとは?実装方法と使用例を徹底解説

「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 mandatory
    • x:横方向にスクロール(縦方向なら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-typescroll-snap-alignの2つのプロパティが基本
  • 画像ギャラリー、フルスクリーンセクション、カードリストなど用途は多彩

まずは簡単な横スクロールギャラリーから試してみて、徐々に応用していくのがおすすめです。

モダンで快適なユーザー体験を、ぜひあなたのWebサイトにも取り入れてみてください!

プログラミングの独学におすすめ
プログラミング言語の人気オンラインコース
独学でプログラミングを学習している方で、エラーなどが発生して効率よく勉強ができないと悩む方は多いはず。Udemyは、プロの講師が動画で実際のプログラムを動かしながら教えてくれるオンライン講座です。講座の価格は、セール期間中には専門書籍を1冊買うよりも安く済むことが多いです。新しく学びたいプログラミング言語がある方は、ぜひUdemyでオンライン講座を探してみてください。
目次