跳转到内容

Avatar 头像 ​

表示一个人或一个组织的圆形标识:优先显示图片,无法加载时回退到文字或图标。

用法 ​

图片加载失败或未提供时落到 fallback

曦XH

组件结构 ​

加粗的是必需部件。

data-scope="avatar":root · image · fallback

示例 ​

加载失败回退 ​

图片地址取不到时切到 fallback,切换由状态机决定而不是 CSS

回退无图

尺寸 ​

size 三档只改变直径,回退文字的字号随之缩放;默认档不输出 data-size

曦曦曦sm / 缺省 / lg
XHXHXH回退字随档位缩放

形状 ​

圆角是一个组件令牌,整圆、圆角方、直角都是同一个槽位换值;图片的圆角从根继承,不必另设

曦曦曦整圆(缺省)/ 圆角方 / 直角
XHXHXH

图标作为回退 ​

fallback 是普通插槽,放图标与放缩写文字一样;没有名字可写时用图标表示某位用户

图元跟着档位一起换,取的是根流下来的前景色

自定义直径与配色 ​

三档之外的直径、底色、字色各是一个组件令牌;按人名分配颜色即逐个实例覆盖

曦曦寒直径 56px
曦寒懿XH底色与字色逐个给

加载状态 ​

status-change 在状态落位时通知,过渡态 idle 不通知;未提供地址等同于无法获取,直接落为 error 由回退接管

曦地址有效 → 等待中
回退地址取不到 → 等待中
无图没给地址 → 等待中

颜色 ​

tone 改变淡底与回退文字的配色组;不写 tone 即中性默认,直径与字号都不受影响

XH曦中成警危信

设计指引 ​

何时使用 ​

  • 在列表、评论、成员选择中标识身份。

何时不用 ​

  • 标识功能或分类时,使用图标块。
  • 只是展示一张图片时,使用图片。

特性 ​

  • 加载状态通过回调通知;失败时自动显示 fallback。
  • 直径与配色都是组件令牌,可逐实例覆盖。
  • tone 切换淡底与回退文字的配色族;未设置时使用中性默认值。
  • 状态点与角标由作者挂在外部,组件不预设。

组合 ​

最佳实践 ​

  • 回退内容应有意义:姓名缩写比通用人形图标携带更多信息。
  • alt 写人名,不写“头像”。

反模式 ​

  • 只提供图片、不提供回退:图片失效后会留下空洞。
  • 只用头像颜色编码身份而不提供文字。

API 参考 ​

产物 ​

层值
自定义元素<xh-avatar>
Vue 组件XhAvatarFallback XhAvatarImage XhAvatarRoot
组合式函数useAvatar
状态机avatarMachine
皮肤@xihan-ui/styles/avatar.css

Props ​

属性类型必填说明
srcstring
altstring
sizeSize尺寸:sm / md / lg,默认 md;默认档不输出 data-size
toneTone颜色:决定底色与回退字使用哪组状态色;未提供时不输出 data-tone,使用皮肤的中性默认
onStatusChange(details: AvatarStatusChangeDetails) => void状态落定时通知,过渡态 idle 不通知。

事件 ​

自定义元素将载荷放在 detail;Vue 使用同名 emit。

事件载荷说明
status-changeAvatarStatusChangeDetails加载状态变化;detail 为 { status: 'loading' | 'loaded' | 'error' }

状态 ​

公开状态写入 data-state。

部件取值
root'idle' | 'loading' | 'loaded' | 'error'
image'idle' | 'loading' | 'loaded' | 'error'
fallback'idle' | 'loading' | 'loaded' | 'error'

以下名称仅用于内部状态机。

状态:idle · loading · loaded · error

事件:SRC.CHANGE · IMAGE.LOAD · IMAGE.ERROR

判据:hasSrc

connect API ​

getXxxProps() 返回对应部件的宿主属性。

成员类型说明
statusAvatarStatus
loadedboolean
getRootProps() => T['element']
getImageProps() => T['img']
getFallbackProps() => T['element']

无障碍 ​

键盘 ​

规格出处:W3C APG

无键盘交互(不接收焦点,或焦点行为完全由原生元素提供)。

样式参考 ​

皮肤 ​

@xihan-ui/styles/avatar.css 使用 [data-scope="avatar"][data-part="root"] 部件选择器,位于 xihan.components 层。覆盖样式使用 xihan.overrides。

数据属性 ​

由 connect 生成;条件不成立时不输出无值属性。

部件属性值
rootdata-sizeprops.size
rootdata-state'idle' | 'loading' | 'loaded' | 'error'
rootdata-toneprops.tone
imagedata-state'idle' | 'loading' | 'loaded' | 'error'
fallbackdata-state'idle' | 'loading' | 'loaded' | 'error'

CSS 变量 ​

本组件公开覆盖槽由独立皮肤的实际消费位生成;默认来源、作用部件和状态均与 CSS 同源。

变量部件CSS 属性状态默认来源说明
--xh-avatar-bgrootbackgrounddefault
tone
--xh-_tone-subtle
--xh-bg-subtle-opaque
avatar 的 root 部件 background 覆盖槽。
--xh-avatar-fgrootcolordefault
tone
--xh-_tone-fg
--xh-fg-muted
avatar 的 root 部件 color 覆盖槽。
--xh-avatar-font-sizerootfont-sizedefault
size=lg
size=sm
--xh-control-caption-lg
--xh-control-caption-sm
--xh-text-secondary-size
avatar 的 root 部件 font-size 覆盖槽。
--xh-avatar-font-weightrootfont-weightdefault--xh-font-weight-mediumavatar 的 root 部件 font-weight 覆盖槽。
--xh-avatar-radiusrootborder-radiusdefault--xh-shape-circleavatar 的 root 部件 border-radius 覆盖槽。
--xh-avatar-sizerootblock-size
inline-size
default
size=lg
size=sm
--xh-control-h-lg
--xh-control-h-md
--xh-control-h-sm
avatar 的 root 部件 block-size、inline-size 覆盖槽。

动效 ​

动效角色:出现(见动效规范)。

共享关键帧 xh-fade-in 由 family/motion.css 提供,皮肤 @import 它,单独引入仍成立。时长与缓动读动效令牌,改令牌即改全局节奏。

系统开启减弱动效时由令牌层统一收敛,皮肤不另作判断。

Released under The MIT License