
こんにちは!静岡県浜松市でWEBデザイナーをしています小瀧です。
今やあらゆるサイトで目にする「横スクロール型のスライダーUI」。
JavaScriptでライブラリを導入し、
スライド幅や移動アニメーションを制御するのが一般的ですが、
実はそれ、CSSだけでできるって知っていましたか?
その鍵となるのが Scroll Snap(スクロールスナップ)です。
今回はこのScroll Snapを使って、スムーズかつ軽量なスライダーUIを構築する方法をご紹介します。
Scroll Snapとは?
Scroll Snapは、スクロール中の要素の端や中央などに自動的に「ピタッ」と止まるスナップ機能を提供するCSS仕様です。
要素の幅や動きのタイミングを細かく計算しなくても、
滑らかに1枚ずつスライド表示のような体験が作れます。
- ライブラリ不要、JavaScript最小限
- ネイティブな挙動でスマホにも強い
- 慣性スクロール+スナップの自然な動き
基本のHTML構造とCSS
スライダーの基本構成は「親コンテナ(横スクロール)+子アイテム(スナップ対象)」です。
  See the Pen 
  Untitled by 小瀧賢 (@ekwwawpb-the-styleful)
  on CodePen.
ここがポイント!
 scroll-snap-type で「x方向に必ずスナップ」指定。 scroll-snap-align は各スライドの揃え方。
start にすれば左端に整列します。 scroll-behavior: smooth でスライド間の移動もスムーズに。 ページ送りボタンをJSで追加する
スワイプだけでも使えますが、PCユーザーのために「次へ・前へ」ボタンも設置したいですよね。
実際には scrollLeft を使えば簡単に制御できます。
  See the Pen 
  Untitled by 小瀧賢 (@ekwwawpb-the-styleful)
  on CodePen.
JSは“補助”に徹する
 スライド機能の本体はCSSのScroll Snap。
JavaScriptは単に「scrollBy」で位置をずらしているだけなのでとても軽量です。
JavaScriptは単に「scrollBy」で位置をずらしているだけなのでとても軽量です。
まとめ
Scroll Snapの魅力は「軽い・簡単・美しい」
 スライダーといえば「複雑・重たい・バグが起きやすい」イメージがありますが、 Scroll Snapを使えば驚くほどシンプルなコードで、 スマホにもPCにもフィットする美しいUIが構築できます。 
特に「表示領域ごとに切り替えるUI」が必要な場面にはぴったりです。
ぜひ一度、CSSだけで完結するScroll Snapスライダーを試してみてください。
 
							
											










 
                     
                     
                     
                    

 
                         
                         
                         
                         
                         
                        ![静岡県浜松市中区や東区を中心にWeb・ホームページ制作をしているフリーランスWEBデザイナー[satokotadesign]](https://satokotadesign.com/blog/wp-content/uploads/2022/03/ogp_image-150x150.png) 
                         
                         
                 
																 
																 
																 
																 
																 
																 
																 
																 
																 
																 
                  
                                    
                  
                                    
                  
                                    
                  
                                    
                  
                                    
                  
                                    
                  
                                   