aui-components
ComponentsUI

Avatar

头像组件,基于 @base-ui/react

Avatar 是对 @base-ui/react/avatar 的封装,提供头像展示、图片加载回退和头像组功能。

引入

import {
  Avatar,
  AvatarImage,
  AvatarFallback,
  AvatarBadge,
  AvatarGroup,
  AvatarGroupCount,
} from "aui-components";

基本用法

<Avatar>
  <AvatarImage src="https://example.com/avatar.jpg" alt="User" />
  <AvatarFallback>JD</AvatarFallback>
</Avatar>
  • 图片加载成功:显示 AvatarImage
  • 图片加载失败:显示 AvatarFallback(首字母、图标等)

子组件

子组件说明
Avatar根容器
AvatarImage头像图片
AvatarFallback图片加载失败时的回退内容
AvatarBadge右下角状态标记
AvatarGroup头像组容器
AvatarGroupCount头像组的 "+N" 计数

Avatar Props

属性类型默认值说明
classNameenum—CSS class applied to the element, or a function that returns a class based on the component's state.
renderenum—Allows you to replace the component's HTML element with a different tag, or compose it with another component. Accepts a `ReactElement` or a function that returns the element to render.
styleenum—Style applied to the element, or a function that returns a style object based on the component's state.
sizeenumdefault—

尺寸

尺寸样式
defaultsize-8
smsize-6
lgsize-10
<div className="flex items-center gap-2">
  <Avatar size="sm">
    <AvatarFallback>S</AvatarFallback>
  </Avatar>
  <Avatar size="default">
    <AvatarFallback>M</AvatarFallback>
  </Avatar>
  <Avatar size="lg">
    <AvatarFallback>L</AvatarFallback>
  </Avatar>
</div>

AvatarBadge

在头像右下角显示状态标记:

<Avatar>
  <AvatarImage src="..." alt="User" />
  <AvatarFallback>JD</AvatarFallback>
  <AvatarBadge className="bg-green-500" />
</Avatar>
  • 位置:absolute right-0 bottom-0
  • 样式:圆角方形,bg-primary,ring 环绕

AvatarGroup

将多个头像组合展示:

<AvatarGroup>
  <Avatar>
    <AvatarImage src="user1.jpg" />
  </Avatar>
  <Avatar>
    <AvatarImage src="user2.jpg" />
  </Avatar>
  <Avatar>
    <AvatarImage src="user3.jpg" />
  </Avatar>
  <AvatarGroupCount>+5</AvatarGroupCount>
</AvatarGroup>
  • 头像之间有 -space-x-2 重叠
  • 每个头像带 ring-2 ring-background 分隔

在组件库中的使用

Avatar 被 Attachment 组件内部使用,用于显示附件缩略图:

// AttachmentThumb 内部
<Avatar className="h-full w-full rounded-none">
  <AvatarImage src={src} className="rounded-none object-cover" />
  <AvatarFallback>
    <FileTextIcon className="size-8" />
  </AvatarFallback>
</Avatar>

完整示例

export function UserAvatar() {
  return (
    <div className="flex items-center gap-2">
      <Avatar>
        <AvatarImage src="https://github.com/user.png" alt="User Name" />
        <AvatarFallback>UN</AvatarFallback>
      </Avatar>
      <div>
        <p className="text-sm font-medium">User Name</p>
        <p className="text-xs text-muted-foreground">Online</p>
      </div>
    </div>
  );
}

export function ProjectMembers() {
  return (
    <AvatarGroup>
      <Avatar size="sm">
        <AvatarImage src="member1.jpg" />
      </Avatar>
      <Avatar size="sm">
        <AvatarFallback>JD</AvatarFallback>
      </Avatar>
      <Avatar size="sm">
        <AvatarFallback>AK</AvatarFallback>
      </Avatar>
      <AvatarGroupCount>+3</AvatarGroupCount>
    </AvatarGroup>
  );
}

On this page