- UI组件
- 前端
【免费下载链接】ant-design-blazor
🌈A rich set of enterprise-class UI components based on Ant Design and Blazor.
Avatars(头像)用于代表用户、人物或对象,在 Blazor 应用中承担着用户身份展示的核心职责。本文基于 Ant Design Blazor 开源仓库中 Avatar 组件文档 及其源码实现,系统讲解 Avatar 与 AvatarGroup 的全部 API、三种内容形态(图片/图标/字符)、错误回退机制、响应式尺寸与自动缩放字符等实战用法,读完即可在项目中直接落地使用。
组件概览与内容形态
Avatar 组件支持三种展示形态,且它们之间可以共存并按优先级回退:
- 图片头像:通过
Src传入图片地址,配合Alt提供替代文本、SrcSet适配不同屏幕分辨率; - 图标头像:通过
Icon传入图标类型,由内置 Icon 组件 渲染; - 字符头像:直接以
ChildContent(子内容)或Text属性放置文字(典型场景是用户姓名首字母)。
从 Avatar.razor 的渲染逻辑可见,组件在OnParametersSet中根据参数计算三种形态的开关(_hasIcon、_hasSrc、_hasText),并在模板中按"图标 → 图片 → 字符"的顺序输出对应内容。
基本用法示例
<Avatar Icon="user" /> <Avatar>U</Avatar> <Avatar>USER</Avatar> <Avatar Src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" /> <Avatar Style="color: #f56a00; background-color: #fde3cf; ">U</Avatar> <Avatar Style="background-color: #87d068" Icon="user" />(参考 Type.razor 演示)
Avatar Props 完整参数表
官方文档定义的 Avatar Props 如下,均已标注类型与默认值:
| Property | Description | Type | Default | Version |
|---|---|---|---|---|
| Alt | This attribute defines the alternative text describing the image | string | - | |
| Icon | Custom icon type for an icon avatar | string | - | |
| OnError | Handler when img load error | EventCallback<ErrorEventArgs> | - | |
| Shape | The shape of avatar | string | - | |
| Size | The size of the avatardefault|small|large | string | default | |
| Src | The address of the image for an image avatar | string | - | |
| SrcSet | A list of sources to use for different screen resolutions | string | - |
Tip: You can set
IconorChildContentas the fallback for image load error, with the priority ofIcon>ChildContent
结合 Avatar.razor.cs 源码,以下补充各参数的底层细节:
Shape:对应 AvatarShape.cs 枚举,取值Square与Circle。源码中的_shapeMap将枚举映射为 CSS 类ant-avatar-square/ant-avatar-circle,GetValueOrDefault(AvatarShape.Square)表明默认形状为 Square(圆形实际由 CSS 变量控制,Ant Design 默认视觉呈现为圆)。Size:类型为OneOf<AvatarSize, string>,即既可以传 AvatarSize.cs 枚举(Default/Large/Small),也可以传任意 CSS 尺寸字符串(如"5rem"、"64"、"40px")。源码SetSizeStyle()通过CssSizeLength.TryParse解析后生成内联样式width/height/line-height与font-size: calc(size / 2),实现任意尺寸的像素级控制。SrcSet:原样透传到<img srcset="...">属性(见 Avatar.razor),用于不同屏幕分辨率的候选图片。OnError:图片加载失败回调,类型EventCallback<ErrorEventArgs>,与原生@onerror事件对接。
图片加载失败的自动回退
官方 Tip 指出:可设置Icon或ChildContent作为图片加载失败的回退内容,优先级为Icon>ChildContent。源码ImgError()方法完整实现该逻辑:
- 触发
OnError回调; - 清空
_hasSrc、_hasIcon、_hasText; - 若设置了
Icon则显示图标,否则若有Text则显示字符; - 标记
_waitingCalcSize = true触发字符尺寸重新计算并刷新界面。
尺寸控制的三种方式
结合 Basic.razor 演示,尺寸有三种设置途径:
<Avatar Size="@("5rem")" Icon="@IconType.Outline.User" /> <Avatar Size="AvatarSize.Large" Icon="@IconType.Outline.User" /> <Avatar Icon="@IconType.Outline.User" /> <Avatar Size="AvatarSize.Small" Icon="@IconType.Outline.User" /> <Avatar Shape="AvatarShape.Square" Size="@size.ToString()" Icon="@IconType.Outline.User" /> @code { int size = 64; }- 预置枚举:
AvatarSize.Large/AvatarSize.Small分别映射 CSS 类ant-avatar-lg/ant-avatar-sm(见SetClassMap()); - 默认值:不传
Size即为AvatarSize.Default,对应 Ant Design 默认的 32px 尺寸; - 任意 CSS 尺寸:传字符串(如
"5rem"、"64"),源码将其解析为width:64px;height:64px;line-height:64px;font-size:32px等内联样式。上面的动态示例中,点击方形头像区域会使size自增,直观演示尺寸变化。
字符自动缩放(Auto Font Size)
对于字符型头像,当字符串较长时字体大小会自动适配头像宽度。这一能力在 dynamic.md 演示说明 中有介绍,其底层实现位于CalcStringSize()方法:
- 通过
JSInteropConstants.GetDomInfo获取字符元素宽度、GetBoundingClientRect获取头像容器宽度; - 当字符宽度超过
avatarWidth - 8(预留 8px 内边距)时,按(avatarWidth - 8) / childrenWidth计算缩放比例; - 通过
transform: scale(...) translateX(-50%)内联样式实现缩放,且CssSizeLength(scale, true)保证缩放值为纯数值。
AvatarGroup 头像组
当需要将多个头像组合展示时,使用AvatarGroup容器组件包裹。官方文档给出的 AvatarGroup Props 为:
| Property | Description | Type | Default | Version |
|---|---|---|---|---|
| MaxCount | Max avatars to show | int | - | |
| MaxPopoverPlacement | The placement of excess avatar Popover | top|bottom | top | |
| MaxStyle | The style of excess avatar style | string | - |
分组实战与超出数量折叠
参考 Group.razor 演示:
<AvatarGroup> <Avatar Src="https://zos.alipayobjects.com/rmsportal/ODTLcjxAfvqbxHnVXCYX.png" /> <Avatar Style="background-color: #f56a00">K</Avatar> <Tooltip Title="Ant User" Placement="Placement.Top"> <Unbound> <Avatar Style="background-color: #87d068;" Icon="user" RefBack="@context"/> </Unbound> </Tooltip> <Avatar Style="background-color: #1890ff;" Icon="ant-design" /> </AvatarGroup> <Divider /> <AvatarGroup MaxCount="2" MaxStyle="color: #f56a00; background-color:#fde3cf;"> <!-- 同样四个 Avatar,超出部分折叠为 "+N" --> </AvatarGroup>其底层机制(见 AvatarGroup.razor.cs 与 AvatarGroup.razor):
AvatarGroup通过CascadingValue向子Avatar提供position级联值("shown"/"hidden"),子组件在OnInitialized时调用AddAvatar注册自身(见 Avatar.razor.cs);- 当
MaxCount > 0且可见头像数量超出时,设置_overflow = true,多余头像被标记为Overflow隐藏,折叠区显示一个+N样式的额外 Avatar(样式由MaxStyle定制); - 折叠的额外头像包裹在
Popover(Trigger=Hover)中,鼠标悬停即可展开查看全部隐藏头像,悬浮层出现位置由MaxPopoverPlacement控制(默认Placement.Top); AddAvatar内部对"shown" 与 "hidden" 两个列表分别维护,Dispose时通过RemoveAvatar清理,保证动态增删场景下计数准确。
样式定制与 RTL 支持
- 样式文件:Avatar 的样式位于 components/avatar/style,包含
entry.less、group.less、index.less、rtl.less,其中group.less专管头像组(间距、折叠 Popover 样式),rtl.less处理 RTL 布局; - 内联样式:与 Ant Design React 一致,可通过
Style参数直接设置背景色、文字颜色等(如Style="color: #f56a00; background-color: #fde3cf;"),配合Icon或字符内容形成多彩头像; - RTL:
ClassMapper在RTL模式下追加ant-avatar-group-rtl与ant-avatar-group-popover-rtl类,头像组在从右到左的语言环境中自动翻转布局。
动态数据场景
字符头像常用于展示用户列表数据,可结合@code块动态切换。参考 Dynamic.razor 演示:
<Avatar Style="@($"background-color: {color}; vertical-align: middle;")" Size="AvatarSize.Large"> @user </Avatar> <Button Size="ButtonSize.Small" OnClick="_=>changeUser()">Change</Button> @code { private static string[] userList = { "U", "Lucy", "Tom", "Edward" }; private static string[] colorList = { "#f56a00", "#7265e6", "#ffbf00", "#00a2ae" }; // changeUser() 在用户与配色数组中循环切换 }需要注意的是,Text与ChildContent的 setter 均会将_waitingCalcSize置为true(见 Avatar.razor.cs),因此当字符内容动态变化时,OnAfterRenderAsync会重新执行CalcStringSize()自动缩放,确保长文本始终贴合头像宽度。
小结
Avatar 组件以Src/Icon/ 字符内容三种形态覆盖绝大多数头像场景,OneOf<AvatarSize, string>尺寸设计兼具枚举便捷性与 CSS 字符串灵活性,图片加载失败时的Icon>ChildContent回退链与字符自动缩放进一步提升了健壮性与视觉效果;AvatarGroup则通过级联参数 + 折叠 Popover 的机制,让大量用户头像的展示既紧凑又不失完整性。开发者可直接参照本文的 API 表与示例代码,将头像能力无缝接入自己的 Blazor 应用中。
- UI组件
- 前端
【免费下载链接】ant-design-blazor
🌈A rich set of enterprise-class UI components based on Ant Design and Blazor.
相关推荐
Ant Design Blazor Avatar 组件完全指南:图片、Icon 与字符头像的渲染与组合实践
Ant Design Blazor Avatar 组件完全指南:图片、Icon 与字符头像的渲染与组合实践 Avatar(头像)是 Ant Design Bla
前端UI组件设计系统Ant Design Avatar 组件完全指南:图片、图标、字符头像与分组显示的最佳实践
Ant Design Avatar 组件完全指南:图片、图标、字符头像与分组显示的最佳实践 Ant Design(antd)是面向企业级应用的 React UI
前端UI组件设计系统Shoelace 头像组件(sl-avatar)完全指南:图片、首字母、图标与头像组实战
Shoelace 头像组件(sl avatar)完全指南:图片、首字母、图标与头像组实战 sl avatar 是 Shoelace Web Components
UI组件前端
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考