复选框
概述
用于在选中/未选中之间切换的控件,并支持半选(indeterminate)状态表达部分选中。以独立控件、roving-focus 分组与数据驱动卡片变体等多种形态提供。适用于独立开关、多选列表以及带半选联动的"全选"场景;从集合中单选请用 SRadioGroup。
用法
特性
- ☑️ 三态模型——
CheckedState为boolean | 'indeterminate',经aria-checked(mixed)与data-state双通道反射 - 🗂 分组支持 roving-focus 键盘导航(
useRovingFocusGroup,方向键) - 🏷 可访问标签——
SCheckboxLabel将for关联到控件的id - 📋 原生表单代理——渲染隐藏输入,携带
name/value(默认'on')/checked参与表单提交 - 🃏 卡片变体(
SCheckboxCard/SCheckboxCardGroup)——icon、label、description 内容 - 🎨
checkboxVariants提供 6 尺寸、8 颜色、2 形状与横/纵排列 - 📊 数据驱动 Compact 聚合——
CheckboxGroupCompact/CheckboxCardGroupCompact持有迭代与默认组合 - ♿
role="checkbox"+ 完整 aria 支持,四种形态 axe 零违规
复选框组件系列
SCheckbox- 基础复选框,含 label、control 与 indicatorSCheckboxGroup- 纵向/横向分组,支持 roving-focus 导航与表单代理SCheckboxCard- 卡片复选框,含 icon、label 与 descriptionSCheckboxCardGroup- 数据驱动的卡片复选框分组
演示
基础
图标
分组
卡片
this is a description
卡片组
API
Aria 层
13Checkbox
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
class | ClassValue | — | 根元素的类 |
ui | Partial<CheckboxUi> | — | 该组件的按槽类重写。 |
color | ThemeColor | — | 组件的主题颜色。 |
size | ThemeSize | — | 组件的视觉尺寸。 |
shape | CheckboxShape | — | 组件的结构。 |
label | string | — | 翻译组件渲染的标签文本。 |
controlProps | CheckboxControlProps | — | 转发给控件的属性。 |
indicatorProps | CheckboxIndicatorProps | — | 转发给 indicator 元素的属性。 |
labelProps | LabelProps | — | 传递给 label 元素的属性。 |
id | string | — | 同上。 |
modelValue | CheckedState | null | — | 复选框的受控值。可通过 v-model 进行绑定。 |
defaultValue | CheckedState | — | 复选框在初始渲染时的值。当不需要控制其值时使用。 |
value | DefinedValue | on | 作为数据提交时与 `name` 关联的值。 |
disabled | boolean | false | 当值为 `true` 时,禁止用户与该复选框进行交互 |
name | string | — | 字段的名称。作为名称/值对的一部分,与其所属表单一同提交。 |
required | boolean | — | 当值为 `true` 时,表示用户必须先设置该值,所属表单才能提交。 |
事件
| 事件名 | 参数 | 描述 |
|---|---|---|
update:modelValue | CheckedState | null | 当复选框的值发生变化时调用的事件处理程序。 |
CheckboxCard
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
class | ClassValue | — | 根元素的类 |
ui | Partial<CheckboxCardUi> | — | 该组件的按槽类重写。 |
color | ThemeColor | — | 组件的主题颜色。 |
size | ThemeSize | — | 组件的视觉尺寸。 |
shape | CheckboxShape | — | 组件的结构。 |
icon | string | — | 由该组件渲染的图标。 |
description | string | — | 由组件渲染的描述文本。 |
label | string | — | 翻译组件渲染的标签文本。 |
controlProps | CheckboxControlProps | — | 转发给控件的属性。 |
indicatorProps | CheckboxIndicatorProps | — | 转发给 indicator 元素的属性。 |
labelProps | LabelProps | — | 传递给 label 元素的属性。 |
id | string | — | 同上。 |
modelValue | CheckedState | null | — | 复选框的受控值。可通过 v-model 进行绑定。 |
defaultValue | CheckedState | — | 复选框在初始渲染时的值。当不需要控制其值时使用。 |
value | DefinedValue | on | 作为数据提交时与 `name` 关联的值。 |
disabled | boolean | false | 当值为 `true` 时,禁止用户与该复选框进行交互 |
name | string | — | 字段的名称。作为名称/值对的一部分,与其所属表单一同提交。 |
required | boolean | — | 当值为 `true` 时,表示用户必须先设置该值,所属表单才能提交。 |
事件
| 事件名 | 参数 | 描述 |
|---|---|---|
update:modelValue | CheckedState | null | 当复选框的值发生变化时调用的事件处理程序。 |
CheckboxCardCompact
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
icon | IconValue | — | 由该组件渲染的图标。 |
description | string | — | 由组件渲染的描述文本。 |
label | string | — | 翻译组件渲染的标签文本。 |
controlProps | CheckboxControlProps | — | 转发给控件的属性。 |
indicatorProps | CheckboxIndicatorProps | — | 转发给 indicator 元素的属性。 |
labelProps | LabelProps | — | 传递给 label 元素的属性。 |
id | string | — | 同上。 |
modelValue | CheckedState | null | — | 复选框的受控值。可通过 v-model 进行绑定。 |
defaultValue | CheckedState | — | 复选框在初始渲染时的值。当不需要控制其值时使用。 |
value | DefinedValue | on | 作为数据提交时与 `name` 关联的值。 |
disabled | boolean | false | 当值为 `true` 时,禁止用户与该复选框进行交互 |
name | string | — | 字段的名称。作为名称/值对的一部分,与其所属表单一同提交。 |
required | boolean | — | 当值为 `true` 时,表示用户必须先设置该值,所属表单才能提交。 |
事件
| 事件名 | 参数 | 描述 |
|---|---|---|
update:modelValue | CheckedState | null | 当复选框的值发生变化时调用的事件处理程序。 |
CheckboxCardGroup<T>
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
class | ClassValue | — | 组根元素的类 |
ui | Partial<CheckboxCardUi> | — | 该组件的按槽类重写。 |
color | ThemeColor | — | 组件的主题颜色。 |
size | ThemeSize | — | 组件的视觉尺寸。 |
shape | CheckboxShape | — | 组件的结构。 |
items | T[] | — | 由该组件渲染的项。 |
rootProps | CheckboxRootProps | — | 转发至根元素的属性。 |
controlProps | CheckboxControlProps | — | 转发给控件的属性。 |
indicatorProps | CheckboxIndicatorProps | — | 转发给 indicator 元素的属性。 |
labelProps | LabelProps | — | 传递给 label 元素的属性。 |
modelValue | T['value'][] | — | 复选框的受控值。可通过 v-model 进行绑定。 |
defaultValue | T['value'][] | — | 复选框在初始渲染时的值。当不需要控制其值时使用。 |
rovingFocus | boolean | true | 当值为 `false` 时,将禁用使用方向键浏览项目的功能。 |
disabled | boolean | false | 当值为 `true` 时,禁止用户与复选框进行交互 |
dir | Direction | — | 项目之间的导航方向。 |
loop | boolean | false | 键盘导航是否应循环往复 |
orientation | DataOrientation | — | 该组的取向。主要是为了确保箭头导航能据此正确进行(左右与上下)。 |
name | string | — | 字段的名称。作为名称/值对的一部分,与其所属表单一同提交。 |
required | boolean | — | 当值为 `true` 时,表示用户必须先设置该值,所属表单才能提交。 |
事件
| 事件名 | 参数 | 描述 |
|---|---|---|
update:modelValue | T[] | 当复选框组的值发生变化时调用的事件处理程序。 |
CheckboxCardGroupCompact<T>
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
items | T[] | — | 由该组件渲染的项。 |
rootProps | CheckboxRootProps | — | 转发至根元素的属性。 |
controlProps | CheckboxControlProps | — | 转发给控件的属性。 |
indicatorProps | CheckboxIndicatorProps | — | 转发给 indicator 元素的属性。 |
labelProps | LabelProps | — | 传递给 label 元素的属性。 |
modelValue | T['value'][] | — | 复选框的受控值。可通过 v-model 进行绑定。 |
defaultValue | T['value'][] | — | 复选框在初始渲染时的值。当不需要控制其值时使用。 |
rovingFocus | boolean | true | 当值为 `false` 时,将禁用使用方向键浏览项目的功能。 |
disabled | boolean | false | 当值为 `true` 时,禁止用户与复选框进行交互 |
dir | Direction | — | 项目之间的导航方向。 |
loop | boolean | false | 键盘导航是否应循环往复 |
orientation | DataOrientation | — | 该组的取向。主要是为了确保箭头导航能据此正确进行(左右与上下)。 |
name | string | — | 字段的名称。作为名称/值对的一部分,与其所属表单一同提交。 |
required | boolean | — | 当值为 `true` 时,表示用户必须先设置该值,所属表单才能提交。 |
事件
| 事件名 | 参数 | 描述 |
|---|---|---|
update:modelValue | T[] | 当复选框组的值发生变化时调用的事件处理程序。 |
CheckboxCompact
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
label | string | — | 翻译组件渲染的标签文本。 |
controlProps | CheckboxControlProps | — | 转发给控件的属性。 |
indicatorProps | CheckboxIndicatorProps | — | 转发给 indicator 元素的属性。 |
labelProps | LabelProps | — | 传递给 label 元素的属性。 |
id | string | — | 同上。 |
modelValue | CheckedState | null | — | 复选框的受控值。可通过 v-model 进行绑定。 |
defaultValue | CheckedState | — | 复选框在初始渲染时的值。当不需要控制其值时使用。 |
value | DefinedValue | on | 作为数据提交时与 `name` 关联的值。 |
disabled | boolean | false | 当值为 `true` 时,禁止用户与该复选框进行交互 |
name | string | — | 字段的名称。作为名称/值对的一部分,与其所属表单一同提交。 |
required | boolean | — | 当值为 `true` 时,表示用户必须先设置该值,所属表单才能提交。 |
事件
| 事件名 | 参数 | 描述 |
|---|---|---|
update:modelValue | CheckedState | null | 当复选框的值发生变化时调用的事件处理程序。 |
CheckboxControl
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
id | string | — | 元素的 ID |
type | ButtonType | 'button' | 按钮元素的类型。可以是 'button'、'submit' 或 'reset' 之一。 |
disabled | boolean | — | 该组件是否已禁用。 |
asChild | boolean | — | 将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。 |
as | AsTag | Component | 'div' | 该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。 |
CheckboxGroup<T>
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
class | ClassValue | — | 组根元素的类 |
ui | Partial<CheckboxUi> | — | 该组件的按槽类重写。 |
color | ThemeColor | — | 组件的主题颜色。 |
size | ThemeSize | — | 组件的视觉尺寸。 |
shape | CheckboxShape | — | 组件的结构。 |
items | T[] | — | 由该组件渲染的项。 |
rootProps | CheckboxRootProps | — | 转发至根元素的属性。 |
controlProps | CheckboxControlProps | — | 转发给控件的属性。 |
indicatorProps | CheckboxIndicatorProps | — | 转发给 indicator 元素的属性。 |
labelProps | LabelProps | — | 传递给 label 元素的属性。 |
modelValue | T['value'][] | — | 复选框的受控值。可通过 v-model 进行绑定。 |
defaultValue | T['value'][] | — | 复选框在初始渲染时的值。当不需要控制其值时使用。 |
rovingFocus | boolean | true | 当值为 `false` 时,将禁用使用方向键浏览项目的功能。 |
disabled | boolean | false | 当值为 `true` 时,禁止用户与复选框进行交互 |
dir | Direction | — | 项目之间的导航方向。 |
loop | boolean | false | 键盘导航是否应循环往复 |
orientation | DataOrientation | — | 该组的取向。主要是为了确保箭头导航能据此正确进行(左右与上下)。 |
name | string | — | 字段的名称。作为名称/值对的一部分,与其所属表单一同提交。 |
required | boolean | — | 当值为 `true` 时,表示用户必须先设置该值,所属表单才能提交。 |
事件
| 事件名 | 参数 | 描述 |
|---|---|---|
update:modelValue | T[] | 当复选框组的值发生变化时调用的事件处理程序。 |
CheckboxGroupCompact<T>
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
items | T[] | — | 由该组件渲染的项。 |
rootProps | CheckboxRootProps | — | 转发至根元素的属性。 |
controlProps | CheckboxControlProps | — | 转发给控件的属性。 |
indicatorProps | CheckboxIndicatorProps | — | 转发给 indicator 元素的属性。 |
labelProps | LabelProps | — | 传递给 label 元素的属性。 |
modelValue | T['value'][] | — | 复选框的受控值。可通过 v-model 进行绑定。 |
defaultValue | T['value'][] | — | 复选框在初始渲染时的值。当不需要控制其值时使用。 |
rovingFocus | boolean | true | 当值为 `false` 时,将禁用使用方向键浏览项目的功能。 |
disabled | boolean | false | 当值为 `true` 时,禁止用户与复选框进行交互 |
dir | Direction | — | 项目之间的导航方向。 |
loop | boolean | false | 键盘导航是否应循环往复 |
orientation | DataOrientation | — | 该组的取向。主要是为了确保箭头导航能据此正确进行(左右与上下)。 |
name | string | — | 字段的名称。作为名称/值对的一部分,与其所属表单一同提交。 |
required | boolean | — | 当值为 `true` 时,表示用户必须先设置该值,所属表单才能提交。 |
事件
| 事件名 | 参数 | 描述 |
|---|---|---|
update:modelValue | T[] | 当复选框组的值发生变化时调用的事件处理程序。 |
CheckboxGroupRoot<T>
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
modelValue | T[] | — | 复选框的受控值。可通过 v-model 进行绑定。 |
defaultValue | T[] | — | 复选框在初始渲染时的值。当不需要控制其值时使用。 |
rovingFocus | boolean | true | 当值为 `false` 时,将禁用使用方向键浏览项目的功能。 |
disabled | boolean | false | 当值为 `true` 时,禁止用户与复选框进行交互 |
dir | Direction | — | 项目之间的导航方向。 |
loop | boolean | false | 键盘导航是否应循环往复 |
orientation | DataOrientation | — | 该组的取向。主要是为了确保箭头导航能据此正确进行(左右与上下)。 |
name | string | — | 字段的名称。作为名称/值对的一部分,与其所属表单一同提交。 |
required | boolean | — | 当值为 `true` 时,表示用户必须先设置该值,所属表单才能提交。 |
事件
| 事件名 | 参数 | 描述 |
|---|---|---|
update:modelValue | T[] | 当复选框组的值发生变化时调用的事件处理程序。 |
CheckboxIndicator
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
forceMount | boolean | — | 用于在需要更多控制时强制挂载。
在使用 Vue 动画库控制动画时非常有用。 |
asChild | boolean | — | 将默认渲染元素替换为作为子元素传递的元素,并合并两者的属性及行为。 |
as | AsTag | Component | 'div' | 该组件应渲染为的元素或组件。可通过 `asChild` 进行覆盖。 |
CheckboxLabel
CheckboxRoot
属性
| 属性名 | 类型 | 默认值 | 描述 |
|---|---|---|---|
id | string | — | 同上。 |
modelValue | CheckedState | null | — | 复选框的受控值。可通过 v-model 进行绑定。 |
defaultValue | CheckedState | — | 复选框在初始渲染时的值。当不需要控制其值时使用。 |
value | DefinedValue | on | 作为数据提交时与 `name` 关联的值。 |
disabled | boolean | false | 当值为 `true` 时,禁止用户与该复选框进行交互 |
name | string | — | 字段的名称。作为名称/值对的一部分,与其所属表单一同提交。 |
required | boolean | — | 当值为 `true` 时,表示用户必须先设置该值,所属表单才能提交。 |
事件
| 事件名 | 参数 | 描述 |
|---|---|---|
update:modelValue | CheckedState | null | 当复选框的值发生变化时调用的事件处理程序。 |
注意事项
架构与对标差异
VeanUI 以单一事实源的三态状态机构建复选框:CheckboxRoot(useControllableState + CheckedState)派生 ariaChecked(indeterminate → mixed)与 dataState(checked / indeterminate / unchecked),CheckboxControl 在 role="checkbox" 上双通道反射,CheckboxIndicator 经 usePresence 条件挂载。组值变更由 CheckboxGroupRoot 发出——它包装 useRovingFocusGroup 提供方向键导航,并渲染 VisuallyHiddenInput 表单代理。scv() 配方 checkboxVariants / checkboxCardVariants 声明 6 尺寸、8 颜色、2 形状;四层 Compact 持有迭代与默认组合,UI 包装器只注入变体类。
| 能力 | VeanUI | Ant Design Checkbox | Element Plus Checkbox | Mantine Checkbox | shadcn/ui Checkbox |
|---|---|---|---|---|---|
| Aria/styled 分离 | ✅ | — | — | — | ✅ |
| 三态(indeterminate) | ✅ | ✅ | ✅ | ✅ | ✅ |
独立 indeterminate prop | ➕ | ✅ | ✅ | ✅ | — |
| 表单 value 映射 | ✅ | ✅ | ✅ | ✅ | ✅ |
| 卡片变体(icon/描述) | ✅ | — | — | — | — |
| 组 roving-focus 键盘导航 | ✅ | ✅ | ✅ | ✅ | — |
button variant | ➕ | ✅ | ✅ | — | — |
| 全选/半选联动辅助 | ➕ | ✅ | — | — | — |
注意事项
- 半选状态通过
modelValue="indeterminate"驱动;独立indeterminateprop 属于路线图增强项,尚未实现。 - 组根
disabled会禁用全部条目;启用组内的单条目disabled同样生效。 - 传入
name后表单代理生效——配合原生<form>或SForm集成即可提交值。 - indicator 使用
pointer-events: none,点击始终落在控件自身。
常见问题
如何展示半选状态?
传入 modelValue="indeterminate"(或 defaultValue);控件会反射 aria-checked="mixed" 与 data-state="indeterminate"。
如何构建"全选"列表?
用主 SCheckbox 配合 modelValue="indeterminate" 与一个 SCheckboxGroup;把组的 update:modelValue 回映到主复选框即可驱动半选联动。
如何让复选框值随表单提交?
为复选框或分组传入 name;组件会渲染隐藏输入,使原生表单提交携带 value(默认 'on')或勾选值数组。
SCheckboxCard 与 SCheckbox 有什么区别?
SCheckboxCard 渲染带边框的卡片,含 icon / label / description 内容槽与 data-[state=checked] 边框高亮;SCheckbox 是裸控件。