开发预览 更新于 2026-05-10

Avatar 头像

头像 —— 图片 / 缩写 / 图标三态自动 fallback,5 尺寸 + 圆形/方形 + AvatarGroup 重叠。

基础用法

优先级:src 加载成功 → 显示图片;加载失败或没传 src → fallback / name 缩写;都没有就显示 ?

背景 视口
头像CQAL?
src/App.vue
<script setup lang="ts">
import { CfAvatar } from '@chufix-design/vue';

const avatarSrc = 'data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 80 80%22%3E%3Crect width=%2280%22 height=%2280%22 rx=%2220%22 fill=%22%23dbeafe%22/%3E%3Ccircle cx=%2240%22 cy=%2232%22 r=%2214%22 fill=%22%232563eb%22/%3E%3Cpath d=%22M16 70c4-18 16-27 24-27s20 9 24 27%22 fill=%22%2360a5fa%22/%3E%3C/svg%3E';
</script>
<template>
  <div class="demo-row">
    <CfAvatar :src="avatarSrc" alt="头像" />
    <CfAvatar name="Chen Qi" />
    <CfAvatar name="Anna Lee" />
    <CfAvatar fallback="?" />
  </div>
</template>
<script setup>
import { CfAvatar } from '@chufix-design/vue';

const avatarSrc = 'data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 80 80%22%3E%3Crect width=%2280%22 height=%2280%22 rx=%2220%22 fill=%22%23dbeafe%22/%3E%3Ccircle cx=%2240%22 cy=%2232%22 r=%2214%22 fill=%22%232563eb%22/%3E%3Cpath d=%22M16 70c4-18 16-27 24-27s20 9 24 27%22 fill=%22%2360a5fa%22/%3E%3C/svg%3E';
</script>
<template>
  <div class="demo-row">
    <CfAvatar :src="avatarSrc" alt="头像" />
    <CfAvatar name="Chen Qi" />
    <CfAvatar name="Anna Lee" />
    <CfAvatar fallback="?" />
  </div>
</template>
import { CfAvatar } from '@chufix-design/react';

export default function Demo() {
return (
  <>
    <CfAvatar src="https://i.pravatar.cc/80?img=12" alt="头像" />
    <CfAvatar name="Chen Qi" />
    <CfAvatar name="Anna Lee" />
    <CfAvatar fallback="?" />
  </>
);
}
import { CfAvatar } from '@chufix-design/react';

export default function Demo() {
return (
  <>
    <CfAvatar src="https://i.pravatar.cc/80?img=12" alt="头像" />
    <CfAvatar name="Chen Qi" />
    <CfAvatar name="Anna Lee" />
    <CfAvatar fallback="?" />
  </>
);
}

尺寸与形状

5 档尺寸(xs / sm / md / lg / xl),2 种形状(circle / square)。

背景 视口
CQCQCQCQCQ
BSBS
src/App.vue
<script setup lang="ts">
import { CfAvatar } from '@chufix-design/vue';
</script>
<template>
  <div class="demo-stack">
    <div class="demo-row" style="align-items: flex-end;">
      <CfAvatar size="xs" name="Chen Qi" />
      <CfAvatar size="sm" name="Chen Qi" />
      <CfAvatar size="md" name="Chen Qi" />
      <CfAvatar size="lg" name="Chen Qi" />
      <CfAvatar size="xl" name="Chen Qi" />
    </div>
    <div class="demo-row">
      <CfAvatar shape="circle" name="Bob Smith" />
      <CfAvatar shape="square" name="Bob Smith" />
    </div>
  </div>
</template>
<script setup>
import { CfAvatar } from '@chufix-design/vue';
</script>
<template>
  <div class="demo-stack">
    <div class="demo-row" style="align-items: flex-end;">
      <CfAvatar size="xs" name="Chen Qi" />
      <CfAvatar size="sm" name="Chen Qi" />
      <CfAvatar size="md" name="Chen Qi" />
      <CfAvatar size="lg" name="Chen Qi" />
      <CfAvatar size="xl" name="Chen Qi" />
    </div>
    <div class="demo-row">
      <CfAvatar shape="circle" name="Bob Smith" />
      <CfAvatar shape="square" name="Bob Smith" />
    </div>
  </div>
