SplitButton

主な操作のボタンと、別の方法を選ぶ▾のボタンをつなげて並べます。

大きさ
使えない時・送っている時
右から左に読む場合

使いどころ

  • 「送る」に対する「送る日時を決める」「下書きとして保存」のように、主操作に同じ目的のほかのやり方を添える時に使います。
  • 主操作と関係の薄い補助の操作をまとめる時は、独立した DropdownMenu を使います。
  • やり方に優先の順が無く、どれも同じ重みで選ぶ時は、SplitButton にせず操作を並べます。

使い方

主操作は共通の Button、▾は共通の DropdownMenu のアイコンだけの操作です。label が主操作の文言、items が▾で開くやり方で、items の指定は DropdownMenu と同じです。▾のメニューは行の末尾側に揃えて開きます。

DropdownMenuController を dropdown-menu として登録します。主操作は通常の button なので、controllerは要りません。

type・name・value・form・onclick・busy・busyLabel など、Button へ渡す指定は主操作へそのまま渡ります。class だけはルートに付きます。id は主操作のボタンに付け、▾のメニューは <id>-menu、▾の操作は <id>-menu-trigger になります。

variant・size・disabled は両方にかかります。busy の間は主操作を busyLabel に置き換え、▾も押せなくします。variant の既定は primary です。

二つの操作は見た目だけを一体にします。向き合う側の角を落とし、枠を1px重ねて間を1本の区切りにします(塗りの操作では白く透かした線、secondary ではボタンの枠と同じ1pxの灰色の線)。ホバーした側、フォーカスのある側を手前に出します。

主操作を押した時の処理は onclick やフォームの送信で、▾で選んだやり方は dropdown-menu:select の detail.value で受け取ります。どちらの処理も利用側が行います。

キーボード

SplitButtonのキーボード操作
キー動作
Tab主操作と▾は別々のTab停止点です。
↓ / Enter / Space(▾)やり方のメニューを開きます。メニューの中のキーは DropdownMenu と同じです。

アクセシビリティ

  • ▾はアイコンだけの操作なので、menuLabel を aria-label として読み上げます。やり方の中身が分かる名前にします。

イベント

SplitButtonが発火するイベント
イベント内容
dropdown-menu:beforeselect▾のやり方を選ぶ直前。取り消せます。detail は DropdownMenu と同じです。
dropdown-menu:select▾のやり方を選んだ後。detail.value で選んだやり方を知らせます。

API

SplitButton

「送信 ▾」のように、主操作と、ほかのやり方を選ぶ▾を一つにつなげた操作。主操作は共通Button、▾は共通DropdownMenuで、見た目だけを一体にする。

SplitButtonのprops
名前型既定値説明
id必須string主操作のボタンのid。▾のメニューは<id>-menu、▾の操作は<id>-menu-triggerになる。画面内で一意にする。
label必須string主操作の文言。
items必須readonly MenuItem[]▾で開くほかのやり方(「送信の予約」「下書きとして保存」など)。
menuLabelstring"ほかのやり方"▾の操作の名前。記号だけの操作なのでaria-labelとして読み上げる。

ほかのpropsはButtonへそのまま渡します。

登録するcontroller:dropdown-menu(DropdownMenuController)

読み込むCSS:layers.css、reset.css、tokens.css、base.css、layout.css、components/button.css、components/overlay.css、components/dropdown-menu.css、components/icon.css、components/keycap.css、components/split-button.css

MenuItem

