ListItemAvatar — это специализированный компонент
библиотеки MUI, предназначенный для отображения аватаров рядом с
элементами списка (ListItem). Он обеспечивает правильное
выравнивание и отступы для аватаров, интегрируясь с другими компонентами
списка, такими как ListItemText и
ListItemSecondaryAction.
Для работы с аватарами необходимы следующие импорты:
import List from '@mui/material/List';
import ListItem from '@mui/material/ListItem';
import ListItemAvatar from '@mui/material/ListItemAvatar';
import ListItemText from '@mui/material/ListItemText';
import Avatar from '@mui/material/Avatar';
List создаёт контейнер для элементов,
ListItem представляет отдельный элемент списка,
ListItemAvatar размещает аватар слева, а
Avatar отвечает за визуальное представление изображения или
инициалов пользователя.
<List>
<ListItem>
<ListItemAvatar>
<Avatar alt="Иван Иванов" src="/images/ivan.jpg" />
</ListItemAvatar>
<ListItemText primary="Иван Иванов" secondary="ivan@example.com" />
</ListItem>
</List>
Ключевые моменты:
ListItemAvatar обязательно оборачивает компонент
Avatar.alt и src в Avatar
обеспечивают корректное отображение изображения и альтернативный
текст.ListItemText размещается автоматически с правильным
отступом справа от аватара.1. Инициалами пользователя:
<Avatar>IV</Avatar>
Если изображение недоступно, аватар может показывать инициалы,
которые задаются текстовым содержимым компонента
Avatar.
2. С цветом фона:
<Avatar sx={{ bgcolor: 'primary.main' }}>IV</Avatar>
С помощью пропса sx можно задавать стили, например, цвет
фона, размеры и тени. MUI автоматически применяет правильное
выравнивание в рамках ListItemAvatar.
3. Иконка вместо изображения:
import PersonIcon from '@mui/icons-material/Person';
<Avatar>
<PersonIcon />
</Avatar>
Вставка иконок в аватар полезна для обозначения категорий пользователей или статусов.
ListItemAvatar гарантирует вертикальное выравнивание
аватара с текстом. По умолчанию аватар имеет стандартный размер
40px. Для изменения размера используется проп
sx:
<Avatar sx={{ width: 56, height: 56 }}>IV</Avatar>
Важно помнить, что увеличение размера аватара не нарушает
выравнивание текста в ListItem, так как
ListItemAvatar автоматически корректирует отступы.
Аватар можно сделать кликабельным, добавив компонент
IconButton:
import IconButton from '@mui/material/IconButton';
<ListItemAvatar>
<IconButton>
<Avatar alt="Иван Иванов" src="/images/ivan.jpg" />
</IconButton>
</ListItemAvatar>
Это полезно для создания интерфейсов, где аватар ведёт на профиль пользователя или открывает меню.
ListItemAvatar отлично интегрируется с
ListItemSecondaryAction, позволяя создавать списки с
аватаром, текстом и дополнительными действиями справа:
import ListItemSecondaryAction from '@mui/material/ListItemSecondaryAction';
import DeleteIcon from '@mui/icons-material/Delete';
import IconButton from '@mui/material/IconButton';
<ListItem>
<ListItemAvatar>
<Avatar src="/images/ivan.jpg" />
</ListItemAvatar>
<ListItemText primary="Иван Иванов" secondary="ivan@example.com" />
<ListItemSecondaryAction>
<IconButton edge="end" aria-label="delete">
<DeleteIcon />
</IconButton>
</ListItemSecondaryAction>
</ListItem>
ListItemAvatar сохраняет правильные отступы даже при
наличии кнопок действий справа.
sx позволяет менять размеры, цвета и
тени.Badge для
отображения статусов:import Badge from '@mui/material/Badge';
import CircleIcon from '@mui/icons-material/Circle';
<ListItemAvatar>
<Badge
overlap="circular"
anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}
badgeContent={<CircleIcon sx={{ color: 'green', fontSize: 12 }} />}
>
<Avatar src="/images/ivan.jpg" />
</Badge>
</ListItemAvatar>
Такой подход позволяет добавлять визуальные индикаторы, не нарушая верстку списка.
ListItemAvatar всегда оборачивает Avatar;
прямое размещение Avatar внутри ListItem может
привести к неправильному выравниванию.ListItemText для
стандартного макета.IconButton или
использовать обработчики onClick.Хотите, я подготовлю раздел с расширенными трюками, где показаны списки с группировкой аватаров, динамическими иконками статусов и адаптивным поведением для мобильных устройств?