</template>
import { CfAvatar } from '@chufix-design/react';

export default function Demo() {
  return (
    <>
      <CfAvatar size="xs" name="Chen Qi" />
      <CfAvatar size="sm" name="Chen Qi" />
      <CfAvatar size="md" name="Chen Qi" />
      <CfAvatar size="lg" name="Chen Qi" />
      <CfAvatar size="xl" name="Chen Qi" />
      <CfAvatar shape="circle" name="Bob Smith" />
      <CfAvatar shape="square" name="Bob Smith" />
    </>
  );
}
import { CfAvatar } from '@chufix-design/react';

export default function Demo() {
  return (
    <>
      <CfAvatar size="xs" name="Chen Qi" />
      <CfAvatar size="sm" name="Chen Qi" />
      <CfAvatar size="md" name="Chen Qi" />
      <CfAvatar size="lg" name="Chen Qi" />
      <CfAvatar size="xl" name="Chen Qi" />
      <CfAvatar shape="circle" name="Bob Smith" />
      <CfAvatar shape="square" name="Bob Smith" />
    </>
  );
}

Fallback 优先级

第二个示例传了一个不存在的 src,自动回退到 name 计算的缩写。最后一个是自定义图标。

背景 视口
正常加载FTCQASAI
src/App.vue
<script setup lang="ts">
import { CfAvatar } from '@chufix-design/vue';

const avatarSrc = 'data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 80 80%22%3E%3Crect width=%2280%22 height=%2280%22 rx=%2218%22 fill=%22%23ecfeff%22/%3E%3Ccircle cx=%2240%22 cy=%2231%22 r=%2213%22 fill=%22%230891b2%22/%3E%3Cpath d=%22M17 68c5-16 16-24 23-24s18 8 23 24%22 fill=%22%2322d3ee%22/%3E%3C/svg%3E';
</script>
<template>
  <div class="demo-row">
    <CfAvatar :src="avatarSrc" alt="正常加载" />
    <CfAvatar name="Fallback Test" />
    <CfAvatar name="Chen Qi" />
    <CfAvatar name="anna lee smith" />
    <CfAvatar fallback="AI" />
    <CfAvatar>
      <svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor">
        <circle cx="8" cy="6" r="3" />
        <path d="M2 14a6 6 0 0 1 12 0" />
      </svg>
    </CfAvatar>
  </div>
</template>
<script setup>
import { CfAvatar } from '@chufix-design/vue';

const avatarSrc = 'data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 80 80%22%3E%3Crect width=%2280%22 height=%2280%22 rx=%2218%22 fill=%22%23ecfeff%22/%3E%3Ccircle cx=%2240%22 cy=%2231%22 r=%2213%22 fill=%22%230891b2%22/%3E%3Cpath d=%22M17 68c5-16 16-24 23-24s18 8 23 24%22 fill=%22%2322d3ee%22/%3E%3C/svg%3E';
</script>
<template>
  <div class="demo-row">
    <CfAvatar :src="avatarSrc" alt="正常加载" />
    <CfAvatar name="Fallback Test" />
    <CfAvatar name="Chen Qi" />
    <CfAvatar name="anna lee smith" />
    <CfAvatar fallback="AI" />
    <CfAvatar>
      <svg viewBox="0 0 16 16" width="14" height="14" fill="currentColor">
        <circle cx="8" cy="6" r="3" />
        <path d="M2 14a6 6 0 0 1 12 0" />
      </svg>
    </CfAvatar>
  </div>
</template>
import { CfAvatar } from '@chufix-design/react';

