Avatar 头像
显示用户头像,支持自定义 fallback 内容
用法
import { Avatar } from '@lenso/ui';此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (e385ac202b2cdb94b1bf6fa76d32c31c8259cc5e), Apache-2.0.import { Avatar } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";import { s } from "../card/display.stylex";
export function Basic() { return ( <div {...stylex.props(s.row4)}> <Avatar> <Avatar.Image alt="John Doe" src="https://img.heroui.chat/image/avatar?w=400&h=400&u=3" /> <Avatar.Fallback>JD</Avatar.Fallback> </Avatar> <Avatar> <Avatar.Image alt="Blue" src="https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/blue.jpg" /> <Avatar.Fallback>B</Avatar.Fallback> </Avatar> <Avatar> <Avatar.Fallback>JR</Avatar.Fallback> </Avatar> </div> );}Local adaptation source above. Derived from HeroUI v3.2.6 source.
组件结构
import { Avatar } from '@lenso/ui';
export default () => ( <Avatar> <Avatar.Image/> <Avatar.Fallback/> </Avatar>)示例
尺寸
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (e385ac202b2cdb94b1bf6fa76d32c31c8259cc5e), Apache-2.0.import { Avatar } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";import { s } from "../card/display.stylex";
export function Sizes() { return ( <div {...stylex.props(s.row4)}> <Avatar size="sm"> <Avatar.Image alt="Small Avatar" src="https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/blue.jpg" /> <Avatar.Fallback>SM</Avatar.Fallback> </Avatar> <Avatar size="md"> <Avatar.Image alt="Medium Avatar" src="https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/purple.jpg" /> <Avatar.Fallback>MD</Avatar.Fallback> </Avatar> <Avatar size="lg"> <Avatar.Image alt="Large Avatar" src="https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/red.jpg" /> <Avatar.Fallback>LG</Avatar.Fallback> </Avatar> </div> );}Local adaptation source above. Derived from HeroUI v3.2.6 source.
颜色
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (e385ac202b2cdb94b1bf6fa76d32c31c8259cc5e), Apache-2.0.import { Avatar } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";import { s } from "../card/display.stylex";
export function Colors() { return ( <div {...stylex.props(s.row4)}> <Avatar color="default"> <Avatar.Fallback>DF</Avatar.Fallback> </Avatar> <Avatar color="accent"> <Avatar.Fallback>AC</Avatar.Fallback> </Avatar> <Avatar color="success"> <Avatar.Fallback>SC</Avatar.Fallback> </Avatar> <Avatar color="warning"> <Avatar.Fallback>WR</Avatar.Fallback> </Avatar> <Avatar color="danger"> <Avatar.Fallback>DG</Avatar.Fallback> </Avatar> </div> );}Local adaptation source above. Derived from HeroUI v3.2.6 source.
变体
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (e385ac202b2cdb94b1bf6fa76d32c31c8259cc5e), Apache-2.0.import { Person } from "@gravity-ui/icons";import { Avatar, Separator } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";import { s } from "../card/display.stylex";
export function Variants() { const colors = ["accent", "default", "success", "warning", "danger"] as const; const variants = [ { content: "AG", label: "letter", type: "letter" }, { content: "AG", label: "letter soft", type: "letter-soft" }, { content: <Person />, label: "icon", type: "icon" }, { content: <Person />, label: "icon soft", type: "icon-soft" }, { content: [ "https://img.heroui.chat/image/avatar?w=400&h=400&u=3", "https://img.heroui.chat/image/avatar?w=400&h=400&u=4", "https://img.heroui.chat/image/avatar?w=400&h=400&u=5", "https://img.heroui.chat/image/avatar?w=400&h=400&u=8", "https://img.heroui.chat/image/avatar?w=400&h=400&u=16", ], label: "img", type: "img", }, ] as const; return ( <div {...stylex.props(s.column4)}> <div {...stylex.props(s.row3)}> <div {...stylex.props(s.labelCell)} /> {colors.map((color) => ( <div key={color} {...stylex.props(s.avatarCell)}> <span {...stylex.props(s.textXs, s.muted, s.capitalize)}>{color}</span> </div> ))} </div> <Separator /> {variants.map((variant) => ( <div key={variant.label} {...stylex.props(s.row3)}> <div {...stylex.props(s.labelCell, s.textSm, s.muted)}>{variant.label}</div> {colors.map((color, colorIndex) => ( <div key={color} {...stylex.props(s.avatarCell)}> <Avatar color={color} variant={variant.type.includes("soft") ? "soft" : "default"}> {variant.type === "img" ? ( <> <Avatar.Image alt={`Avatar ${color}`} src={variant.content[colorIndex] ?? ""} /> <Avatar.Fallback>{color.charAt(0).toUpperCase()}</Avatar.Fallback> </> ) : ( <Avatar.Fallback>{variant.content}</Avatar.Fallback> )} </Avatar> </div> ))} </div> ))} </div> );}Local adaptation source above. Derived from HeroUI v3.2.6 source.
回退内容
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (e385ac202b2cdb94b1bf6fa76d32c31c8259cc5e), Apache-2.0.import { Person } from "@gravity-ui/icons";import { Avatar } from "@lenso/ui";import * as stylex from "@stylexjs/stylex";import { s } from "../card/display.stylex";
export function Fallback() { return ( <div {...stylex.props(s.row4)}> <Avatar> <Avatar.Fallback>JD</Avatar.Fallback> </Avatar> <Avatar> <Avatar.Fallback> <Person /> </Avatar.Fallback> </Avatar> <Avatar> <Avatar.Image alt="Delayed Avatar" src="https://invalid-url-to-show-fallback.com/image.jpg" /> <Avatar.Fallback delay={600}>NA</Avatar.Fallback> </Avatar> <Avatar> <Avatar.Fallback xstyle={s.gradientFallback}>GB</Avatar.Fallback> </Avatar> </div> );}Local adaptation source above. Derived from HeroUI v3.2.6 source.
自定义样式
自定义图片组件
在 Avatar.Image 上使用 asChild,即可与自定义图片组件组合。以下示例使用 Next.js Image 以实现优化加载。请将 src 传给 Avatar.Image,以便跟踪加载状态,并在图片就绪前显示回退内容。
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (e385ac202b2cdb94b1bf6fa76d32c31c8259cc5e), Apache-2.0.import { Avatar } from "@lenso/ui";import Image from "next/image";
const SRC = "https://heroui-assets.nyc3.cdn.digitaloceanspaces.com/avatars/blue.jpg";
export function CustomImageComponent() { return ( <Avatar> <Avatar.Image alt="John Doe" height={40} src={SRC} width={40} render={<Image alt="John Doe" src={SRC} height={40} width={40} unoptimized />} /> <Avatar.Fallback>JD</Avatar.Fallback> </Avatar> );}Local adaptation source above. Derived from HeroUI v3.2.6 source.
Tailwind CSS
此预览复用英文版适配,不代表中文源示例已完成本地实现。
"use client";// Adapted from HeroUI v3.2.6 (e385ac202b2cdb94b1bf6fa76d32c31c8259cc5e), Apache-2.0.import { Avatar } from "@lenso/ui";import { s } from "../card/display.stylex";
export function CustomStyles() { return ( <Avatar xstyle={s.roundLg}> <Avatar.Image alt="John Doe" src="https://img.heroui.chat/image/avatar?w=400&h=400&u=3" /> <Avatar.Fallback xstyle={s.roundLg}>JD</Avatar.Fallback> </Avatar> );}Local adaptation source above. Derived from HeroUI v3.2.6 source.
全局 CSS
可使用 @layer components 指令自定义 Avatar 组件类。
了解更多。
@layer components { .avatar { @apply size-16 border-2 border-accent; }
.avatar__fallback { @apply bg-gradient-to-br from-purple-500 to-pink-500; }}样式参考
HeroUI 遵循 BEM 方法论,确保组件变体与状态可复用且易于自定义。
CSS 类
Avatar 组件使用以下 CSS 类(查看源码样式):
基础类 [!toc]
.avatar- 基础容器,默认尺寸(size-10).avatar__image- 图片元素,aspect-square 尺寸.avatar__fallback- 居中内容的 fallback 容器
尺寸修饰符 [!toc]
.avatar--sm- 小头像(size-8).avatar--md- 中头像(默认,无额外样式).avatar--lg- 大头像(size-12)
变体修饰符 [!toc]
.avatar--soft- 浅色背景的 soft 变体
颜色修饰符 [!toc]
.avatar__fallback--default- 默认文字颜色.avatar__fallback--accent- 强调色文字.avatar__fallback--success- 成功色文字.avatar__fallback--warning- 警告色文字.avatar__fallback--danger- 危险色文字
API 参考
Avatar
| Prop | 类型 | 默认值 | 描述 |
|---|---|---|---|
size | 'sm' | 'md' | 'lg' | 'md' | 头像尺寸 |
color | 'default' | 'accent' | 'success' | 'warning' | 'danger' | 'default' | Fallback 颜色主题 |
variant | 'default' | 'soft' | 'default' | 视觉样式变体 |
className | string | - | 附加 CSS 类 |
Avatar.Image
| Prop | 类型 | 默认值 | 描述 |
|---|---|---|---|
src | string | - | 图片 URL |
srcSet | string | - | 响应式图片的 srcset 属性 |
sizes | string | - | 响应式图片的 sizes 属性 |
alt | string | - | 图片替代文本 |
asChild | boolean | false | 将属性合并到子元素上(例如 next/image),而不是渲染原生 img |
onLoad | (event: SyntheticEvent<HTMLImageElement>) => void | - | 图片加载成功时的回调 |
onError | (event: SyntheticEvent<HTMLImageElement>) => void | - | 图片加载失败时的回调 |
crossOrigin | 'anonymous' | 'use-credentials' | - | 图片请求的 CORS 设置 |
loading | 'eager' | 'lazy' | - | 原生懒加载属性 |
className | string | - | 附加 CSS 类 |
Avatar.Fallback
| Prop | 类型 | 默认值 | 描述 |
|---|---|---|---|
delayMs | number | - | 显示 fallback 前的延迟(防止闪烁) |
color | 'default' | 'accent' | 'success' | 'warning' | 'danger' | - | 覆盖父级颜色 |
className | string | - | 附加 CSS 类 |