Components · Menus, lists and dividers

List Item

A list item is the content of one row: an optional leading element, a label and an optional trailing element. It is used inside Menu, Overflow menu, List Picker, Drawer link and Filter sections in drawer content.

Tokens, sizes, states and requirements. Values come from the live token package and from Figma: Base List Item.

Design Tokens

Resolved from the live token package.

PartUseTokenValue

Sizes

Breakpoint · sizeTextTrailing iconCheck box / radio area
Desktop · Largebody-md 17/24, 0.32px24px24px (16px box)
Mobile · Largebody-md 16/22, 0.32px20px24px (16px box)
Desktop and mobile · Smallbody-sm 14/20, 0.36px20px20px (14px box)

sm (640 to 768px) looks like mobile. Small is the same on every breakpoint.

Leading elements

LeadingSizeNotes
Icon20pxMaterial Symbols Outlined, weight 300, icon-primary
Check box16px box in a 24px areaSame box as eco-checkbox; presentational
Radio button16px circle in a 24px areaSame circle as eco-radio; presentational
Color swatch16pxSwatch only, no frame
Color swatch + frame24px frame, 16px swatch1px border-secondary; 2px border-selected when selected
Image48pxProduct or brand image, object-fit: cover

Trailing controls

TrailingSizeNotes
Check box, radio16px in a 24px area (Small 14px in 20px)Same as the leading ones
SwitchLarge 48×24px, Small 32×16pxTrack and thumb as eco-switch; on = surface-success-default

Measurements

Dimensions

AttributeValue
Gap between leading, label and trailing8px
Row heightSet by the container; the tallest part is the image (48px)
Padding and margin of the itemNone: the container sets the row padding
Check box and radio margin4px (Large), 3px (Small), so the area is 24px / 20px

A list item has no padding of its own, so there is no measurement figure. The row padding belongs to the container (a Menu row has 16px on each side).

Spacing

The gap as a spacing token.

PartValue
Gap between the partsspace-8
Leading and trailing icon, check box, radio, swatch, imageFigma sizes: literal, no spacing token

States

A list item has no hover or focus of its own: the container row draws them. The item reflects selected and disabled. Every item here is live and sits in a demo row that shows the Menu hover (surface-navigation-hover); the hover belongs to the row, not to the list item.

Breakpoint
Size
PartUnselectedSelectedDisabled

Figma shows the enabled item only. Derived here, not in Figma: the selected check box, radio and swatch frame (same look as eco-checkbox, eco-radio and the color swatch tile), and the disabled item.


Typography

PartStyleColor
Overlinealt-label-sm uppercase, 12/12 mobile, 14/14 desktoptext-tertiary
Labelbody-md / body-sm, regular or boldtext-primary
Trailing textSame as the labeltext-secondary or text-tertiary
Supporting textbody-sm 14/20, max 2 linestext-tertiary

Breuer Condensed with ss02, ss03 and ss06. The bold label is weight 600 (Figma 700 minus 100 in this CSS).


Structure

Elements

ElementClassNotes
Itemlist-item, list-item--smA flex row.
Filllist-item__fillHolds the leading element and the label. Grows to push the trailing element to the right.
Leadinglist-item__icon, __check, __radio, __swatch, __swatch--tile, __imageOne of these.
Textlist-item__text, __overline, __label, __label--bold, __support__text is a column for overline, label and supporting text.
Trailinglist-item__trail-icon, __trail-text--secondary, __trail-text--tertiary, __check, __radio, __switchOne of these.

Types

TypeClassUse
Largelist-itemThe default.
Smalllist-item--smCompact surfaces.
Standalone controllist-item with role="checkbox", "radio" or "switch"A pointer and a focus ring; the state is aria-checked.

Width

The item is width: 100% of its container.


Behavior

InputResult
Click, Space, EnterOn a standalone item: toggles aria-checked. A radio only selects and clears the others in its radiogroup.
Arrow keysIn a radio group: move to the next or previous radio and select it (wraps).
TabOne tab stop per item. In a radio group the checked radio is the tab stop.
Disabledaria-disabled="true" and tabindex="-1": clicks and keys are ignored.
Inside a MenuThe row handles clicks, keys, hover and focus.

Accessibility Requirements

TopicRequirement
RoleA standalone item with a control is role="checkbox", "radio" or "switch" (switch wins over check, check over radio) with aria-checked.
StateInside a container: aria-selected and aria-disabled on the row. The visual (check, dot, frame, switch) must match the attribute (WCAG 4.1.2).
Presentational partsThe check box, radio, swatch and switch are aria-hidden. Never put a real <input> inside an option row.
FocusA 2px ring with border-focus, offset 2px, on a standalone item (WCAG 2.4.7, 1.4.11).
ColorThe state is not shown by color alone: the check, the dot or the thumb position changes too (WCAG 1.4.1).
DisabledNot focusable. Disabled tokens are exempt from contrast requirements.