export default function Demo() {
  return (
    <>
      <CfAvatar src="https://i.pravatar.cc/80?img=22" alt="正常加载" />
      <CfAvatar src="/__intentionally_404__.png" name="Fallback Test" />
      <CfAvatar name="Chen Qi" />
      <CfAvatar name="anna lee smith" />
      <CfAvatar fallback="🐱" />
      <CfAvatar><UserSvg /></CfAvatar>
    </>
  );
}
import { CfAvatar } from '@chufix-design/react';

export default function Demo() {
  return (
    <>
      <CfAvatar src="https://i.pravatar.cc/80?img=22" alt="正常加载" />
      <CfAvatar src="/__intentionally_404__.png" name="Fallback Test" />
      <CfAvatar name="Chen Qi" />
      <CfAvatar name="anna lee smith" />
      <CfAvatar fallback="🐱" />
      <CfAvatar><UserSvg /></CfAvatar>
    </>
  );
}

AvatarGroup 重叠

AvatarGroup 把若干 Avatar 横向重叠排列,常用于 “X 人协作” 的头像列表。spacing 控制重叠幅度(负值越大重叠越多)。

背景 视口
+5ANBOCIDE+12
src/App.vue
<script setup lang="ts">
import { CfAvatar, CfAvatarGroup } from '@chufix-design/vue';

const avatarBlue = 'data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 80 80%22%3E%3Crect width=%2280%22 height=%2280%22 rx=%2220%22 fill=%22%23dbeafe%22/%3E%3Ccircle cx=%2240%22 cy=%2232%22 r=%2214%22 fill=%22%232563eb%22/%3E%3Cpath d=%22M16 70c4-18 16-27 24-27s20 9 24 27%22 fill=%22%2360a5fa%22/%3E%3C/svg%3E';
const avatarGreen = 'data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 80 80%22%3E%3Crect width=%2280%22 height=%2280%22 rx=%2220%22 fill=%22%23dcfce7%22/%3E%3Ccircle cx=%2240%22 cy=%2232%22 r=%2214%22 fill=%22%2316a34a%22/%3E%3Cpath d=%22M16 70c4-18 16-27 24-27s20 9 24 27%22 fill=%22%2386efac%22/%3E%3C/svg%3E';
const avatarAmber = 'data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 80 80%22%3E%3Crect width=%2280%22 height=%2280%22 rx=%2220%22 fill=%22%23fef3c7%22/%3E%3Ccircle cx=%2240%22 cy=%2232%22 r=%2214%22 fill=%22%23d97706%22/%3E%3Cpath d=%22M16 70c4-18 16-27 24-27s20 9 24 27%22 fill=%22%23fbbf24%22/%3E%3C/svg%3E';
</script>
<template>
  <div class="demo-stack">
    <CfAvatarGroup>
      <CfAvatar :src="avatarBlue" />
      <CfAvatar :src="avatarGreen" />
      <CfAvatar :src="avatarAmber" />
      <CfAvatar fallback="+5" />
    </CfAvatarGroup>
    <CfAvatarGroup :spacing="-4">
      <CfAvatar size="sm" name="Anna" />
      <CfAvatar size="sm" name="Bob" />
      <CfAvatar size="sm" name="Cici" />
      <CfAvatar size="sm" name="Dean" />
      <CfAvatar size="sm" fallback="+12" />
    </CfAvatarGroup>
  </div>
</template>
<script setup>
import { CfAvatar, CfAvatarGroup } from '@chufix-design/vue';

