Carousel

関連する内容を1件ずつ表示し、前後に切り替えます。

使いどころ

  • お知らせや特集など、関連する少数の内容を同じ場所で一枚ずつ読ませる時に使います。
  • 全件を見比べる必要がある内容は、隠さずに Card を並べるか一覧にします。

使い方

slides に一枚ずつ title と content を渡します。各スライドは Card として描き、preview・eyebrow・footer・href はCardの同じ名前の欄に渡ります。見出しの上には「1 / 3」のように位置を茶色の小さな文字で書きます。

スライドが2件以上ある時だけ前後の操作を置きます。CarouselController を carousel として登録すると前後へ移れ、最後と最初はつながります。1件では操作を置かず、0件では「表示する項目はありません」の空状態を示します。

interval に正のミリ秒を渡すと「自動再生」の操作を置きます。自動送りは利用者がこの操作を押した時だけ始まり、「一時停止」を押すか、中へフォーカスが入ると止まります。

スライドは同じ場所に重ね、枠の高さを一番高いスライドにそろえるので、切り替えても下の内容は動きません。切り替えは動きを付けずにその場で入れ替えます。前後の操作はアイコンだけの控えめなButton(22pxの正方形、角丸5px)で、カードに重ねずにカードの下の一列の先頭側に8px空けて並べ、「自動再生」は同じ列の末尾側に置きます。

JavaScriptがない時は initialIndex のスライドだけを表示し、前後の操作は働きません。

キーボード

Carouselのキーボード操作
キー動作
Tab前後の操作・自動再生の操作・スライドの中のリンクへ移ります。中へフォーカスが入ると自動送りを止めます。
Enter / Space「前のスライド」「次のスライド」で前後へ移り、「自動再生」「一時停止」で自動送りを切り替えます。

アクセシビリティ

  • ルートは role="group"・aria-roledescription="carousel" で、label を名前にします。各スライドは aria-roledescription="slide" のまとまりで、「1 / 3: 題名」を名前に持ちます。
  • 見えていないスライドは hidden にし、読み上げとフォーカスから外します。
  • 前後の操作は「前のスライド」「次のスライド」を名前に持つ、アイコンだけのボタンです。
  • 自動送りは利用者が選ぶまで始めず、フォーカスが中へ入ると止めます。

イベント

Carouselが発火するイベント
イベント内容
carousel:beforechange利用者の操作か自動送りでスライドが変わる前に発火します。取り消せます。detailは index(移る先)・previousIndex・reason(pointer・keyboard・timer)です。
carousel:changeスライドが変わった後に、同じdetailで発火します。

API

Carousel

見た目はCardへ、切り替えと再生は上流CarouselControllerへ委ねる。

Carouselのprops
名前型既定値説明
label必須stringまとまりの名前。ルートのaria-labelにする。
slides必須readonly CarouselSlide[]並べるスライド。2件以上で前後の操作を置き、1件では操作を置かず、0件では空状態を示す。
initialIndexnumber0最初に見せるスライドの位置(0から数える)。範囲外や整数でない値は0として扱う。
intervalnumber00は自動送り操作なし。正の値では利用者が再生を選ぶまで停止する。

ほかに、<section>へ標準のHTML属性を渡せます。

登録するcontroller:carousel(CarouselController)

読み込むCSS:layers.css、reset.css、tokens.css、base.css、layout.css、components/section.css、components/button.css、components/empty-state.css、components/carousel.css、components/icon.css、components/card.css

CarouselSlide

一枚のスライド。Cardとして描く。

CarouselSlide
名前型既定値説明
title必須stringスライドの見出し。読み上げのスライド名「n / 全件: title」にも使う。
content必須Childスライドの本文。
previewChild本文の横に置く画像など。狭い幅では本文の上に積む。
eyebrowChild見出しの上の小さな行。「n / 全件」の位置の後ろに並べる。
footerChild本文の下に淡い文字で添える日付などの補足。
hrefstring渡すと見出しをリンクにする。

コード

HTML
Hono JSX