Avatar

An image element with a fallback for representing the user.
AlexAAliceAAliceA
vue
<script setup lang="ts">
import { Avatar } from '@typlog/ui'
</script>

<template>
  <div class="flex items-center gap-2">
    <Avatar
      src="https://images.unsplash.com/photo-1535713875002-d1d0cf377fde?&w=256&h=256&q=70&crop=focalpoint&fp-x=0.5&fp-y=0.3&fp-z=1&fit=crop"
      alt="Alex"
    />
    <Avatar
      src="https://images.unsplash.com/photo-1438761681033-6461ffad8d80?&w=256&h=256&q=70&crop=focalpoint&fp-x=0.5&fp-y=0.3&fp-z=1&fit=crop"
      alt="Alice"
    />
    <Avatar alt="Alice" />
  </div>
</template>

API Reference ​

PropDefaultType
alt
–
string

Alt text of the avatar, usually the person's name.

color
–

Overrides the accent color inherited from the Theme.

fallback
–
string

Using fallback characters for the avatar.

radius"small"
"none""small""medium""large""full"

Overrides the radius inherited from the theme.

size"2"
Enum

Control the size of the avatar.

src
–
string

Avatar's image source URL.

variant"solid"
Enum

The visual variant to apply.

Examples ​

Size ​

AlexAAlexAAlexAAlexAAlexAAlexAAlexAAlexAAlexA
vue
<script setup lang="ts">
import { Avatar } from '@typlog/ui'

const picture = 'https://images.unsplash.com/photo-1535713875002-d1d0cf377fde?&w=256&h=256&q=70&crop=focalpoint&fp-x=0.5&fp-y=0.3&fp-z=1&fit=crop'
</script>

<template>
  <div class="flex flex-col gap-4">
    <div class="flex flex-wrap items-center gap-1">
      <Avatar
        :src="picture"
        alt="Alex"
        radius="full"
        size="1"
      />
      <Avatar
        :src="picture"
        alt="Alex"
        radius="full"
        size="2"
      />
      <Avatar
        :src="picture"
        alt="Alex"
        radius="full"
        size="3"
      />
      <Avatar
        :src="picture"
        alt="Alex"
        radius="full"
        size="4"
      />
      <Avatar
        :src="picture"
        alt="Alex"
        radius="full"
        size="5"
      />
      <Avatar
        :src="picture"
        alt="Alex"
        radius="full"
        size="6"
      />
      <Avatar
        :src="picture"
        alt="Alex"
        radius="full"
        size="7"
      />
      <Avatar
        :src="picture"
        alt="Alex"
        radius="full"
        size="8"
      />
      <Avatar
        :src="picture"
        alt="Alex"
        radius="full"
        size="9"
      />
    </div>
  </div>
</template>

Radius ​

AlexAAlexAAlexAAlexA
vue
<script setup lang="ts">
import { Avatar } from '@typlog/ui'

const picture = 'https://images.unsplash.com/photo-1535713875002-d1d0cf377fde?&w=256&h=256&q=70&crop=focalpoint&fp-x=0.5&fp-y=0.3&fp-z=1&fit=crop'
</script>

<template>
  <div class="flex flex-wrap items-center gap-4">
    <Avatar
      :src="picture"
      alt="Alex"
      radius="none"
    />
    <Avatar
      :src="picture"
      alt="Alex"
      radius="small"
    />
    <Avatar
      :src="picture"
      alt="Alex"
      radius="medium"
    />
    <Avatar
      :src="picture"
      alt="Alex"
      radius="full"
    />
  </div>
</template>

Fallback ​

Harry PotterHPHP
vue
<script setup lang="ts">
import { Avatar } from '@typlog/ui'
</script>

<template>
  <div class="flex items-center gap-4">
    <Avatar
      src="https://bit.ly/broken-link"
      radius="full"
      alt="Harry Potter"
    />
    <Avatar
      src="https://bit.ly/broken-link"
      variant="soft"
      radius="full"
      fallback="HP"
    />
    <Avatar
      src="https://bit.ly/broken-link"
      radius="full"
      variant="soft"
    />
  </div>
</template>

Variant ​

HPHPHPHP
vue
<script setup lang="ts">
import { Avatar } from '@typlog/ui'
</script>

<template>
  <div class="flex flex-col gap-4">
    <div class="flex flex-wrap items-center gap-4">
      <Avatar
        fallback="HP"
        radius="full"
        size="3"
        variant="solid"
      />
      <Avatar
        fallback="HP"
        radius="full"
        size="3"
        variant="surface"
      />
      <Avatar
        fallback="HP"
        radius="full"
        size="3"
        variant="soft"
      />
      <Avatar
        fallback="HP"
        radius="full"
        size="3"
        variant="outline"
      />
    </div>
  </div>
</template>

Ring ​

AlexAAlexAAlexA
vue
<script setup lang="ts">
import { Avatar } from '@typlog/ui'

const picture = 'https://images.unsplash.com/photo-1535713875002-d1d0cf377fde?&w=256&h=256&q=70&crop=focalpoint&fp-x=0.5&fp-y=0.3&fp-z=1&fit=crop'
</script>

<template>
  <div class="flex flex-wrap items-center gap-4">
    <Avatar
      :src="picture"
      alt="Alex"
      radius="full"
      color="indigo"
      variant="ring"
    />
    <Avatar
      :src="picture"
      alt="Alex"
      radius="full"
      color="jade"
      variant="ring"
    />
    <Avatar
      :src="picture"
      alt="Alex"
      radius="full"
      color="crimson"
      variant="ring"
    />
  </div>
</template>
Last updated Sep 15, 2026