Button Icon

Soft

Soft is the default variant. The button has a permanent neutralLight background with hover and active overlays. Use soft when the button needs to be visually present at rest, for example a toolbar where all actions should be equally discoverable.

<Inline
space="small"
alignY="center">
<ButtonIcon
icon="magnifying-glass"
label="Search"
/>
<ButtonIcon
icon="envelope"
label="Contact"
/>
<ButtonIcon
icon="rss"
label="RSS feed"
/>
<ButtonIcon
icon="books"
label="Reading list"
/>
</Inline>

Transparent

Transparent has no background at rest. The circular surface only appears on hover and active, making the icon appear to float in the layout. Bleed is automatically applied for transparent buttons, removing the padding from layout flow while keeping the full touch target. The icon aligns flush with surrounding text and other elements.

<Inline
space="small"
alignY="center">
<ButtonIcon
icon="list"
label="Open menu"
variant="transparent"
/>
<ButtonIcon
icon="close"
label="Close"
variant="transparent"
/>
<ButtonIcon
icon="magnifying-glass"
label="Search"
variant="transparent"
/>
</Inline>

Ghost

Ghost has no background and no hover or active circle. Only the press animation fires on click. Use ghost when you want interaction feedback without any visible surface at rest or on hover, for example alongside plain text links in a navigation bar.

<Inline
space="small"
alignY="center">
<ButtonIcon
icon="magnifying-glass"
label="Search"
variant="ghost"
/>
<ButtonIcon
icon="envelope"
label="Contact"
variant="ghost"
/>
<ButtonIcon
icon="rss"
label="RSS feed"
variant="ghost"
/>
</Inline>

Sizes

Three sizes: small (4px padding), standard (6px padding, default), large (6px padding with a larger icon). The touch target is always expanded to a minimum of 44×44px via a ::after pseudo-element regardless of visual size.

<Inline
space="moderate"
alignY="center">
<ButtonIcon
icon="magnifying-glass"
label="Search"
size="small"
/>
<ButtonIcon
icon="magnifying-glass"
label="Search"
size="standard"
/>
<ButtonIcon
icon="magnifying-glass"
label="Search"
size="large"
/>
</Inline>

Disabled

Disabled buttons are non-interactive and visually dimmed. Both variants support the disabled state.

<Inline
space="small"
alignY="center">
<ButtonIcon
icon="magnifying-glass"
label="Search"
disabled
/>
<ButtonIcon
icon="magnifying-glass"
label="Search"
variant="transparent"
disabled
/>
</Inline>

Invoker commands

The commandFor and command props wire ButtonIcon to any dialog or popover by ID using the HTML Invoker Commands API. Here a transparent ButtonIcon opens MobileNavigation. This is the same pattern used in the site header.

<ButtonIcon
icon="list"
label="Open navigation menu"
variant="transparent"
commandFor="demo-mobile-navigation"
command="show-modal"
/>
<MobileNavigation
id="demo-mobile-navigation"
title="Lloyd Atkinson"
links={[
{ title: 'Articles', to: '/articles/' },
{ title: 'Notes', to: '/notes/' },
{ title: 'Speaking', to: '/speaking/' },
{ title: 'About', to: '/about/' },
]}
iconLinks={[
{ title: 'Read', to: '/reading/', icon: 'books' },
{ title: 'RSS Feed', to: '/rss.xml', icon: 'rss' },
{ title: 'Contact', to: '/inbox/', icon: 'envelope' },
]}
/>