Badge 使用手册
v1.3.3 · @snowui-design-system/components
许可阅读:首次阅读组件文档、源码或 npm 使用流程,先读完整 LICENSE;同任务同版本去重。公开 API 配置与内部实现修改分别按许可处理;全部组件使用统一运行包,源码权益以许可为准。
组件介绍
用紧凑的数字、文字或圆点提示未读数量与状态,可搭配按钮、头像和导航项使用。
使用选择
用于简短状态或数量提示。需要用户点击执行动作时使用 Button;输入中的可操作标签按 Chip 或 Tag 的交互选择。
children 优先于 count;显式
dot只显示圆点,不显示内容。数量默认最大显示 99,零默认隐藏;使用 max / showZero 修改。Avatar 或 Icon 上的角标用
as="badge"。
快速开始
以下示例展示推荐的基本组合。更多场景与组合限制见后文。
API
未重新声明的继承能力请查所属基础组件文档;本表只列本组件源码具名公开属性。
使用边界与详细说明
关键字 (Keyword)
布局模型
主布局模型:内联外壳布局。定义见 ../../../specs/maintainers/LayoutProtocol.md §12.4(源码参考:specs/maintainers/LayoutProtocol.md)。
Badge 的根节点是 inline-level 定位外壳,内容整体 Hug:
根节点保持
inline-flex,负责宿主定位、尺寸测量和 Frame 位移动效;默认flex-shrink: 0,在窄横向容器内保留文字与内边距,不被相邻内容挤瘦。内层
.snowui-badge-surface负责 background / padding / radius / min-width / font-size / line-height,并作为完整视觉 Badge 承担 scale / opacity / blur 动效。内部
snowui-morph-container使用 Grid Stacking 保持数字变化时的布局稳定性;内容层以容器 50% 为锚点并回移自身 50%,固定尺寸小于文字最小宽度时仍以 Badge 中心为原点对称溢出,不依赖 Grid 的安全溢出回退。文字和数字均保持严格几何居中。这是 Badge 私有结构,不改变主布局模型。dot模式仍属于内联外壳布局的特化:外壳收敛为固定点尺寸,padding 清零。as="badge"只表示 Badge 作为 Icon / Avatar 的外层挂件角色,不改变 Badge 内部布局模型。
布局变量链:
variant="border" 复用 Kbd 默认描边视觉的同一组 Token 值,但仍保持 Badge 的状态标签语义与 <span>/Frame 外壳:
border 只作用于文本内容模式;dot 继续使用 Dot 视觉。作为 Button、SidebarItem 等宿主的后代时,border 保持文本 Hug,不继承宿主的固定方形尺寸上下文。 border 的内部 morph 文字层继承 var(--leading-12),不使用 filled Badge 的紧凑 line-height: 1;因此可见高度与 Kbd 默认 border 一致。
color 使用 SnowUI 公共语意色协议,严格区分大小写:
角色化组合
智能行为
自动隐藏: count 模式默认仅在数值大于等于 1 时出现;数值为 0 且
showZero=false时自动隐藏,退场期间保留最后一次可见值(例如从 1 退场,不显示 0)溢出格式化: 超过 max 自动显示为
max+自动内容: 无 count 时尝试从父元素获取文本
角色感知尺寸继承:
独立使用: 自动读取父级
Frame(如列表项容器) 的尺寸上下文完成自适应缩放。作为徽标 (
as="badge"): 忽略负级 Group 的尺寸上下文,优先保持徽标比例并由宿主(Avatar/Icon)驱动定位。
默认动效
Badge 的显示 / 隐藏使用两条并行动效,与 transitions.dev Notification badge 的结构一致:
Frame
currentState="Appear/Disappear"与whileAppear/whileDisappear负责定位外壳:出现时从左下偏移滑到锚点,退场时不反向位移。内层
.snowui-badge-surface是完整视觉外壳,负责 scale / opacity / blur:出现时整体从scale(0)、opacity: 0、blur(2px)回弹至正常状态;退场时以中心点将包括背景、padding 和数字在内的整个 Badge 缩小至 0。内部
.snowui-morph-container只负责 Grid Stacking 和内容居中,不承担出退场动效。
隐藏时 Badge 会短暂保留节点 180ms,再从 DOM 中移除。默认退场不做反向位移,只让 Badge 整体以中心点缩小、渐隐并增加模糊。whileAppear / whileDisappear={true} 使用 Badge 完整默认 Frame 动效;显式对象是完整视觉通道声明,只执行对象中声明的通道并继承 Badge 默认时序;传 false 可关闭对应 Frame 动效。prefers-reduced-motion: reduce 会关闭 slide / pop / blur 过渡。
私有动效变量:
Badge 样式覆盖
先阅读 完整 LICENSE;同任务、同版本、同范围去重。
优先用组件公开 Props 匹配合适样式,尽可能保留原有视觉。确需改写时按 样式选择与改写顺序 使用自己的 class(含项目已有 Tailwind)或实例 style。以下名称来自源码实际消费的公开 override;先核对目标作用域,不修改私有 DOM。采用 SnowUI Token 时选择正确类别,外部应用不被要求安装一方 utilities。
Badge 类型与状态
必填属性:无具名必填属性。
可双向绑定:本组件未声明具名双向绑定属性;状态更新通过公开回调或所属宿主处理。
继承声明:FrameProps。继承能力以基类公开文档为准;Omit 中的字段已排除,不能按基类原样使用。
以下为公开属性实际引用的类型声明,来自源码;Svelte Snippet 表示内容片段,ComponentProps 表示对应组件的 Props。
StateValueMap
来源:components/src/logic/frame-types.ts
CoreState
来源:components/src/logic/frame-types.ts
SnowUIColor
来源:components/src/lib/color.ts
ResourceSize
来源:components/src/context.ts