本文へスキップ
Material 3 Expressivev1.3.0-rc.1
ナビゲーション · 準拠済み

FabMenu

FabMenuFabMenuPropsFabMenuItemFabMenuItemProps

FAB menu

Click the trigger to morph it into a close button and reveal a staggered column of items, closest-to-trigger first.

playground/examples/FabMenu.example.tsx

FabMenuはトリガーとなるFABのシェイプ、色、アイコンサイズを切り替えながら、その上にFabMenuItemを順番に表示します。

import { FabMenu, FabMenuItem } from '@language-lit/material3-expressive'
import '@language-lit/material3-expressive/styles.css'

<FabMenu
  triggerLabel="Create"
  icon={<AddIcon />}
  closeIcon={<CloseIcon />}
  expanded={open}
  onExpandedChange={setOpen}
>
  <FabMenuItem icon={<EditIcon />} onClick={edit}>
    Edit
  </FabMenuItem>
  <FabMenuItem icon={<ShareIcon />} onClick={share}>
    Share
  </FabMenuItem>
</FabMenu>

仕様

  • triggerLabel(トリガーのアクセシブルな名前)、icon(閉じた状態で表示)、closeIcon(展開時に表示)は必須です。expanded/defaultExpanded/onExpandedChangeは、IconButtonのselected/onSelectedChangeと同じ制御/非制御のトグル契約です。
  • childrenにはFabMenuItemを渡します。各項目はicon、ラベルとなるchildren、onClick、disabledを受け取ります。閉じた状態の項目はinertになり、表示遷移のためDOMに残りながら、アクセシビリティツリーとTab順から除外されます。
  • トリガーはaria-expanded、aria-haspopup="true"、aria-controlsを公開します。展開中のトリガーにフォーカスがある状態でArrowDown(またはTab)を押すと、最初の項目にフォーカスが移ります。
  • メニューを実際のナビゲーションやアクションにつなぐ処理は、各FabMenuItemのonClickに委ねられます。FabMenuは前述のdisclosureパターンを超えて、ルーティングやoverlay/menuの意味を管理しません。

トークンと境界

色、形状、モーション時間はすべて、Material3Providerでスコープされる--m3e-comp-fab-menu-* CSSカスタムプロパティから取得します。FabMenuは実行時スタイルもrequestAnimationFrameループも使いません。トリガーの閉じた状態と展開状態の変化、および各項目の順次表示はCSSトランジションで実現します。