Skip to content

Avatar 头像

Avatar 组件可以用来代表人物或对象, 支持使用图片、图标或者文字作为 Avatar。

ts
import { createApp } from 'vue'
import { Avatar as ElAvatar, AvatarGroup as ElAvatarGroup } from '@szhn/dh-design-pc'

const app = createApp()
app.use(ElAvatar)
app.use(ElAvatarGroup)

基础用法

使用 shapesize 属性来设置 Avatar 的形状和大小。

<template>
  <el-row class="demo-avatar demo-basic">
    <el-col :lg="12" :md="12">
      <div class="sub-title">circle</div>
      <div class="demo-basic--circle">
        <div class="block">
          <el-avatar :size="50" :src="circleUrl" />
        </div>
        <div v-for="size in sizeList" :key="size" class="block">
          <el-avatar :size="size" :src="circleUrl" />
        </div>
      </div>
    </el-col>
    <el-col :lg="12" :md="12">
      <div class="sub-title">square</div>
      <div class="demo-basic--circle">
        <div class="block">
          <el-avatar shape="square" :size="50" :src="squareUrl" />
        </div>
        <div v-for="size in sizeList" :key="size" class="block">
          <el-avatar shape="square" :size="size" :src="squareUrl" />
        </div>
      </div>
    </el-col>
  </el-row>
</template>

<script lang="ts" setup>
import { reactive, toRefs } from 'vue'
import { Avatar as ElAvatar, Col as ElCol, Row as ElRow } from '@szhn/dh-design-pc'


const state = reactive({
  circleUrl:
    'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png',
  squareUrl:
    'https://cube.elemecdn.com/9/c2/f0ee8a3c7c9638a54940382568c9dpng.png',
  sizeList: ['small', '', 'large'] as const,
})

const { circleUrl, squareUrl, sizeList } = toRefs(state)
</script>

