Button Icon

Soft

The default variant. Keeps a permanent neutralLight background at rest, with hover and active overlays layered on top.

<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

No background at rest; a circular surface appears only on hover or active. Bleed is applied automatically, so the icon sits flush with surrounding elements while keeping the full touch target.

<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

No background or hover/active surface, only a press animation that scales the icon down on click. Suits placement next to plain text links.

<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 (8px padding, default), and large (8px padding with a larger icon). The touch target always expands to a minimum of 44×44px via a ::after pseudo-element.

<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

Dims the icon and removes interactivity. All three variants support this 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

Accepts the same command and commandFor props as Button, wiring it to a dialog or popover by ID through the Invoker Commands API. The site header uses this with a transparent ButtonIcon that opens MobileNavigation.

<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' },
]}
/>