Radix UI предоставляет модульный и доступный подход к созданию пользовательских интерфейсов. Компонент Avatar в Radix UI позволяет отображать пользовательские изображения, инициалы или иконки, а для комплексных интерфейсов часто требуется объединять несколько аватаров в одну визуальную группу. Для этого используется Avatar Group.
AvatarGroupAvatarGroup — контейнер для нескольких
аватаров, позволяющий компактно отображать их в виде стека или
горизонтальной линии с перекрытием. Основные свойства включают:
max — ограничивает количество видимых
аватаров. Если аватаров больше, чем указано в max,
появляется индикатор с числом оставшихся элементов.spacing — управляет расстоянием между
аватарами. Отрицательные значения создают эффект перекрытия.layout — может быть горизонтальным (по
умолчанию) или вертикальным.Пример базовой структуры:
import * as Avatar from '@radix-ui/react-avatar';
<Avatar.Group max={3} spacing={-10}>
<Avatar.Root>
<Avatar.Image src="user1.jpg" alt="User 1" />
<Avatar.Fallback>U1</Avatar.Fallback>
</Avatar.Root>
<Avatar.Root>
<Avatar.Image src="user2.jpg" alt="User 2" />
<Avatar.Fallback>U2</Avatar.Fallback>
</Avatar.Root>
<Avatar.Root>
<Avatar.Image src="user3.jpg" alt="User 3" />
<Avatar.Fallback>U3</Avatar.Fallback>
</Avatar.Root>
<Avatar.Root>
<Avatar.Image src="user4.jpg" alt="User 4" />
<Avatar.Fallback>U4</Avatar.Fallback>
</Avatar.Root>
</Avatar.Group>
В этом примере отображаются первые три аватара, а четвёртый будет скрыт за индикатором, показывающим «+1».
Каждый аватар в группе может иметь собственный размер, но
рекомендуется использовать одинаковые размеры для единообразного
визуального стека. Размер задаётся через CSS или проп
style:
<Avatar.Root style={{ width: 40, height: 40 }}>
<Avatar.Image src="user.jpg" alt="User" />
<Avatar.Fallback>U</Avatar.Fallback>
</Avatar.Root>
Для улучшения видимости при перекрытии аватаров можно задать контрастные границы и фон:
.avatar {
border: 2px solid white;
border-radius: 50%;
background-color: #ccc;
}
<Avatar.Root className="avatar">
<Avatar.Image src="user.jpg" alt="User" />
<Avatar.Fallback>U</Avatar.Fallback>
</Avatar.Root>
Если количество аватаров превышает max, Radix UI
автоматически отображает +N. Этот элемент
можно стилизовать отдельно:
<Avatar.Group max={3} spacing={-10}>
{/* Авторы */}
<Avatar.Overflow>
+{remainingCount}
</Avatar.Overflow>
</Avatar.Group>
С помощью CSS можно задавать цвет, размер и фон для индикатора:
.avatar-overflow {
width: 40px;
height: 40px;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
background-color: #999;
color: white;
font-weight: bold;
border: 2px solid white;
}
Radix UI гарантирует базовую доступность через семантические элементы и ARIA-атрибуты:
alt текст для изображений.Рекомендуется использовать aria-label
для группы аватаров, если она представляет команду или участников:
<Avatar.Group aria-label="Команда проекта">
...
</Avatar.Group>
Для динамических интерфейсов можно добавить плавные переходы при изменении группы аватаров:
.avatar {
transition: transform 0.2s ease;
}
.avatar:hover {
transform: scale(1.1);
z-index: 1;
}
Это позволяет при наведении выделять аватар, не нарушая компоновку группы.
Avatar Group легко интегрируется с другими Radix UI компонентами:
Пример с Tooltip:
import * as Tooltip from '@radix-ui/react-tooltip';
<Avatar.Group spacing={-10}>
<Tooltip.Root>
<Tooltip.Trigger asChild>
<Avatar.Root>
<Avatar.Image src="user.jpg" alt="User" />
<Avatar.Fallback>U</Avatar.Fallback>
</Avatar.Root>
</Tooltip.Trigger>
<Tooltip.Content>Пользователь 1</Tooltip.Content>
</Tooltip.Root>
</Avatar.Group>
Эта структура позволяет создавать гибкие, доступные и визуально привлекательные стеки аватаров, которые легко масштабируются и интегрируются с другими элементами интерфейса в рамках Radix UI.