Компонент Avatar используется для отображения
визуального представления пользователя, команды или сущности в
интерфейсе. В SvelteKit UI библиотеках он обычно строится на базе
HTML-элемента <img> или <div> с
фоновой картинкой, с возможностью кастомизации размеров, форм и
стилей.
Базовый Avatar включает следующие элементы:
<script>
export let src = '';
export let alt = 'User avatar';
export let size = 'md'; // xs, sm, md, lg, xl
export let shape = 'circle'; // circle, square, rounded
</script>
<div class="avatar {size} {shape}">
{#if src}
<img src={src} alt={alt} />
{:else}
<span class="placeholder">{alt.charAt(0)}</span>
{/if}
</div>
<style>
.avatar {
display: inline-flex;
align-items: center;
justify-content: center;
overflow: hidden;
background-color: #e2e8f0;
font-weight: bold;
color: #4a5568;
}
.avatar.circle { border-radius: 50%; }
.avatar.square { border-radius: 0; }
.avatar.rounded { border-radius: 0.5rem; }
.avatar.xs { width: 24px; height: 24px; font-size: 12px; }
.avatar.sm { width: 32px; height: 32px; font-size: 14px; }
.avatar.md { width: 48px; height: 48px; font-size: 16px; }
.avatar.lg { width: 64px; height: 64px; font-size: 18px; }
.avatar.xl { width: 96px; height: 96px; font-size: 24px; }
.avatar img {
width: 100%;
height: 100%;
object-fit: cover;
}
.placeholder {
display: flex;
align-items: center;
justify-content: center;
}
</style>
Ключевые моменты:
Часто аватар используется в списках пользователей или комментариях. В
SvelteKit это удобно реализовать через
each:
<script>
const users = [
{ id: 1, name: 'Alice', avatar: '/avatars/alice.png' },
{ id: 2, name: 'Bob', avatar: '' },
{ id: 3, name: 'Charlie', avatar: '/avatars/charlie.jpg' },
];
</script>
<ul>
{#each users as user}
<li>
<Avatar src={user.avatar} alt={user.name} size="md" />
<span>{user.name}</span>
</li>
{/each}
</ul>
Особенность SvelteKit UI заключается в том, что
реактивность данных автоматически обновляет аватар при изменении
src или alt. Это особенно важно при
асинхронной загрузке изображений, например, из API.
Дополнительно можно интегрировать status badge — индикатор онлайн/офлайн состояния:
<div class="avatar-wrapper">
<Avatar src="/avatars/alice.png" alt="Alice" size="md" />
<span class="status online"></span>
</div>
<style>
.avatar-wrapper { position: relative; display: inline-block; }
.status {
position: absolute;
bottom: 0;
right: 0;
width: 12px;
height: 12px;
border-radius: 50%;
border: 2px solid white;
}
.status.online { background-color: #48bb78; }
.status.offline { background-color: #e53e3e; }
</style>
Особенности:
position: absolute.Для отображения нескольких пользователей одновременно применяется Avatar Group. Пример реализации:
<script>
import Avatar from './Avatar.svelte';
const users = [
{ name: 'Alice', avatar: '/avatars/alice.png' },
{ name: 'Bob', avatar: '/avatars/bob.png' },
{ name: 'Charlie', avatar: '/avatars/charlie.png' },
];
</script>
<div class="avatar-group">
{#each users as user, i}
<Avatar src={user.avatar} alt={user.name} size="sm" style="margin-left: {-i * 10}px" />
{/each}
</div>
<style>
.avatar-group { display: flex; }
</style>
Особенности:
+N для скрытых пользователей.SvelteKit UI поддерживает слоты для аватара, что позволяет вставлять кастомные элементы, например иконки или svg вместо изображения:
<Avatar size="lg" shape="circle">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor">
<path d="M12 12c2.7 0 4.9-2.2 4.9-4.9S14.7 2.2 12 2.2 7.1 4.4 7.1 7.1 9.3 12 12 12zM12 14.2c-3.3 0-9.9 1.7-9.9 5v2.7h19.8v-2.7c0-3.3-6.6-5-9.9-5z"/>
</svg>
</Avatar>
Преимущества:
Эти возможности делают компонент Avatar универсальным инструментом для отображения пользователей в интерфейсе, поддерживая как простые, так и сложные сценарии визуализации.