カルーセルはもうCSSだけで実装できる! 疑似要素::scroll-button()と::scroll-marker()の使い方を解説
Post on:2025年5月8日
sponsors
Chrome 135でサポートされた::scroll-button()
疑似要素は、疑似要素としてインタラクティブなスクロールボタンを作成できます。さらに::scroll-marker()
疑似要素は、スクロールコンテナ内の関連するすべてのアイテムに対してフォーカス可能なマーカーのセットを作成できます。
これらを使用すると、これまでJavaScriptなしでは実装できなかったカルーセルをCSSだけで実装できるようになります。その実装方法、CSSで実装したさまざまなカルーセルを紹介します。

Carousels with CSS
by Adam Argyle
下記は各ポイントを意訳したものです。
※元サイト様のライセンスに基づいて翻訳しています。基づいてというのは、貢献部分に関して同ライセンスも含みます。
- はじめに
- ::scroll-button()と::scroll-marker()の新しい疑似要素
- CSSでスクローラーを実装
- CSSでスクロール ボタンを実装
- CSSでスクロール マーカーを実装
- CSSでカルーセルを実装する便利ツール
- CSSで実装したさまざまなカルーセル
- 終わりに
はじめに
先日リリースされたChrome 135(紹介記事)から、カルーセルやスクロールを実装するために設計されたCSS Overflow Module Level 5の機能を使用できるようになりました。
この記事では、これらの新機能を使用したスクロールとカルーセルのエクスペリエンスの概要を紹介します。今までは実装にJavaScriptが必要でしたが、JavaScriptは必要ありません。

