ナビゲーション · 準拠済み
FloatingToolbar
FloatingToolbarFloatingToolbarPropsFloatingToolbarOrientationFloatingToolbarVariant
import { useState } from 'react'
import { Button, FloatingToolbar, Icon, IconButton, Surface, Text } from '@language-lit/material3-expressive'
export function FloatingToolbarExample() {
const [collapsibleExpanded, setCollapsibleExpanded] = useState(true)
return (
<Surface
as="section"
aria-labelledby="floating-toolbar-example-title"
color="surface-container-low"
shape="extra-large"
className="floating-toolbar-example"
>
<Text as="h2" id="floating-toolbar-example-title" variant="titleLarge" emphasis="emphasized">
Floating toolbar
</Text>
<Text as="p" variant="bodyMedium">
Arrow keys move roving focus between items; Home/End jump to the
ends. Standard and vibrant color pairings, horizontal and
vertical orientation.
</Text>
<div className="floating-toolbar-example__row">
<FloatingToolbar aria-label="Standard formatting">
<IconButton aria-label="Bold">
<Icon source="format_bold" />
</IconButton>
<IconButton aria-label="Italic">
<Icon source="format_italic" />
</IconButton>
<IconButton aria-label="Underline">
<Icon source="format_underlined" />
</IconButton>
</FloatingToolbar>
<FloatingToolbar aria-label="Vibrant alignment" variant="vibrant">
<IconButton aria-label="Align left">
<Icon source="format_align_left" />
</IconButton>
<IconButton aria-label="Align center">
<Icon source="format_align_center" />
</IconButton>
<IconButton aria-label="Align right">
<Icon source="format_align_right" />
</IconButton>
</FloatingToolbar>
<FloatingToolbar aria-label="Vertical actions" orientation="vertical">
<IconButton aria-label="Add">
<Icon source="add" />
</IconButton>
<IconButton aria-label="Remove">
<Icon source="remove" />
</IconButton>
</FloatingToolbar>
<FloatingToolbar aria-label="Vibrant vertical actions" orientation="vertical" variant="vibrant">
<IconButton aria-label="Add">
<Icon source="add" />
</IconButton>
<IconButton aria-label="Remove">
<Icon source="remove" />
</IconButton>
</FloatingToolbar>
</div>
<div className="floating-toolbar-example__row">
<Button variant="outlined" onClick={() => setCollapsibleExpanded((expanded) => !expanded)}>
{collapsibleExpanded ? 'Collapse' : 'Expand'} toolbar
</Button>
<FloatingToolbar
aria-label="Collapsible formatting"
expanded={collapsibleExpanded}
onExpandedChange={setCollapsibleExpanded}
>
<IconButton aria-label="Bold">
<Icon source="format_bold" />
</IconButton>
<IconButton aria-label="Italic">
<Icon source="format_italic" />
</IconButton>
</FloatingToolbar>
</div>
</Surface>
)
}FloatingToolbarはツールバー項目(通常はIconButton)を浮かぶピル型コンテナーにまとめます。WAI-ARIA APGのtoolbarパターンに沿ったロービングtabindexのキーボード操作に対応します。
import { FloatingToolbar, IconButton } from '@language-lit/material3-expressive'
import '@language-lit/material3-expressive/styles.css'
<FloatingToolbar aria-label="Formatting">
<IconButton aria-label="Bold"><BoldIcon /></IconButton>
<IconButton aria-label="Italic"><ItalicIcon /></IconButton>
<IconButton aria-label="Underline"><UnderlineIcon /></IconButton>
</FloatingToolbar>仕様
childrenは直接描画され、通常はIconButtonを渡します。既定のorientation="horizontal"では左右の矢印キー、orientation="vertical"では上下の矢印キーで項目間を折り返しながら移動できます。Home/Endで先頭/末尾に移動します。現在の項目のみがページのTab順に含まれてtabindex="0"となり、ほかの項目はtabindex="-1"になります。variant('standard' | 'vibrant'、既定値'standard')でコンテナーとコンテンツの色の組み合わせを選びます。expanded/defaultExpanded/onExpandedChangeでコンテナー全体の表示/折りたたみを制御します。スクロールに応じて表示を切り替えるには、利用側のスクロールリスナーと接続します。FloatingToolbar自体はスクロールを管理しません。role="toolbar"とaria-orientationを設定します。必須のアクセシブルな名前はaria-labelまたはaria-labelledbyで指定します。- ビューポートに対する配置(独自の
position: fixedやsticky)は行いません。レイアウトに合わせてclassNameまたはstyleを指定してください。
トークンと境界
色、形状、モーション時間はすべて、Material3Providerでスコープされる--m3e-comp-floating-toolbar-* CSSカスタムプロパティから取得します。FloatingToolbarは実行時スタイルを挿入せず、requestAnimationFrameループも使いません。