MDC

List

Demo

Disabled

Code
<style>
    .demo-column {
        display: flex;
        flex-direction: column;
        gap: 4px;
        padding: 16px;
        max-width: 480px;
    }

    .demo-caption {
        font-size: 12px;
        color: #757575;
    }
</style>

<div class="demo-column">
    <span class="demo-caption">disabled — skipped by roving navigation, dimmed, no interaction:</span>
    <mdc-list aria-label="Disabled items">
        <mdc-list-item type="button">Enabled row</mdc-list-item>
        <mdc-list-item type="button" disabled>Disabled row</mdc-list-item>
        <mdc-list-item type="button">Another enabled row</mdc-list-item>
    </mdc-list>
</div>

<div class="demo-column">
    <span class="demo-caption">Disabled two-line + selected rows:</span>
    <mdc-list aria-label="Disabled mixed">
        <mdc-list-item type="button" selected>
            <mdc-icon slot="start">cloud</mdc-icon>
            <span>Cloud sync</span>
            <span slot="supporting-text">Active</span>
        </mdc-list-item>
        <mdc-list-item type="button" disabled>
            <mdc-icon slot="start">wifi_off</mdc-icon>
            <span>Offline</span>
            <span slot="supporting-text">Unavailable</span>
        </mdc-list-item>
    </mdc-list>
</div>

Features

Code
<style>
    .demo-column {
        display: flex;
        flex-direction: column;
        gap: 4px;
        padding: 16px;
        max-width: 480px;
    }

    .demo-caption {
        font-size: 12px;
        color: #757575;
    }
</style>

<div class="demo-column">
    <span class="demo-caption">One-line (56dp) — icon in the `start` slot, trailing `end` slot:</span>
    <mdc-list aria-label="One-line with slots">
        <mdc-list-item type="button">
            <mdc-icon slot="start">folder</mdc-icon>
            <span>One-line with leading icon</span>
            <mdc-icon slot="end">more_vert</mdc-icon>
        </mdc-list-item>
        <mdc-list-item type="button">
            <span>Plain one-line row</span>
        </mdc-list-item>
    </mdc-list>
</div>

<div class="demo-column">
    <span class="demo-caption">Two-line (72dp) — `supporting-text` slot:</span>
    <mdc-list aria-label="Two-line">
        <mdc-list-item type="button">
            <mdc-icon slot="start">mail</mdc-icon>
            <span>Brunch this weekend?</span>
            <span slot="supporting-text">Ali Connors · I'll be in your neighborhood doing errands this weekend</span>
        </mdc-list-item>
        <mdc-list-item type="button">
            <span>Summer BBQ</span>
            <span slot="supporting-text">to Alex, Scott, Jennifer · Wish I could come, but I'm out of town this weekend</span>
        </mdc-list-item>
    </mdc-list>
</div>

<div class="demo-column">
    <span class="demo-caption">Three-line (88dp) — `overline` + `supporting-text` slots:</span>
    <mdc-list aria-label="Three-line">
        <mdc-list-item type="button">
            <span slot="overline">RECOMMENDED</span>
            <span>Flutter — ListTile</span>
            <span slot="supporting-text">A single fixed-height row that typically contains some text as well as a leading or trailing icon.</span>
        </mdc-list-item>
        <mdc-list-item type="button">
            <span slot="overline">JETPACK COMPOSE</span>
            <span>ListItem</span>
            <span slot="supporting-text">A composable that follows the Material 3 list-item specification.</span>
        </mdc-list-item>
    </mdc-list>
</div>

<div class="demo-column">
    <span class="demo-caption">Control slot — checkbox hosted by non-interactive `text` rows:</span>
    <mdc-list aria-label="Checkbox list">
        <mdc-list-item type="text">
            <mdc-checkbox slot="control"></mdc-checkbox>
            <span>Daily digest</span>
        </mdc-list-item>
        <mdc-list-item type="text">
            <mdc-checkbox slot="control" checked></mdc-checkbox>
            <span>Ads</span>
            <span slot="supporting-text">Show me personalized ads</span>
        </mdc-list-item>
        <mdc-list-item type="text">
            <mdc-checkbox slot="control"></mdc-checkbox>
            <span>Security alerts</span>
        </mdc-list-item>
    </mdc-list>
