Checkbox 使用手册
v1.3.0 · @snowui-design-system/components
许可阅读:首次阅读组件文档、源码或 npm 使用流程,先读完整 LICENSE;同任务同版本去重。公开 API 配置与内部实现修改分别按许可处理;全部组件使用统一运行包,源码权益以许可为准。
组件介绍
选择一个或多个独立选项,支持选中、未选中和部分选中状态,适合表单与批量选择。
使用选择
用于独立开关或多项选择。互斥单选用 Radio,立即生效的二态设置用 Switch;DataTable 选择列优先使用其内置选择协议。
独立布尔状态使用
bind:checked;多选数组使用bind:group并为各项提供稳定 value。indeterminate 表示部分选中;与 checked 分开管理。提供标签或 ariaLabel,禁用使用 disabled。
快速开始
以下示例展示推荐的基本组合。更多场景与组合限制见后文。
API
未重新声明的继承能力请查所属基础组件文档;本表只列本组件源码具名公开属性。
使用边界与详细说明
布局模型
主布局模型:内联外壳布局。定义见 ../../../specs/maintainers/LayoutProtocol.md §12.4(源码参考:specs/maintainers/LayoutProtocol.md)。
Checkbox 属于“控件视觉体 + label”的内联外壳子类:
根节点保持
inline-flex,内容整体 Hug。.snowui-checkbox-visual是固定 Hug 的控件视觉体。.snowui-checkbox-label是可选标签,空间充足时 Hug,受限时允许收缩并单行省略;原始内容及完整原生名称保留。visual 与 label 的距离由
--snowui-checkbox-gap管理,可通过 gap 或--snowui-checkbox-gap-override设置首选值;有效间距至少 4 CSS px。size表示包含透明留白的控件占位尺寸,不改变 label 的布局策略。四周留白为
size / 16,可见图形宽高为size × 0.875;例如size={32}占位 32×32px、图形 28×28px、四边各 2px。留白与图形随 size、根字号和尺寸 Token 等比缩放,留白仍可点击。留白由共享控件壳持有,label 位于壳外;内边框继续按名义 size 的
0.0625计算,圆角、Dot 与选中环按可见图形尺寸计算。
使用示例
Unchecked(未选中)
空的方框
灰色边框
Checked(选中)
显示勾选图标
主题色背景和边框
Indeterminate(不确定)
显示横线图标
主题色背景和边框
常用于"全选"场景
图标
勾选图标: 选中状态显示
横线图标: 不确定状态显示
使用 28×28 SVG 描边路径绘制,随组件尺寸缩放并继承选中态颜色
无障碍性
使用原生
<input type="checkbox">确保键盘导航支持 Tab 键聚焦
支持 Space 键切换
支持
indeterminate属性禁用状态下
tabindex=-1
单个复选框
全选/部分选中
样式规则 (Style Spec)
2. 默认样式 (Defaults)
Display:
inline-flex,align-items: centerGap: 首选
var(--gap-1),缩放和零值下的有效间距仍至少为 4 CSS px。Cursor:
pointer(Disabled 时为default)Font:
var(--text-14)(14px),line-height: var(--leading-14)(20px)
3. CSS 变量 (Variables)
组件使用 CSS 变量实现等比缩放:
Unchecked
Visual: 透明背景 +
var(--black-20)边框Icon: 勾选与横线均不可见
Hover: 填充保持不变;独立 inset 覆盖层在基础 20% 黑色边框上再叠加 20% 黑色,默认等效约 36% 黑色;仅此状态适用
StyleSpec §2.4.3例外
Checked / Indeterminate
触发: 原生 input 的
:checked/:indeterminate通过 sibling 选择器驱动Visual:
var(--primary)背景 + 边框Icon: color:
var(--static-white-100);checked 使用路径绘制,indeterminate 保留缩放 / 透明度过渡Hover: 填充与 inset 边框统一在主色上混合 20% Static White
Disabled
Attr:
[data-disabled="true"]Style:
opacity: 0.5,pointer-events: none,cursor: default
5. 交互细节
点击区域: 原生
<input>使用position: absolute; inset: 0覆盖整个 label 区域,确保点击响应灵敏。Focus: 支持键盘导航,聚焦时显示
20% primary的 Ring。动画:
容器: hover 填充与 inset 边框使用相同颜色和时序
checked 勾选: 参考 Fluid Functionalism 的 pathLength 语义,进入使用
200ms ease-out绘制;取消选择时以常规150ms ease-out随底色淡出,不反向绘制indeterminate 横线: 与 Radio 状态动效一致,使用
150ms ease-outprefers-reduced-motion: reduce: 取消视觉体、勾选与横线过渡,直接显示最终状态
Checkbox 样式覆盖
先阅读 完整 LICENSE;同任务、同版本、同范围去重。
优先用组件公开 Props 匹配合适样式,尽可能保留原有视觉。确需改写时按 样式选择与改写顺序 使用自己的 class(含项目已有 Tailwind)或实例 style。以下名称来自源码实际消费的公开 override;先核对目标作用域,不修改私有 DOM。采用 SnowUI Token 时选择正确类别,外部应用不被要求安装一方 utilities。
Checkbox 类型与状态
必填属性:无具名必填属性。
可双向绑定:bind:checked、bind:group、bind:indeterminate。
继承声明:Omit<FrameProps, "size">。继承能力以基类公开文档为准;Omit 中的字段已排除,不能按基类原样使用。
以下为公开属性实际引用的类型声明,来自源码;Svelte Snippet 表示内容片段,ComponentProps 表示对应组件的 Props。
ResourceSize
来源:components/src/context.ts