UI Components Easy
Avatar Group
Stacked overlapping avatars with a "+N more" overflow indicator — supports image avatars, initials fallback, size variants, and name tooltip on hover.
Open in Lab
MCP
css
Targets: HTML
Code
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: Inter, system-ui, sans-serif;
background: #050910;
color: #f2f6ff;
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
padding: 2rem;
}
.demo {
width: 100%;
max-width: 480px;
}
.demo-title {
font-size: 1.5rem;
font-weight: 800;
margin-bottom: 0.375rem;
}
.demo-sub {
color: #475569;
font-size: 0.875rem;
margin-bottom: 2rem;
}
.groups {
display: flex;
flex-direction: column;
gap: 2rem;
}
.group-row {
}
.group-label {
font-size: 0.72rem;
font-weight: 600;
letter-spacing: 0.08em;
text-transform: uppercase;
color: #475569;
margin-bottom: 0.75rem;
}
/* ── Group ── */
.avatar-group {
display: flex;
align-items: center;
}
.avatar-group > .avatar + .avatar {
margin-left: -0.6rem;
}
.avatar-group--sm > .avatar + .avatar {
margin-left: -0.5rem;
}
.avatar-group--lg > .avatar + .avatar {
margin-left: -0.75rem;
}
.avatar-group--spread > .avatar + .avatar {
margin-left: 0.25rem;
}
/* ── Avatar ── */
.avatar {
--size: 36px;
width: var(--size);
height: var(--size);
border-radius: 50%;
border: 2px solid #050910;
display: flex;
align-items: center;
justify-content: center;
font-size: calc(var(--size) * 0.32);
font-weight: 700;
color: #f2f6ff;
background: #1e293b;
position: relative;
cursor: default;
flex-shrink: 0;
transition: transform 0.15s;
}
.avatar:hover {
transform: translateY(-3px);
z-index: 10;
}
/* Tooltip */
.avatar[data-name]::after {
content: attr(data-name);
position: absolute;
bottom: calc(100% + 6px);
left: 50%;
transform: translateX(-50%);
background: #0d1117;
border: 1px solid rgba(255, 255, 255, 0.08);
color: #f2f6ff;
font-size: 0.7rem;
font-weight: 500;
white-space: nowrap;
padding: 0.25rem 0.5rem;
border-radius: 0.375rem;
pointer-events: none;
opacity: 0;
transition: opacity 0.15s;
}
.avatar:hover::after {
opacity: 1;
}
/* Sizes */
.avatar-group--sm .avatar {
--size: 28px;
}
.avatar-group--lg .avatar {
--size: 48px;
}
/* Colors */
.avatar--blue {
background: rgba(56, 189, 248, 0.18);
color: #38bdf8;
}
.avatar--green {
background: rgba(34, 197, 94, 0.18);
color: #22c55e;
}
.avatar--amber {
background: rgba(245, 158, 11, 0.18);
color: #f59e0b;
}
.avatar--red {
background: rgba(239, 68, 68, 0.18);
color: #ef4444;
}
.avatar--purple {
background: rgba(167, 139, 250, 0.18);
color: #a78bfa;
}
/* Overflow pill */
.avatar--overflow {
background: rgba(255, 255, 255, 0.07);
color: #94a3b8;
font-size: 0.7rem;
font-weight: 600;
}<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Avatar Group</title>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<div class="demo">
<h1 class="demo-title">Avatar Group</h1>
<p class="demo-sub">Stacked overlapping avatars with overflow indicator.</p>
<div class="groups">
<!-- Small -->
<div class="group-row">
<p class="group-label">Small · 28px</p>
<div class="avatar-group avatar-group--sm">
<div class="avatar avatar--blue" data-name="Alex Kim">AK</div>
<div class="avatar avatar--green" data-name="Maria R.">MR</div>
<div class="avatar avatar--purple" data-name="James O.">JO</div>
<div class="avatar avatar--amber" data-name="Sofia L.">SL</div>
<div class="avatar avatar--red" data-name="Tom W.">TW</div>
<div class="avatar avatar--overflow">+3</div>
</div>
</div>
<!-- Medium (default) -->
<div class="group-row">
<p class="group-label">Medium · 36px</p>
<div class="avatar-group">
<div class="avatar avatar--blue" data-name="Alex Kim">AK</div>
<div class="avatar avatar--green" data-name="Maria R.">MR</div>
<div class="avatar avatar--purple" data-name="James O.">JO</div>
<div class="avatar avatar--amber" data-name="Sofia L.">SL</div>
<div class="avatar avatar--overflow">+2</div>
</div>
</div>
<!-- Large -->
<div class="group-row">
<p class="group-label">Large · 48px</p>
<div class="avatar-group avatar-group--lg">
<div class="avatar avatar--blue" data-name="Alex Kim">AK</div>
<div class="avatar avatar--red" data-name="Maria R.">MR</div>
<div class="avatar avatar--green" data-name="James O.">JO</div>
<div class="avatar avatar--purple" data-name="Sofia L.">SL</div>
</div>
</div>
<!-- With spacing variant -->
<div class="group-row">
<p class="group-label">Spread layout</p>
<div class="avatar-group avatar-group--spread">
<div class="avatar avatar--blue" data-name="Alex">AK</div>
<div class="avatar avatar--green" data-name="Maria">MR</div>
<div class="avatar avatar--amber" data-name="James">JO</div>
</div>
</div>
</div>
</div>
</body>
</html>Avatar Group
Display multiple user avatars in a compact stacked layout — great for showing team members, collaborators, or participants.
Features
- Negative margin overlap creates the stacked look
- Border matches background for seamless separation
+Noverflow indicator when there are more avatarsdata-nameattribute adds a CSS tooltip on hover- Three sizes:
sm(28px) ·md(36px) ·lg(48px) - Initials fallback with per-color background variants