navigation · conformant
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 renders a floating pill container around toolbar
items — typically IconButtons — with roving-tabindex keyboard
navigation matching the WAI-ARIA APG toolbar pattern.
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>Contract
childrenare rendered directly — typicallyIconButtons. Arrow keys (ArrowLeft/ArrowRightfororientation="horizontal", the default;ArrowUp/ArrowDownfor"vertical") move focus among them with wraparound;Home/Endjump to the first/last. Only the current item is in the page's tab sequence (tabindex="0"); every other item istabindex="-1".variant('standard' | 'vibrant', default'standard') selects the container/content color pairing.expanded/defaultExpanded/onExpandedChangecontrol a visible collapse of the whole container — wire this to your own scroll listener for scroll-driven show/hide;FloatingToolbardoes not manage scrolling itself.role="toolbar"witharia-orientation;aria-label/aria-labelledbyprovide the required accessible name.- This component does not position itself against the viewport (no
position: fixed/stickyof its own) — apply that viaclassName/stylefor your layout.
Tokens and boundaries
Colors, geometry, and motion timing come entirely from
--m3e-comp-floating-toolbar-* CSS custom properties, scoped by
Material3Provider. FloatingToolbar injects no runtime styles and uses
no requestAnimationFrame loop.