<style scoped>
.demo-basic {
  text-align: center;
}
.demo-basic .sub-title {
  margin-bottom: 10px;
  font-size: 14px;
  color: var(--el-text-color-secondary);
}
.demo-basic .demo-basic--circle,
.demo-basic .demo-basic--square {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.demo-basic .block:not(:last-child) {
  border-right: 1px solid var(--el-border-color);
}
.demo-basic .block {
  flex: 1;
}
.demo-basic .el-col:not(:last-child) {
  border-right: 1px solid var(--el-border-color);
}
@media screen and (max-width: 992px) {
  .demo-basic .el-col:not(:last-child) {
    border-right: none;
  }
}
</style>

展示类型

支持使用图片,图标或者文字作为 Avatar。

<template>
  <div class="demo-type">
    <div>
      <el-avatar :icon="UserFilled" />
    </div>
    <div>
      <el-avatar
        src="https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png"
      />
    </div>
    <div>
      <el-avatar> user </el-avatar>
    </div>
  </div>
</template>

<script setup lang="ts">
import { UserFilled } from '@szhn/dh-design-pc/icons'
import { Avatar as ElAvatar } from '@szhn/dh-design-pc'

</script>

<style scoped>
.demo-type {
  display: flex;
}
.demo-type > div {
  flex: 1;
  text-align: center;
}

.demo-type > div:not(:last-child) {
  border-right: 1px solid var(--el-border-color);
}
</style>

回退行为

图片加载失败时的回退行为。

<template>
  <div class="demo-type">
    <el-avatar :size="60" src="https://empty" @error="errorHandler">
      <img
        src="https://cube.elemecdn.com/e/fd/0fc7d20532fdaf769a25683617711png.png"
      />
    </el-avatar>
  </div>
</template>

<script lang="ts" setup>
import { Avatar as ElAvatar } from '@szhn/dh-design-pc'


const errorHandler = () => true
</script>

适应容器

当使用图片作为用户头像时,设置该图片如何在容器中展示。与 object-fit 属性一致

<template>
  <div class="demo-fit">
    <div v-for="fit in fits" :key="fit" class="block">
      <span class="title">{{ fit }}</span>
      <el-avatar shape="square" :size="100" :fit="fit" :src="url" />
    </div>
  </div>
</template>

<script lang="ts" setup>
import { reactive, toRefs } from 'vue'
import type { CSSProperties } from 'vue'
import { Avatar as ElAvatar } from '@szhn/dh-design-pc'


const state = reactive({
  fits: [
    'fill',
    'contain',
    'cover',
    'none',
    'scale-down',
  ] as CSSProperties['object-fit'][],
  url: 'https://fuss10.elemecdn.com/e/5d/4a731a90594a4af544c0c25941171jpeg.jpeg',
})

const { fits, url } = toRefs(state)
</script>

<style scoped>
.demo-fit {
  display: flex;
  text-align: center;
  justify-content: space-between;
}
.demo-fit .block {
  flex: 1;
  display: flex;
  flex-direction: column;
  flex-grow: 0;
}

.demo-fit .title {
  margin-bottom: 10px;
  font-size: 14px;
  color: var(--el-text-color-secondary);
}
</style>

头像组 (2.13.1)

显示为头像组

<template>
  <div class="m-4">
    <p>default</p>
    <el-avatar-group>
      <el-avatar v-for="number in 5" :key="number" :src="circleUrl" />
    </el-avatar-group>
  </div>
  <div class="m-4">
    <p>use collapse-avatars</p>
    <el-avatar-group collapse-avatars>
      <el-avatar v-for="number in 5" :key="number" :src="circleUrl" />
    </el-avatar-group>
  </div>
  <div class="m-4">
    <p>use collapse-class and collapse-style</p>
    <el-avatar-group
      collapse-avatars
      :collapse-style="{ 'background-color': '#d9ecff' }"
      collapse-class="my-collapse-avatar"
    >
      <el-avatar v-for="number in 5" :key="number" :src="circleUrl" />
    </el-avatar-group>
  </div>
  <div class="m-4">
    <p>use max-collapse-avatars</p>
    <el-avatar-group collapse-avatars :max-collapse-avatars="3">
      <el-avatar v-for="number in 5" :key="number" :src="circleUrl" />
    </el-avatar-group>
  </div>
  <div class="m-4">
    <p>use collapse-avatars-tooltip</p>
    <el-avatar-group
      collapse-avatars
      :max-collapse-avatars="3"
      collapse-avatars-tooltip
    >
      <el-avatar v-for="number in 5" :key="number" :src="circleUrl" />
    </el-avatar-group>
  </div>
</template>

<script lang="ts" setup>
import { Avatar as ElAvatar, AvatarGroup as ElAvatarGroup } from '@szhn/dh-design-pc'


const circleUrl =
  'https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png'
</script>

<style>
.my-collapse-avatar {
  color: #409eff;
}
</style>

Avatar API

Avatar 属性

名称说明类型默认值
icon设置 Avatar 的图标类型,具体参考 Icon 组件string / Component
sizeAvatar 大小number / enum
shapeAvatar 形状enum
srcAvatar 图片的源地址string
src-set图片 Avatar 的原生 srcset 属性string string
alt图片 Avatar 的原生 alt 属性string
fit当展示类型为图片的时候,设置图片如何适应容器enumcover

Avatar 事件

名称说明类型
error图片加载失败时触发Function

Avatar 插槽

插槽名说明
default自定义头像展示内容

AvatarGroup API (2.13.1)

AvatarGroup Attributes

方法名详情Type默认
size控制头像组中的头像大小number / enum
shape控制头像组中的头像形状enum
collapse-avatars是否折叠头像booleanfalse
collapse-avatars-tooltip是否在鼠标悬停折叠头像的文字时显示所有折叠头像。 若要使用此功能, collapse-avatars 必须为 truebooleanfalse
max-collapse-avatars需要显示的头像的最大数量 若要使用此功能, collapse-avatars 必须为 truenumber1
effecttooltip 主题,内置了 dark / light 两种enum / stringlight
placementtooltip 的位置enumtop
popper-classtooltip 的自定义类名string''
popper-styletooltip 的自定义样式string / object
collapse-classcollapse-avatar 的自定义类名string''
collapse-stylecollapse-avatar 的自定义样式string / object