CSSで実装したさまざまなカルーセル
上記のカルーセルはすべてCSSで実装されており、スクロールボタン、スクロールマーカー、スクロール駆動アニメーション、scroll-state()
クエリ、:has()
、グリッド、アンカーなどが使用されています。
そして共通する大きな特徴は、アクセシビリティです。
カルーセルのベストプラクティスはデベロッパーのチームとアクセシビリティのチームが協力することで、ブラウザによって処理されます。これよりもアクセシビリティに優れたカルーセルを作成するのは非常に難しいでしょう。
::scroll-button()と::scroll-marker()の新しい疑似要素
カルーセルとは、2つのUIアフォーダンス(ボタンとマーカー)が追加されたスクロール領域です。
この記事で実装するカルーセルのボタンとマーカーはCSSで実装します。ブラウザはこれらの要素を兄弟として、適切な役割で、適切なタブ順序で配置し、状態を維持します。これにより、アクセシブルなカルーセルの実装が容易になります。
- スクロール ボタン
ブラウザが提供するインタラクティブなスクロールアフォーダンス<button>
要素で、コンテンツへのアクセスを補助し、押すとスクロール領域の85%をスクロールします。 - スクロール マーカー
ブラウザが提供するステートフルなナビゲーション<a>
要素で、スクロール領域内の要求されたコンテンツへのアクセスを支援します。
スクロール ボタン::scroll-button()
とスクロール マーカー::scroll-maker()
の新しい疑似要素を使用して、CSSだけでカルーセルを実装する方法を解説します。
CSSでスクローラーを実装
Webページい上の任意のスクロール領域にボタンとマーカーを追加できます。
後のステップでボタンやマーカーを追加するために使用する基本的なスクロール領域を作成します。まずは基本となるHTMLから。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<div class="scroll-layout"> <div class="carousel"> <ul class="content"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li> <li>10</li> </ul> </div> </div> |
ここでは水平方向のスクロールを設定します、もちろん垂直方向でも機能します。また、スクロールスナップは必須ではありませんが、ここでは使用しています。
1 2 3 4 5 6 7 8 |
.carousel { overflow-x: auto; scroll-snap-type: x mandatory; > li { scroll-snap-align: center; } } |
これで、水平方向の左右にスクロールするコンテンツができました。
実際の動作は、下記をご覧ください。
See the Pen
CSS Carousel -1. scrollbar by coliss (@coliss)
on CodePen.
CSSでスクロール ボタンを実装
次に、::scorll-button()
疑似要素でスクロール ボタンを実装します。OSによってはこの時点ですでにスクロールボタンが配置されている場合があります。組み込みのスクロールバー ボタンはスクロール領域を移動できますが、CSSで実装するスクロール ボタンはスクロール領域の85%をページ分割します。
スクロールスナップのポイントを使用して一度に1つの全幅アイテムのみを表示するカルーセルの場合は、アイテムごとに表示しているように感じられるでしょう。そして、一度に複数のアイテムを表示する場合は、ほぼ1ページ分スクロールします。
CSSでスクロール ボタンを追加するには
- 他の疑似要素と同様に、セレクタを使用して追加します。右にスクロールするボタンの場合は
.carousel::scroll-button(right)
です。 content
を使用して、オプションでアクセシブルなフォールバック用のalt
テキストを設定します。
ブラウザはスクローラーの兄弟として、コンテンツを含む実際のボタンを作成します。あとは必要に応じて配置を設定したり、スタイルを設定したり、anchor()
を設定することができます。下記のCSSでは、左と右にスクロール ボタンを作成しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
.carousel { … &::scroll-button(left) { content: "⬅" / "Scroll Left"; } &::scroll-button(right) { content: "⮕" / "Scroll Right"; } &::scroll-button(*)::focus-visible { outline-offset: 5px; } } |
これで、スクロール領域の下部にスクロール ボタンを実装しました。
実際の動作は、下記をご覧ください。
See the Pen
CSS Carousel -2. scroll button by coliss (@coliss)
on CodePen.
CSSでスクロール マーカーを実装
スクロールバーのサム要素と同様に、CSSによるスクロール マーカーはカルーセルの全体サイズを示唆することができ、最後または最初に素早く移動するためのアフォーダンスも提供します。スクロールバーと異なる点は、各マーカーはリンクとしても機能するため、スクロール領域内の任意のアイテムを表示することができます。
マーカーはページ内リンクの<a>
要素に似ていますが、特別な機能がいくつかあります。
- マーカーが表示またはスナップされているときのために
:target-current
状態が含まれます。 - キーボードナビゲーションが含まれ、フォーカスグループのように動作します。
- スクリーンリーダーのエクスペリエンスも含まれており、タブリストのようにレポートされます。
以下の手順で、スクローラー内の重要なポイントにマーカーを追加します。
scroll-marker-group
の配置をbefore
またはafter
に設定します。.carousel .point-of-interest::scroll-marker
セククタを使用して、注目ポイントを選択します。content
を使用して、オプションでアクセシブルなフォールバック用のalt
テキストを設定します。
ブラウザはすべてのマーカーを作成し、マーカーグループコンテナに配置します。この例では各<li>
に対して空のマーカーを作成し、各アイテムに対してマーカー ドットを作成します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
.carousel { … scroll-marker-group: after; > li::scroll-marker { content: ' '; &:target-current { background: var(--accent); } } } |
これで、スクロール領域の下部にスクロール マーカーを実装しました。
実際の動作は、下記をご覧ください。
See the Pen
CSS Carousel -3. scroll markers by coliss (@coliss)
on CodePen.
CSSでカルーセルを実装する便利ツール
この記事ではシンプルなカルーセルの実装方法を解説しました。
下記のサイトでは、スイッチをオン・オフするだけで、スクロール ボタン、スクロール アンカーなどを実装できます。スイッチをオンにすると、カルーセルにそれらがすぐに表示され、それを実装するためのCSSも表示されます。

CSSで実装したさまざまなカルーセル
CSSで実装したさまざまなカルーセルは、下記をご覧ください。
この新機能でどういうことができるか興味がある人は、ぜひご覧ください。スクロール駆動アニメーション、scroll-state()
クエリなどを使用して、ボタンとマーカーを調整する方法などもあります。

終わりに
これらの機能がHTMLとCSSのすべてをうまく統合されたことをわたし達は誇りに思っています。CSSで実装するカルーセルのアクセシビリティは最高です。どのJavaScriptのソリューションよりも優れており、JavaScriptが無効なユーザーでも快適にカルーセルを操作できます。
デベロッパーの作業は少なくなり、ユーザーエクスペリエンスが向上し、パフォーマンスも向上します。
sponsors