JSライブラリ不要!
CSS scroll-snapで作るカルーセル&スナップスクロール

UI/UXCSS実装

カルーセル(スライダー)を実装するためにSwiperやSlickなどのJSライブラリを読み込んでいませんか?実は、CSSの scroll-snap プロパティだけで、ネイティブのような心地よいスナップスクロールを実現できます。
本記事では3つの実用パターンを、コピペ可能なコードで紹介します。

1. 水平カルーセル

最もよく使われるパターン。カードを横にスワイプすると、ピタッとスナップします。実績紹介やお客様の声に最適です。左右にスワイプしてみてください。

CSS
/* コンテナ:横スクロール+スナップ ON */
.carousel {
    display: flex;
    gap: 16px;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
}

/* スクロールバーを非表示 */
.carousel::-webkit-scrollbar { display: none; }
.carousel { scrollbar-width: none; }

/* カード:中央にスナップ */
.carousel__item {
    flex: 0 0 260px;
    scroll-snap-align: center;
}
💡 ポイント:scroll-snap-type: x mandatory は「ユーザーがスクロールを止めたら、必ず最寄りのスナップポイントに吸着する」という意味。proximity にすると、ある程度近づいた時だけ吸着します。

2. フルスクリーンセクション(縦スナップ)

縦方向にスクロールするたび、セクション単位でピタッと止まるレイアウト。LP(ランディングページ)のストーリーテリングに効果的です。下のデモを上下にスクロールしてみてください。

Section 1 / Hero
Section 2 / Features
Section 3 / CTA
CSS
.fullpage {
    height: 100vh;
    overflow-y: auto;
    scroll-snap-type: y mandatory;
}

.fullpage__section {
    height: 100vh;
    scroll-snap-align: start;
    display: flex;
    align-items: center;
    justify-content: center;
}

3. カードリスト(proximity スナップ)

厳密にスナップさせず、ある程度近づいた時だけ吸着する柔らかいスナップ。ニュースフィードや商品リストなど、自由なスクロールも許容したい場面に最適です。

🎨
デザイン
💻
開発
📊
分析
🚀
運用
📱
SNS
CSS
/* proximity:近づいた時だけスナップ */
.card-list {
    display: flex;
    gap: 12px;
    overflow-x: auto;
    scroll-snap-type: x proximity;
    scroll-padding: 0 24px;
}

.card-list__item {
    flex: 0 0 180px;
    scroll-snap-align: start;
}

まとめ

JSライブラリなしでカルーセルが実装できるため、バンドルサイズの削減と表示速度の向上にも貢献します。

💡 ツタワルの制作では:可能な限りCSSネイティブ機能で実装し、JavaScriptへの依存を最小限に抑える設計を心がけています。パフォーマンスと保守性の両立が、私たちの制作指針です。

Contact

伝わるまで、何度でも。

あなたのブランドの「言葉」と「形」を、一緒に見つけませんか?
些細なご相談でも、まずはお気軽にお話ししましょう。