</div>

Href

Code
<style>
    .demo-column {
        display: flex;
        flex-direction: column;
        gap: 4px;
        padding: 16px;
        max-width: 480px;
    }

    .demo-caption {
        font-size: 12px;
        color: #757575;
    }
</style>

<div class="demo-column">
    <span class="demo-caption">Setting `href` forces `type="link"` — renders a native anchor that navigates:</span>
    <mdc-list aria-label="Link items">
        <mdc-list-item href="https://m3.material.io/components/lists/overview" target="_blank">
            <mdc-icon slot="start">link</mdc-icon>
            <span>Material 3 — Lists</span>
            <mdc-icon slot="end">open_in_new</mdc-icon>
        </mdc-list-item>
        <mdc-list-item href="#list-href-demo">
            <mdc-icon slot="start">anchor</mdc-icon>
            <span>Same-page anchor</span>
        </mdc-list-item>
        <mdc-list-item>
            <span>No href — stays a button</span>
        </mdc-list-item>
    </mdc-list>
</div>

Selected

Code
<style>
    .demo-column {
        display: flex;
        flex-direction: column;
        gap: 4px;
        padding: 16px;
        max-width: 480px;
    }

    .demo-caption {
        font-size: 12px;
        color: #757575;
    }
</style>

<div class="demo-column">
    <span class="demo-caption">Selected item uses the secondary-container surface (set the `selected` attribute):</span>
    <mdc-list aria-label="Selected item">
        <mdc-list-item type="button">
            <mdc-icon slot="start">inbox</mdc-icon>
            <span>Inbox</span>
        </mdc-list-item>
        <mdc-list-item type="button" selected>
            <mdc-icon slot="start">outbox</mdc-icon>
            <span>Outbox</span>
        </mdc-list-item>
        <mdc-list-item type="button">
            <mdc-icon slot="start">star</mdc-icon>
            <span>Starred</span>
        </mdc-list-item>
    </mdc-list>
</div>

<div class="demo-column">
    <span class="demo-caption">Selected two-line item:</span>
    <mdc-list aria-label="Selected two-line">
        <mdc-list-item type="button" selected>
            <mdc-icon slot="start">folder</mdc-icon>
            <span>Documents</span>
            <span slot="supporting-text">12 files</span>
            <mdc-icon slot="end">more_vert</mdc-icon>
        </mdc-list-item>
        <mdc-list-item type="button">
            <mdc-icon slot="start">photo</mdc-icon>
            <span>Images</span>
            <span slot="supporting-text">8 files</span>
        </mdc-list-item>
    </mdc-list>
</div>

Type

Code
<style>
    .demo-column {
        display: flex;
        flex-direction: column;
        gap: 4px;
        padding: 16px;
        max-width: 480px;
    }

    .demo-caption {
        font-size: 12px;
        color: #757575;
    }
</style>

<div class="demo-column">
    <span class="demo-caption">text — non-interactive rows, skipped by roving navigation:</span>
    <mdc-list aria-label="Text items">
        <mdc-list-item type="text">Text row one</mdc-list-item>
        <mdc-list-item type="text">Text row two</mdc-list-item>
    </mdc-list>
</div>

<div class="demo-column">
    <span class="demo-caption">button — native button root, ripple + focus-ring, activates on Enter / Space:</span>
    <mdc-list aria-label="Button items">
        <mdc-list-item type="button">Button row one</mdc-list-item>
        <mdc-list-item type="button">Button row two</mdc-list-item>
        <mdc-list-item type="button">Button row three</mdc-list-item>
    </mdc-list>
</div>

<div class="demo-column">
    <span class="demo-caption">Mixed types in one list — text rows are skipped by arrow navigation:</span>
    <mdc-list aria-label="Mixed types">
        <mdc-list-item type="text">Label only</mdc-list-item>
        <mdc-list-item type="button">Action button</mdc-list-item>
        <mdc-list-item href="#list-type-demo">Link item</mdc-list-item>
        <mdc-list-item type="text">Trailing label</mdc-list-item>
    </mdc-list>
</div>