const avatarBlue = 'data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 80 80%22%3E%3Crect width=%2280%22 height=%2280%22 rx=%2220%22 fill=%22%23dbeafe%22/%3E%3Ccircle cx=%2240%22 cy=%2232%22 r=%2214%22 fill=%22%232563eb%22/%3E%3Cpath d=%22M16 70c4-18 16-27 24-27s20 9 24 27%22 fill=%22%2360a5fa%22/%3E%3C/svg%3E';
const avatarGreen = 'data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 80 80%22%3E%3Crect width=%2280%22 height=%2280%22 rx=%2220%22 fill=%22%23dcfce7%22/%3E%3Ccircle cx=%2240%22 cy=%2232%22 r=%2214%22 fill=%22%2316a34a%22/%3E%3Cpath d=%22M16 70c4-18 16-27 24-27s20 9 24 27%22 fill=%22%2386efac%22/%3E%3C/svg%3E';
const avatarAmber = 'data:image/svg+xml,%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 80 80%22%3E%3Crect width=%2280%22 height=%2280%22 rx=%2220%22 fill=%22%23fef3c7%22/%3E%3Ccircle cx=%2240%22 cy=%2232%22 r=%2214%22 fill=%22%23d97706%22/%3E%3Cpath d=%22M16 70c4-18 16-27 24-27s20 9 24 27%22 fill=%22%23fbbf24%22/%3E%3C/svg%3E';
</script>
<template>
  <div class="demo-stack">
    <CfAvatarGroup>
      <CfAvatar :src="avatarBlue" />
      <CfAvatar :src="avatarGreen" />
      <CfAvatar :src="avatarAmber" />
      <CfAvatar fallback="+5" />
    </CfAvatarGroup>
    <CfAvatarGroup :spacing="-4">
      <CfAvatar size="sm" name="Anna" />
      <CfAvatar size="sm" name="Bob" />
      <CfAvatar size="sm" name="Cici" />
      <CfAvatar size="sm" name="Dean" />
      <CfAvatar size="sm" fallback="+12" />
    </CfAvatarGroup>
  </div>
</template>
import { CfAvatar, CfAvatarGroup } from '@chufix-design/react';

export default function Demo() {
  return (
    <>
      <CfAvatarGroup>
      <CfAvatar src="https://i.pravatar.cc/80?img=1" />
      <CfAvatar src="https://i.pravatar.cc/80?img=2" />
      <CfAvatar src="https://i.pravatar.cc/80?img=3" />
      <CfAvatar fallback="+5" />
      </CfAvatarGroup>
      <CfAvatarGroup spacing={-4}>
      <CfAvatar size="sm" name="Anna" />
      <CfAvatar size="sm" name="Bob" />
      <CfAvatar size="sm" name="Cici" />
      <CfAvatar size="sm" fallback="+12" />
      </CfAvatarGroup>
    </>
  );
}
import { CfAvatar, CfAvatarGroup } from '@chufix-design/react';

export default function Demo() {
  return (
    <>
      <CfAvatarGroup>
      <CfAvatar src="https://i.pravatar.cc/80?img=1" />
      <CfAvatar src="https://i.pravatar.cc/80?img=2" />
      <CfAvatar src="https://i.pravatar.cc/80?img=3" />
      <CfAvatar fallback="+5" />
      </CfAvatarGroup>
      <CfAvatarGroup spacing={-4}>
      <CfAvatar size="sm" name="Anna" />
      <CfAvatar size="sm" name="Bob" />
      <CfAvatar size="sm" name="Cici" />
      <CfAvatar size="sm" fallback="+12" />
      </CfAvatarGroup>
    </>
  );
}

API

Avatar

Prop类型默认值说明
srcstring图片地址;加载失败自动回退
altstring图片 alt;未传时回退到 name
namestring用于生成首字母缩写(取首尾两个词的首字母)
fallbackstring直接指定缩写文本,覆盖 name 计算结果
size'xs' | 'sm' | 'md' | 'lg' | 'xl''md'尺寸
shape'circle' | 'square''circle'形状

默认插槽(Vue)/ children(React)会替换缩写,常见用法是放一个 SVG 图标。

AvatarGroup

Prop类型默认值说明
spacingnumber-8子项之间的水平间距,负值产生重叠效果

反馈与讨论

Avatar 头像 的讨论

0
0 / 600
正在加载评论...