ToggleGroup

関連する状態を、一つまたは複数切り替えます。

縦に並べる

使いどころ

  • 表示密度や表示する項目のように、同じ画面の見え方を切り替えるボタンのグループに使います。一つだけを選ぶ時は既定のまま、複数を選ぶ時は multiple を付けます。
  • URLで一覧の条件を切り替える時は FilterBar、パネルを切り替える時は Tabs を使います。
  • フォームで送信する値を選ぶ時は、ラジオボタンの Choice か CheckboxGroup を使います。ToggleGroup は値を送信しません。

使い方

items を押せるボタンとして並べ、selected の値をオンにします。ボタンは控えめな Button(平らな白・1pxの灰色の枠・下の1pxの影・角丸5px)を隙間なくつなげ、枠を1px重ねて間を1本の線にし、外側の角だけを丸めます。オンのボタンは、チェックボックスの選んだ状態と同じ淡い青の縦の塗りに紺の縁と紺の文字で示します。value が空白だけの項目と、重なった値の二つ目以降は出しません。

既定では一つだけをオンにし、別のボタンを押すと切り替わります。オンのボタンを押してもオンのままで、toggle-group:beforechange・toggle-group:change は発火しません。multiple では押したボタンだけを切り替え、全てオフにもできます。

orientation="vertical" は縦に並べ、ボタンの幅を一番長い名前にそろえます。

ToggleGroupController を toggle-group として登録します。選んだ結果は toggle-group:change で受け取り、画面への反映や保存は利用側が行います。

JavaScriptが無い時は、初期の状態を見せるだけで、押しても切り替わりません。

キーボード

ToggleGroupのキーボード操作
キー動作
Tabグループの中の一つのボタンへ入ります。前に移ったボタン、オンのボタン、最初のボタンの順に選びます。
← / →(horizontal)前・次のボタンへ移ります。端では反対の端へ回ります。右から左へ書く時は左右が逆になります。
↑ / ↓(vertical)前・次のボタンへ移ります。端では反対の端へ回ります。
Home / End最初・最後のボタンへ移ります。
Enter / Space移ったボタンを切り替えます。一つだけを選ぶ時は、オンのボタンではオンのままです。

アクセシビリティ

  • グループは role="group" で、label を読み上げ名にします。
  • 各ボタンは aria-pressed でオン・オフを伝えます。disabled のボタンには移りません。

イベント

ToggleGroupが発火するイベント
イベント内容
toggle-group:beforechangeボタンを押して選択が変わる前に発火します。取り消せます。detailは selected(変わった後の値)・previousSelected・reason(pointer か keyboard)です。
toggle-group:change選択が変わった後に発火します。detailは toggle-group:beforechange と同じです。

API

ToggleGroup

画面内の単一・複数の状態切替。変更結果はtoggle-group:changeで渡す。

ToggleGroupのprops
名前型既定値説明
label必須stringまとまりの読み上げ名。
items必須readonly ToggleGroupItem[]切り替えるボタン。
selectedreadonly string[][]最初にオンにする値。multipleでない時は先頭の一つだけを使う。
multiplebooleanfalsetrueで複数をオンにできる。falseは一つだけで、別のボタンを押すと切り替わり、オンのボタンを押してもオンのままにする。
orientation"horizontal" | "vertical""horizontal"並べる向き。矢印キーもhorizontalは左右、verticalは上下で移る。

登録するcontroller:toggle-group(ToggleGroupController)

読み込むCSS:layers.css、reset.css、tokens.css、base.css、layout.css、components/button.css、components/toggle-group.css

ToggleGroupItem

ToggleGroupItem
名前型既定値説明
value必須string選択の値。空白だけの値と、重なった値の二つ目以降は出さない。
label必須stringボタンの文言。
disabledboolean押せなくする。矢印キーの移動でも飛ばす。

コード

HTML
Hono JSX