Lists
Lists are continuous, vertical indexes of text or images.
Introduction
Joy UI provides four list-related components:
List: A wrapper for list items (defaulting asul).ListItem: A common list item (default asli).ListItemButton: An action element to be used inside a list item.ListItemDecorator: A decorator of a list item, usually used to display an icon.ListItemContent: A container inside a list item, used to display text content.ListDivider: A separator between list items.ListSubheader: A label for a nested list.
- Home
<List>
<ListItem>
<ListItemButton>
<ListItemDecorator><Home /></ListItemDecorator>
<ListItemContent>Home</ListItemContent>
<KeyboardArrowRight />
</ListItemButton>
</ListItem>
</List>Playground
Component
After installation, you can start building with this component using the following basic elements:
import List from '@mui/joy/List';
import ListItem from '@mui/joy/ListItem';
export default function MyApp() {
return (
<List aria-label="basic-list">
<ListItem>Hello, world!</ListItem>
<ListItem>Bye bye, world!</ListItem>
</List>
);
}
Basic usage
Use the List and ListItem components to create a basic, non-interactive, list.
Make sure to use a meaningful name that describe the content of the list in the aria-labelledby prop.
- 1 red onion
- 2 red peppers
- 120g bacon
size="sm"- Home
- Projects
- Settings
size="md"- Home
- Projects
- Settings
size="lg"- Home
- Projects
- Settings
Decorator
Use the ListItemDecorator component to add supporting icons or elements to the list item.
It comes with a minimum set width that you can adjust via the --List-decorator-size CSS variable within the List component.
- š§ 1 red onion
- š¤ 2 Shrimps
- š„ 120g bacon
Ellipsis content
When dealing with long content, use the ListItemComponent together with <Typography noWrap> to show ellipsis.

Brunch this weekend?
I'll be in your neighborhood doing errands this Tuesday.

Summer BBQ
Wish I could come, but I'm out of town this Friday.
Divider
The ListDivider component comes with four inset patterns:
- Default (without providing the
insetprop): stretches from edge to edge of the list. inset="gutter": from the start of the decorator to the end of the content.inset="startDecorator": from the start of the decorator to the end of the list.inset="startContent": from the start of the content to the end of the list.
(default)- Mabel Boyle

- Boyd Burt

inset="gutter"- Mabel Boyle

- Boyd Burt

inset="startDecorator"- Mabel Boyle

- Boyd Burt

inset="startContent"- Mabel Boyle

- Boyd Burt

For horizontal list, only inset="gutter" works on list divider.
- Mabel Boyle

- Boyd Burt

- Adam Tris

Sticky item
To have a sticky list item, use a List as a child of the Sheet component.
Then, on the item you wish to stick, add the sticky prop.
The Sheet component automatically adjusts the sticky list item to have the same background so that the content does not overflow when scroll.
It works by default on both light and dark modes.
- Category 1
- Subitem 1
- Subitem 2
- Subitem 3
- Subitem 4
- Subitem 5
- Subitem 6
- Subitem 7
- Subitem 8
- Subitem 9
- Subitem 10
- Category 2
- Subitem 1
- Subitem 2
- Subitem 3
- Subitem 4
- Subitem 5
- Subitem 6
- Subitem 7
- Subitem 8
- Subitem 9
- Subitem 10
- Category 3
- Subitem 1
- Subitem 2
- Subitem 3
- Subitem 4
- Subitem 5
- Subitem 6
- Subitem 7
- Subitem 8
- Subitem 9
- Subitem 10
- Category 4
- Subitem 1
- Subitem 2
- Subitem 3
- Subitem 4
- Subitem 5
- Subitem 6
- Subitem 7
- Subitem 8
- Subitem 9
- Subitem 10
- Category 5
- Subitem 1
- Subitem 2
- Subitem 3
- Subitem 4
- Subitem 5
- Subitem 6
- Subitem 7
- Subitem 8
- Subitem 9
- Subitem 10
Nested list
Use the nested prop, within the ListItem component, to create a nested list.
Note that layout and spacing of the nested list remain intact, as if it isn't nested.
The nested list inherits the list size and a few other CSS variables, such as --List-radius and --List-item-radius from the root List component to adjust the design consistently.
- Category 1
- Subitem 1
- Subitem 2
- Category 2
- Subitem 1
- Subitem 2
Changing the semantic element
To control which HTML tag should be rendered in a given, one-off, situation, use the component prop.
<List component="ol">
Non-list
In the example below, we're rendering a List as a HTML <nav> element.
- Clickable item
- Open a new tab
Secondary action
To add a secondary action to the ListItemButton, wrap it in a ListItem component and then add the desired start or end action elements to it.
- Item 1
- Item 2
The ListItemButton and the secondary action render as siblings, that way, the semantic rendered element is appropriately adjusted.
<ul> {/* List */}
<li> {/* ListItem */}
<div role="button"> {/* ListItemButton */}
<button> {/* IconButton */}
Selected
Use the selected prop to signal whether a ListItemButton is selected or not.
It applies color="primary" and a few extra styles (e.g. font weight) to visually communicate the selected state.
- Home
- Apps
- Settings
CSS variables
Play around with all the CSS variables available in the list component to see how the design changes.
You can use those to customize the component on both the sx prop and the theme.
- Home
- Products
Online people
- Mabel Boyle

- Boyd Burt

<List >CSS Variables
Settings
- MB
Murphy Bates
Apple ID, iCloud, Media & Purchase
- iCloud+ Feature Updates
- Apple TV+ Free Year Available
- Wi-Fi
Mars
- Bluetooth
On
- Cellular
- Inbox
1,950
- Starred
- Categories
- Social
4,320
- Updates
22,252
Collapsible list
Inspired by Gatsby's documentation sidenav.
This example uses the start action (a prop of ListItem) prop to create a collapsible button.
- Documentation
- Overview
- Quick Start
Tutorial
9How-to Guides
39
Navigation menu
Inspired by the APG Navigation Menubar design pattern. This example uses a combination of horizontal and vertical lists to form the navigation menu bar.
It also supports keyboard navigation, inspired by the Roving UX technique.
- Home
- About
- Admissions