No notes defined.
<!-- Default -->
<div class="avatar">
<span class="avatar-initials">BM</span>
</div>
<!-- With Image -->
<div class="avatar">
<span class="avatar-image" style="background-image: url(https://i.pravatar.cc/640)"></span><span class="avatar-initials">BM</span>
</div>
<!-- Placeholder Person -->
<div class="avatar" data-type="person">
<span class="avatar-initials">BM</span>
</div>
<!-- Placeholder Location -->
<div class="avatar" data-type="location">
<span class="avatar-initials">BM</span>
</div>
<!-- Large -->
<div class="avatar is-large">
<span class="avatar-initials">BM</span>
</div>
<!-- Large With Placeholder Person -->
<div class="avatar is-large" data-type="person">
<span class="avatar-initials">BM</span>
</div>
<!-- Large With Placeholder Location -->
<div class="avatar is-large" data-type="location">
<span class="avatar-initials">BM</span>
</div>
<!-- Large With Image -->
<div class="avatar is-large">
<span class="avatar-image" style="background-image: url(https://i.pravatar.cc/640)"></span><span class="avatar-initials">BM</span>
</div>
<!-- Documentation only -->
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Default</h2>
<div class="doc-variant-configuration">
</div>
<div class="doc-variant-configuration">
<label>
Theme:
<select class="doc-select" onchange="fractal.setTheme(this, {target: '.doc-variant-samples', value: this.value});">
<option value="default">default</option>
<option value="accent">accent</option>
</select>
</label>
</div>
</header>
<div class="doc-variant-samples" data-theme="">
<div class="avatar">
<span class="avatar-initials">BM</span>
</div>
<div class="avatar" data-type="person">
<span class="avatar-initials">BM</span>
</div>
<div class="avatar" data-type="location">
<span class="avatar-initials">BM</span>
</div>
<div class="avatar">
<span class="avatar-image" style="background-image: url(https://i.pravatar.cc/640)"></span><span class="avatar-initials">BM</span>
</div>
</div>
</section>
<section class="doc-variant">
<header class="doc-variant-header">
<h2 class="doc-variant-title">Large</h2>
<div class="doc-variant-configuration">
<ul data-label="Modifier">
<li>is-large</li>
</ul>
</div>
<div class="doc-variant-configuration">
<label>
Theme:
<select class="doc-select" onchange="fractal.setTheme(this, {target: '.doc-variant-samples', value: this.value});">
<option value="default">default</option>
<option value="accent">accent</option>
</select>
</label>
</div>
</header>
<div class="doc-variant-samples" data-theme="">
<div class="avatar is-large">
<span class="avatar-initials">BM</span>
</div>
<div class="avatar is-large" data-type="person">
<span class="avatar-initials">BM</span>
</div>
<div class="avatar is-large" data-type="location">
<span class="avatar-initials">BM</span>
</div>
<div class="avatar is-large">
<span class="avatar-image" style="background-image: url(https://i.pravatar.cc/640)"></span><span class="avatar-initials">BM</span>
</div>
</div>
</section>
<!-- Default -->
<div class="avatar{{#modifier}} {{.}}{{/modifier}}"{{#type}} data-type="{{.}}"{{/type}}>
{{#image}}<span class="avatar-image" style="background-image: url({{path src}})"></span>{{/image}}<span class="avatar-initials">{{{initials}}}</span>
</div>
<!-- With Image -->
<div class="avatar{{#modifier}} {{.}}{{/modifier}}"{{#type}} data-type="{{.}}"{{/type}}>
{{#image}}<span class="avatar-image" style="background-image: url({{path src}})"></span>{{/image}}<span class="avatar-initials">{{{initials}}}</span>
</div>
<!-- Placeholder Person -->
<div class="avatar{{#modifier}} {{.}}{{/modifier}}"{{#type}} data-type="{{.}}"{{/type}}>
{{#image}}<span class="avatar-image" style="background-image: url({{path src}})"></span>{{/image}}<span class="avatar-initials">{{{initials}}}</span>
</div>
<!-- Placeholder Location -->
<div class="avatar{{#modifier}} {{.}}{{/modifier}}"{{#type}} data-type="{{.}}"{{/type}}>
{{#image}}<span class="avatar-image" style="background-image: url({{path src}})"></span>{{/image}}<span class="avatar-initials">{{{initials}}}</span>
</div>
<!-- Large -->
<div class="avatar{{#modifier}} {{.}}{{/modifier}}"{{#type}} data-type="{{.}}"{{/type}}>
{{#image}}<span class="avatar-image" style="background-image: url({{path src}})"></span>{{/image}}<span class="avatar-initials">{{{initials}}}</span>
</div>
<!-- Large With Placeholder Person -->
<div class="avatar{{#modifier}} {{.}}{{/modifier}}"{{#type}} data-type="{{.}}"{{/type}}>
{{#image}}<span class="avatar-image" style="background-image: url({{path src}})"></span>{{/image}}<span class="avatar-initials">{{{initials}}}</span>
</div>
<!-- Large With Placeholder Location -->
<div class="avatar{{#modifier}} {{.}}{{/modifier}}"{{#type}} data-type="{{.}}"{{/type}}>
{{#image}}<span class="avatar-image" style="background-image: url({{path src}})"></span>{{/image}}<span class="avatar-initials">{{{initials}}}</span>
</div>
<!-- Large With Image -->
<div class="avatar{{#modifier}} {{.}}{{/modifier}}"{{#type}} data-type="{{.}}"{{/type}}>
{{#image}}<span class="avatar-image" style="background-image: url({{path src}})"></span>{{/image}}<span class="avatar-initials">{{{initials}}}</span>
</div>
<!-- Documentation only -->
{{#variants}}
<section class="doc-variant">
<header class="doc-variant-header">
{{#title}}
<h2 class="doc-variant-title">{{{.}}}</h2>
{{/title}}
<div class="doc-variant-configuration">
{{#if modifiers}}
<ul data-label="Modifier">
{{#modifiers}}
<li>{{{.}}}</li>
{{/modifiers}}
</ul>
{{/if}}
</div>
<div class="doc-variant-configuration">
{{#if themes}}
<label>
Theme:
<select class="doc-select" onchange="fractal.setTheme(this, {target: '.doc-variant-samples', value: this.value});">
{{#themes}}
<option value="{{{.}}}">{{{.}}}</option>
{{/themes}}
</select>
</label>
{{/if}}
</div>
</header>
<div class="doc-variant-samples" data-theme="{{theme}}">
{{#samples}}
{{render '@avatar' (contextData '@avatar' this) merge=true}}
{{/samples}}
</div>
</section>
{{/variants}}
/* Default */
{
"initials": "BM"
}
/* With Image */
{
"initials": "BM",
"image": {
"src": "https://i.pravatar.cc/640"
}
}
/* Placeholder Person */
{
"initials": "BM",
"type": "person",
"image": null
}
/* Placeholder Location */
{
"initials": "BM",
"type": "location",
"image": null
}
/* Large */
{
"initials": "BM",
"modifier": "is-large"
}
/* Large With Placeholder Person */
{
"initials": "BM",
"modifier": "is-large",
"type": "person",
"image": null
}
/* Large With Placeholder Location */
{
"initials": "BM",
"modifier": "is-large",
"type": "location",
"image": null
}
/* Large With Image */
{
"initials": "BM",
"modifier": "is-large",
"image": {
"src": "https://i.pravatar.cc/640"
}
}
/* Documentation only */
{
"initials": "BM",
"variants": [
{
"title": "Default",
"themes": [
"default",
"accent"
],
"samples": [
{
"initials": "BM"
},
{
"initials": "BM",
"type": "person",
"image": null
},
{
"initials": "BM",
"type": "location",
"image": null
},
{
"initials": "BM",
"image": {
"src": "https://i.pravatar.cc/640"
}
}
]
},
{
"title": "Large",
"modifiers": "is-large",
"themes": [
"default",
"accent"
],
"samples": [
{
"initials": "BM",
"modifier": "is-large"
},
{
"initials": "BM",
"modifier": "is-large",
"type": "person",
"image": null
},
{
"initials": "BM",
"modifier": "is-large",
"type": "location",
"image": null
},
{
"initials": "BM",
"modifier": "is-large",
"image": {
"src": "https://i.pravatar.cc/640"
}
}
]
}
]
}
$avatar_size: 112px !default;
$avatar_size--mobile: 48px !default;
$avatar_size--large: 192px !default;
$avatar_size--large--mobile: 80px !default;
$_avatar_placeholders: (
person: '<svg width="32" height="32" viewBox="0 0 32 32" fill="none" stroke="{{color}}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><path d="M4 27C6.42125 22.8162 10.8187 20 16 20C21.1813 20 25.5787 22.8162 28 27"/><circle cx="16" cy="12" r="8"/></svg>',
location: '<svg width="33" height="33" viewBox="0 0 33 33" fill="none" stroke="{{color}}" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><path d="M26 13C26 22 16 29 16 29C16 29 6 22 6 13C6 10.3478 7.05357 7.8043 8.92893 5.92893C10.8043 4.05357 13.3478 3 16 3C18.6522 3 21.1957 4.05357 23.0711 5.92893C24.9464 7.8043 26 10.3478 26 13Z"/><circle cx="16" cy="13" r="4"/></svg>',
) !default;
@import "_avatar.settings";
@import "_avatar.styles";
%avatar {
background-color: $_accent-color;
&-initials {
@include text-size(x-large);
@include not-on-desktop(){
@include text-size(small);
}
}
&[data-type] {
background-position: center center;
background-repeat: no-repeat;
background-size: 50%;
}
@each $name, $placeholder in $_avatar_placeholders {
&[data-type="#{$name}"] {
background-image: svg-url($placeholder);
}
*[data-theme="accent"] &[data-type="#{$name}"] {
background-image: svg-url($placeholder, $_page-color);
}
}
&[data-type] &-initials {
display: none;
}
*[data-theme="accent"] & {
color: white;
}
*[data-theme="dark"] & {
color: $_page_color;
}
}
%avatar--large {
width: $avatar_size--large;
height: $avatar_size--large;
%avatar-initials {
@include text-size(4x-large);
}
@include not-on-desktop(){
width: $avatar_size--large--mobile;
height: $avatar_size--large--mobile;
%avatar-initials {
@include text-size(2x-large);
}
}
}
.avatar.is-large {
@extend %avatar--large;
}
$avatar_size: 64px !default;
$avatar_size--mobile: 48px !default;
$avatar_letter-spacing: .03em;
$avatar_initials_styles: (
display: inline-block,
font-weight: $_font-weight--bold,
letter-spacing: $avatar_letter-spacing,
margin-right: (-1 * $avatar_letter-spacing),
) !default;
%avatar {
@include stack-spacing();
width: $avatar_size;
height: $avatar_size;
display: flex;
justify-content: center;
align-items: center;
background-color: $_gray-300;
border-radius: 100vmax;
overflow: hidden;
user-select: none;
&-image {
display: block;
flex: 1;
align-self: stretch;
background-color: $_gray-100;
background-size: cover;
}
&-image:not([style*="background-image"]) {
display: none;
}
&-initials {
white-space: nowrap;
@include styles($avatar_initials_styles);
}
&-image[style*="background-image"] ~ &-initials {
@extend %visually-hidden;
}
@include not-on-desktop(){
width: $avatar_size--mobile;
height: $avatar_size--mobile;
}
}
.avatar {
@extend %avatar;
&-initials {
@extend %avatar-initials;
}
&-image {
@extend %avatar-image;
}
}