Image List
Arrange image collections with standard, quilted, woven or masonry layout.
This guide covers Material UI Core with the default Emotion engine; extensions and additional demos are explicitly classified.
Use case and business boundary
ImageList masonry is a Core variant, not the separate Lab Masonry component; loading media still needs fallback.
Native composition and scope
ImageList, ImageListItem, ImageListItemBar
Preserve native Material UI composition and types; do not substitute JGuang UI/Base UI/Radix APIs. Example entries are not extra components.
Native installation and initialization
npm install @mui/material@9.4.0 @emotion/react@11.14.0 @emotion/styled@11.14.1
Use native npm and Emotion, not an invented JGuang UI Registry URL. Place examples inside native ThemeProvider; choose CssBaseline or ScopedCssBaseline for the project. Inspect React, existing providers, lockfile and SSR first. Never overwrite files or conceal peer conflicts. This batch verified React 19.2.8; React 18 and below require matching react-is. See the included bilingual setup guide.
Practical native parameters
These selected parameters are not a flattened universal API. Preserve the native declaring owner, slot structure, nullable values and generics.
| Owner.prop | Practical role | Declaration source |
|---|---|---|
ImageList.variant | Owning native presentation enum; never substitute a universal variant prop. | ImageList |
ImageList.cols | ImageList column count or ImageListItem column span; preserve the owner. | ImageList |
ImageList.gap | ImageList gap in pixels. | ImageList |
ImageList.rowHeight | Native ImageList row height or auto sizing policy. | ImageList |
ImageListItem.cols | ImageList column count or ImageListItem column span; preserve the owner. | ImageListItem |
Runnable native examples
Machine keys select example entries, not universal variant props. Native demo JSX/data stay unchanged; JGuang-authored acceptance fixtures are explicitly labelled.
- Standard image list ·
StandardImageList· upstream native demo - Quilted image list ·
QuiltedImageList· upstream native demo - Woven image list ·
WovenImageList· upstream native demo - Masonry image list ·
MasonryImageList· upstream native demo - Image list with title bars ·
TitlebarImageList· upstream native demo - Title bar below image (standard) ·
TitlebarBelowImageList· upstream native demo - Title bar below image (masonry) ·
TitlebarBelowMasonryImageList· upstream native demo - Custom image list ·
CustomImageList· upstream native demo
Actual usage example
Unmodified pinned native demo; copy its required local helper files together.
import ImageList from '@mui/material/ImageList';
import ImageListItem from '@mui/material/ImageListItem';
export default function StandardImageList() {
return (
<ImageList sx={{ width: 500, height: 450 }} cols={3} rowHeight={164}>
{itemData.map((item) => (
<ImageListItem key={item.img}>
<img
srcSet={`${item.img}?w=164&h=164&fit=crop&auto=format&dpr=2 2x`}
src={`${item.img}?w=164&h=164&fit=crop&auto=format`}
alt={item.title}
loading="lazy"
/>
</ImageListItem>
))}
</ImageList>
);
}
const itemData = [
{
img: 'https://images.unsplash.com/photo-1551963831-b3b1ca40c98e',
title: 'Breakfast',
},
{
img: 'https://images.unsplash.com/photo-1551782450-a2132b4ba21d',
title: 'Burger',
},
{
img: 'https://images.unsplash.com/photo-1522770179533-24471fcdba45',
title: 'Camera',
},
{
img: 'https://images.unsplash.com/photo-1444418776041-9c7e33cc5a9c',
title: 'Coffee',
},
{
img: 'https://images.unsplash.com/photo-1533827432537-70133748f5c8',
title: 'Hats',
},
{
img: 'https://images.unsplash.com/photo-1558642452-9d2a7deb7f62',
title: 'Honey',
},
{
img: 'https://images.unsplash.com/photo-1516802273409-68526ee1bdd6',
title: 'Basketball',
},
{
img: 'https://images.unsplash.com/photo-1518756131217-31eb79b20e8f',
title: 'Fern',
},
{
img: 'https://images.unsplash.com/photo-1597645587822-e99fa5d45d25',
title: 'Mushrooms',
},
{
img: 'https://images.unsplash.com/photo-1567306301408-9b74779a11af',
title: 'Tomato basil',
},
{
img: 'https://images.unsplash.com/photo-1471357674240-e1a485acb3e1',
title: 'Sea star',
},
{
img: 'https://images.unsplash.com/photo-1589118949245-7d38baf380d6',
title: 'Bike',
},
];
Example dependency boundaries
@mui/material/ImageList, @mui/material/ImageListItem, @mui/material/Box, @mui/material/ImageListItemBar, @mui/material/ListSubheader, @mui/material/IconButton, @mui/icons-material/Info, @mui/icons-material/StarBorder
Direct Icons/System/Utils example imports require their matching 9.4.0 packages. Relative data/helpers are part of the example closure, not extra components. Remote images and simulated operations do not supply a backend.
Pinned upstream API metadata reference
These tables retain the upstream metadata, not a newly inferred generic type system. Conditional generics, inherited props and callback details are defined by the source declarations below. Theme defaults may override metadata defaults.
ImageList
import ImageList from '@mui/material/ImageList';
import { ImageList } from '@mui/material';
| Prop | Required | Upstream metadata type / constraint | Metadata default |
|---|---|---|---|
children | yes | node | — |
classes | no | object | — |
cols | no | integer | 2 |
component | no | elementType | — |
gap | no | number | 4 |
rowHeight | no | 'auto' | number | 'auto' |
sx | no | Array<func | object | bool> | func | object | — |
variant | no | 'masonry' | 'quilted' | 'standard' | 'woven' | string | 'standard' |
ImageListItem
import ImageListItem from '@mui/material/ImageListItem';
import { ImageListItem } from '@mui/material';
| Prop | Required | Upstream metadata type / constraint | Metadata default |
|---|---|---|---|
children | no | node | — |
classes | no | object | — |
cols | no | integer | 1 |
component | no | elementType | — |
rows | no | integer | 1 |
sx | no | Array<func | object | bool> | func | object | — |
ImageListItemBar
import ImageListItemBar from '@mui/material/ImageListItemBar';
import { ImageListItemBar } from '@mui/material';
| Prop | Required | Upstream metadata type / constraint | Metadata default |
|---|---|---|---|
actionIcon | no | node | — |
actionPosition | no | 'left' | 'right' | 'right' |
classes | no | object | — |
position | no | 'below' | 'bottom' | 'top' | 'bottom' |
subtitle | no | node | — |
sx | no | Array<func | object | bool> | func | object | — |
title | no | node | — |
Native source declarations
Declarations/imports are extracted from pinned source without flattening unions or external inheritance. Original English comments/types are source reference, not a claim of translated upstream prose. Shared types stay in their native packages.
vendor/src/ImageList/ImageList.d.ts
import * as React from 'react';
import { SxProps } from '@mui/system';
import { OverridableStringUnion } from '@mui/types';
import { Theme } from '../styles';
import { OverridableComponent, OverrideProps } from '../OverridableComponent';
import { ImageListClasses } from './imageListClasses';
export interface ImageListPropsVariantOverrides {}
export interface ImageListOwnProps {
/**
* The content of the component, normally `ImageListItem`s.
*/
children: NonNullable<React.ReactNode>;
/**
* Override or extend the styles applied to the component.
*/
classes?: Partial<ImageListClasses> | undefined;
/**
* Number of columns.
* @default 2
*/
cols?: number | undefined;
/**
* The gap between items in px.
* @default 4
*/
gap?: number | undefined;
/**
* The height of one row in px.
* @default 'auto'
*/
rowHeight?: number | 'auto' | undefined;
/**
* The system prop that allows defining system overrides as well as additional CSS styles.
*/
sx?: SxProps<Theme> | undefined;
/**
* The variant to use.
* @default 'standard'
*/
variant?:
| OverridableStringUnion<
'masonry' | 'quilted' | 'standard' | 'woven',
ImageListPropsVariantOverrides
>
| undefined;
}
export interface ImageListTypeMap<
AdditionalProps = {},
RootComponent extends React.ElementType = 'ul',
> {
props: AdditionalProps & ImageListOwnProps;
defaultComponent: RootComponent;
}
declare const ImageList: OverridableComponent<ImageListTypeMap>;
export type ImageListProps<
RootComponent extends React.ElementType = ImageListTypeMap['defaultComponent'],
AdditionalProps = {},
> = OverrideProps<ImageListTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
component?: React.ElementType | undefined;
};
vendor/src/ImageListItem/ImageListItem.d.ts
import * as React from 'react';
import { SxProps } from '@mui/system';
import { Theme } from '../styles';
import { OverridableComponent, OverrideProps } from '../OverridableComponent';
import { ImageListItemClasses } from './imageListItemClasses';
export interface ImageListItemOwnProps {
/**
* The content of the component, normally an `<img>`.
*/
children?: React.ReactNode;
/**
* Override or extend the styles applied to the component.
*/
classes?: Partial<ImageListItemClasses> | undefined;
/**
* Width of the item in number of grid columns.
* @default 1
*/
cols?: number | undefined;
/**
* Height of the item in number of grid rows.
* @default 1
*/
rows?: number | undefined;
/**
* The system prop that allows defining system overrides as well as additional CSS styles.
*/
sx?: SxProps<Theme> | undefined;
}
export interface ImageListItemTypeMap<
AdditionalProps = {},
RootComponent extends React.ElementType = 'li',
> {
props: AdditionalProps & ImageListItemOwnProps;
defaultComponent: RootComponent;
}
declare const ImageListItem: OverridableComponent<ImageListItemTypeMap>;
export type ImageListItemProps<
RootComponent extends React.ElementType = ImageListItemTypeMap['defaultComponent'],
AdditionalProps = {},
> = OverrideProps<ImageListItemTypeMap<AdditionalProps, RootComponent>, RootComponent> & {
component?: React.ElementType | undefined;
};
vendor/src/ImageListItemBar/ImageListItemBar.d.ts
import * as React from 'react';
import { SxProps } from '@mui/system';
import { Theme } from '../styles';
import { InternalStandardProps as StandardProps } from '../internal';
import { ImageListItemBarClasses } from './imageListItemBarClasses';
export interface ImageListItemBarProps extends StandardProps<
React.HTMLAttributes<HTMLDivElement>,
'title'
> {
/**
* An IconButton element to be used as secondary action target
* (primary action target is the item itself).
*/
actionIcon?: React.ReactNode;
/**
* Position of secondary action IconButton.
* @default 'right'
*/
actionPosition?: 'left' | 'right' | undefined;
/**
* Override or extend the styles applied to the component.
*/
classes?: Partial<ImageListItemBarClasses> | undefined;
/**
* Position of the title bar.
* @default 'bottom'
*/
position?: 'below' | 'top' | 'bottom' | undefined;
/**
* String or element serving as subtitle (support text).
*/
subtitle?: React.ReactNode;
/**
* The system prop that allows defining system overrides as well as additional CSS styles.
*/
sx?: SxProps<Theme> | undefined;
/**
* Title to be displayed.
*/
title?: React.ReactNode;
}
export default function ImageListItemBar(props: ImageListItemBarProps): React.JSX.Element;
Post-install acceptance
Run strict types, production build and real interactions. Check keyboard labels/focus, disabled/error/read-only semantics where natively supported, both themes, narrow screens and reduced motion. Verify callbacks against the real host data; do not declare installation complete from copying a prompt. Initialization fixtures also require server HTML and warning-free hydration.
Source and license
https://github.com/mui/material-ui/tree/809a7717b4c050ba3f69b75300689f07c050a16e
MIT · @mui/material@9.4.0. Vendor originals and license are preserved. Full original upstream prose remains in vendor/docs and is not represented as fully translated.