MenuItem(kind: "action")
名前型既定値説明
label必須string項目名。文字を打って項目を探す時は、この名前の先頭で探す。
disabledboolean選べない項目にする。矢印の移動でも飛ばす。リンクは移動せず、サブメニューは開かない。
iconIconName項目名の前に置くアイコン。
descriptionstring項目名の下に添える補足。読み上げではaria-descriptionになる。
shortcutstring表示用の補助表記。ショートカットの登録は利用側で行う。
kind"action"通常の操作。省略してもよい。
value必須string選んだ時に発火するdropdown-menu:selectのdetail.valueに入る値。
dangerboolean削除など取り返しのつかない操作として、赤い文字で分ける。
closeOnSelectboolean選んだ後に閉じるか。通常の操作は既定で閉じる。falseで開いたままにする。
MenuItem(kind: "link")
名前型既定値説明
label必須string項目名。文字を打って項目を探す時は、この名前の先頭で探す。
disabledboolean選べない項目にする。矢印の移動でも飛ばす。リンクは移動せず、サブメニューは開かない。
iconIconName項目名の前に置くアイコン。
descriptionstring項目名の下に添える補足。読み上げではaria-descriptionになる。
shortcutstring表示用の補助表記。ショートカットの登録は利用側で行う。
kind必須"link"ページの移動。選ぶと標準のページ移動を行い、選択のイベントは発火しない。
href必須string移動先。
target"_blank" | "_self"リンクを開く場所。_blankではrel="noopener noreferrer"を付ける。
MenuItem(kind: "checkbox")
名前型既定値説明
label必須string項目名。文字を打って項目を探す時は、この名前の先頭で探す。
disabledboolean選べない項目にする。矢印の移動でも飛ばす。リンクは移動せず、サブメニューは開かない。
iconIconName項目名の前に置くアイコン。
descriptionstring項目名の下に添える補足。読み上げではaria-descriptionになる。
shortcutstring表示用の補助表記。ショートカットの登録は利用側で行う。
kind必須"checkbox"オン・オフを切り替える複数選択の項目。
value必須string選んだ時に発火するdropdown-menu:selectのdetail.valueに入る値。
checkedboolean | "mixed"チェックマークの初期状態。mixedは一部だけ選んだ状態。選ぶたびにcontrollerが切り替え、切り替えた後の値をdetail.checkedで渡す(mixedから選ぶとtrue)。
closeOnSelectboolean選んだ後に閉じるか。チェックは既定で開いたまま更新する。trueで閉じる。
MenuItem(kind: "radio")
名前型既定値説明
label必須string項目名。文字を打って項目を探す時は、この名前の先頭で探す。
disabledboolean選べない項目にする。矢印の移動でも飛ばす。リンクは移動せず、サブメニューは開かない。
iconIconName項目名の前に置くアイコン。
descriptionstring項目名の下に添える補足。読み上げではaria-descriptionになる。
shortcutstring表示用の補助表記。ショートカットの登録は利用側で行う。
kind必須"radio"同じnameの中から一つを選ぶ単一選択の項目。
value必須string選んだ時に発火するdropdown-menu:selectのdetail.valueに入る値。
name必須string選択のまとまりの名前。同じ階層で同じnameを持つ項目から一つだけを選ぶ。
checkedboolean最初に選んでおく項目。
closeOnSelectboolean選んだ後に閉じるか。単一選択は既定で開いたまま更新する。trueで閉じる。
MenuItem(kind: "submenu")
名前型既定値説明
label必須string項目名。文字を打って項目を探す時は、この名前の先頭で探す。
disabledboolean選べない項目にする。矢印の移動でも飛ばす。リンクは移動せず、サブメニューは開かない。
iconIconName項目名の前に置くアイコン。
descriptionstring項目名の下に添える補足。読み上げではaria-descriptionになる。
shortcutstring表示用の補助表記。ショートカットの登録は利用側で行う。
kind必須"submenu"下の階層を開く項目。
items必須readonly MenuItem[]下の階層の項目。入れ子にできる。
MenuItem(kind: "separator")
名前型既定値説明
kind必須"separator"区切り線。
MenuItem(kind: "group")
名前型既定値説明
kind必須"group"見出し付きのまとまり。見出しは選べない。
label必須stringまとまりの見出し。中の項目のrole="group"の名前にもなる。
items必須readonly MenuItem[]まとまりに入れる項目。

IconName

値:Iconの見本

コード

HTML
Hono JSX