Skip to content

Checkbox 复选框

新粗野主义风格的复选框,基于 reka-ui 的 CheckboxRoot 原语构建,带勾选指示器。

预览

Preview
默认
主要
危险
不确定状态(Minus 图标)
自定义 aria-label

安装

pnpm dlx brutx-vue@latest add checkbox

用法

vue
<script setup>
import { ref } from 'vue'
import { Checkbox } from 'brutx-ui-vue'

const checked = ref(false)
</script>

<template>
    <div class="flex items-center gap-3">
        <Checkbox v-model:checked="checked" />
        <span class="text-sm font-bold">Accept terms</span>
    </div>
</template>

变体

变体说明
default默认背景,标准前景色
primaryPrimary(珊瑚色)背景
secondarySecondary(薄荷青)背景
accentAccent(黄色)背景
dangerDanger(红色)背景
vue
<template>
    <Checkbox variant="primary" />
</template>

尺寸

尺寸说明
sm小尺寸
default默认尺寸
lg大尺寸

搭配 Label

vue
<script setup>
import { ref } from 'vue'
import { Checkbox, Label } from 'brutx-ui-vue'

const checked = ref(false)
</script>

<template>
    <div class="flex items-center gap-3">
        <Checkbox v-model:checked="checked" id="terms" />
        <Label for="terms">Accept terms and conditions</Label>
    </div>
</template>

禁用状态

vue
<script setup>
import { Checkbox } from 'brutx-ui-vue'
</script>

<template>
    <Checkbox disabled />
</template>

不确定状态

checked 设置为 'indeterminate' 可展示不确定状态,此时指示器显示 Minus(减号)图标,常用于"部分选中"等层级选择场景。

非受控模式同样支持:<Checkbox defaultValue="indeterminate" /> 初始渲染 Minus 图标且 aria-checked="mixed"。按 reka-ui 语义,用户点击后状态切换为 checked,不会自动回到不确定态。

vue
<script setup>
import { Checkbox } from 'brutx-ui-vue'
</script>

<template>
    <Checkbox :checked="'indeterminate'" />
</template>

Props

属性类型默认值说明
checkedboolean | 'indeterminate'选中状态;不传时组件处于非受控模式
defaultValueboolean | 'indeterminate'非受控模式下的初始选中状态;仅在 checked 为 undefined 时生效
disabledbooleanfalse是否禁用
variant'default' | 'primary' | 'secondary' | 'accent' | 'danger''default'颜色变体
size'sm' | 'default' | 'lg''default'尺寸
ariaLabelstringlocale 默认值(checkbox.check无障碍标签
namestring表单字段名;提供时渲染隐藏 input,随所属 <form> 以 name/value 提交
valuestring | number | bigint | object | null'on'随 form 提交的值
requiredbooleanfalse原生表单必填标记,透传到隐藏 input
classstring自定义样式类

受控与非受控: 不传 checked(或为 undefined)时组件由内部状态维护选中值,点击后通过 update:checked 通知外部,可用 defaultValue 声明初始态;一旦显式传入 checked,组件进入受控模式,选中值以 prop 为准。

事件

事件参数说明
update:checkedboolean | 'indeterminate'选中状态变化时触发,支持 v-model:checked 双向绑定

可访问性

  • 键盘操作:支持 Space 键切换选中状态
  • ARIA 属性:Checkbox 默认通过 locale 提供 aria-label(中文为"复选框"),未提供时回退到 t('checkbox.check')。当毗邻可见文本已能描述用途时可省略,否则建议通过 ariaLabel 提供更具体的描述
  • 焦点管理:使用 --brutal-ring 令牌显示可见聚焦环
vue
<script setup>
import { ref } from 'vue'
import { Checkbox, Label } from 'brutx-ui-vue'

const checked = ref(false)
</script>

<template>
    <div class="flex items-center gap-3">
        <Checkbox v-model:checked="checked" id="marketing" ariaLabel="接收营销邮件" />
        <Label for="marketing">接收营销邮件</Label>
    </div>
</template>

蛮力铸就。