ProComponents, templates & AI tooling
HeroUI
27.7k

Checkbox 复选框更新

复选框允许用户从多个独立选项中选择多项,或将单个独立选项标记为已选。

引入

import { Checkbox } from '@heroui/react';

用法

组件结构

引入 Checkbox 后,可通过点语法访问各个部分。

import { Checkbox, Description, FieldError } from '@heroui/react';

export default () => (
  <Checkbox>
    <Checkbox.Content>
      <Checkbox.Control>
        <Checkbox.Indicator />
      </Checkbox.Control>
      Label {/* 纯文本 —— 可点击的标签,同时作为无障碍名称 */}
    </Checkbox.Content>
    <Description /> {/* 可选 — 字段级帮助文本 */}
    <FieldError /> {/* 可选 — 校验错误信息 */}
  </Checkbox>
);

禁用

默认选中

受控

不定状态

外部标签

带说明

渲染 props

表单集成

无效

自定义指示器

全圆角

变体

Checkbox 支持两种视觉变体:

  • primary(默认)— 常规样式与默认背景,适用于大多数场景
  • secondary — 弱强调变体,适合用于 Surface 等组件内部

自定义渲染函数

样式

传入 Tailwind CSS 类

你可以单独定制各个 Checkbox:

import { Checkbox, Label } from '@heroui/react';

function CustomCheckbox() {
  return (
    <Checkbox name="custom">
      <Checkbox.Content>
        <Checkbox.Control className="border-2 border-purple-500 data-[selected=true]:bg-purple-500">
          <Checkbox.Indicator className="text-white" />
        </Checkbox.Control>
        Custom Checkbox
      </Checkbox.Content>
    </Checkbox>
  );
}

自定义组件类

若要自定义 Checkbox 的组件类名,可使用 @layer components 指令。
了解更多

@layer components {
  .checkbox {
    @apply inline-flex gap-3 items-center;
  }

  .checkbox__control {
    @apply size-5 border-2 border-gray-400 rounded data-[selected=true]:bg-blue-500 data-[selected=true]:border-blue-500;

    /* Animated background indicator */
    &::before {
      @apply bg-accent pointer-events-none absolute inset-0 z-0 origin-center scale-50 rounded-md opacity-0 content-[''];
      
      transition:
        scale 200ms linear,
        opacity 200ms linear,
        background-color 200ms ease-out;
    }

    /* Show indicator when selected */
    &[data-selected="true"]::before {
      @apply scale-100 opacity-100;
    }
  }

  .checkbox__indicator {
    @apply text-white;
  }

  .checkbox__content {
    @apply items-center gap-3;
  }
}

HeroUI 遵循 BEM 方法论,确保组件变体与状态可复用且易于定制。

CSS 类

Checkbox 使用以下 CSS 类(查看源码样式):

  • .checkbox - Checkbox 根容器
  • .checkbox__content - 包裹控件与标签文本的可点击 label
  • .checkbox__control - Checkbox 控件方框
  • .checkbox__indicator - Checkbox 勾选指示器

交互状态

Checkbox 同时支持 CSS 伪类与 data 属性,以获得更好的灵活性:

  • 选中[data-selected="true"][aria-checked="true"](显示勾选与背景色变化)
  • 不定[data-indeterminate="true"](以横线表示不定状态)
  • 无效[data-invalid="true"][aria-invalid="true"](以危险色显示错误状态)
  • 悬停:hover[data-hovered="true"](交互状态在 Checkbox.Control / 按钮上)
  • 焦点:focus-visible[data-focus-visible="true"](显示焦点环,作用于按钮)
  • 禁用[data-disabled="true"](降低透明度并禁用指针事件)
  • 按下:active[data-pressed="true"]

API 参考

Checkbox Props

继承自 React Aria CheckboxField

Prop类型默认值描述
isSelectedbooleanfalseCheckbox 是否选中
defaultSelectedbooleanfalseCheckbox 默认是否选中(非受控)
isIndeterminatebooleanfalseCheckbox 是否处于不定状态
isDisabledbooleanfalseCheckbox 是否禁用
isInvalidbooleanfalseCheckbox 是否无效
isReadOnlybooleanfalseCheckbox 是否只读
isRequiredbooleanfalseCheckbox 是否必须选中
validate(value: boolean) => ValidationError | true | null | undefined-自定义校验函数
validationBehavior'native' | 'aria''native'使用原生 HTML 校验或 ARIA 校验
variant"primary" | "secondary""primary"组件的视觉变体。primary 为默认带阴影样式。secondary 为弱强调、无阴影变体,适合用于 surface 上。
namestring-input 元素的 name,用于提交 HTML 表单
valuestring-input 元素的 value,用于提交 HTML 表单
onChange(isSelected: boolean) => void-Checkbox 值变化时调用
childrenReact.ReactNode | (values: CheckboxFieldRenderProps) => React.ReactNode-Checkbox 内容或字段级渲染 prop
renderDOMRenderFunction<keyof React.JSX.IntrinsicElements, CheckboxFieldRenderProps>-通过自定义渲染函数覆盖默认的 DOM 元素。

Checkbox.Content Props

包裹控件与标签文本的可点击 <label>。请把 Checkbox.ControlLabel 放在它内部;Description/FieldError 作为 Checkbox.Content 的兄弟节点。对于没有标签的 checkbox,省略 Label 并在 Checkbox 上传入 aria-label

Prop类型默认值描述
childrenReact.ReactNode | (values: CheckboxButtonRenderProps) => React.ReactNode-按钮内容(控件 + 标签),或按钮级渲染 prop
classNamestring | (values: CheckboxButtonRenderProps) => string-应用到可点击 label 的类名

CheckboxFieldRenderProps

在根 Checkbox 上使用渲染 prop 时,提供以下字段级值:

Prop类型描述
isSelectedbooleanCheckbox 当前是否选中
isIndeterminatebooleanCheckbox 是否处于不定状态
isDisabledbooleanCheckbox 是否禁用
isReadOnlybooleanCheckbox 是否只读
isInvalidbooleanCheckbox 是否无效
isRequiredbooleanCheckbox 是否必填

CheckboxButtonRenderProps

Checkbox.ControlCheckbox.Indicator 使用按钮级渲染 prop(isHoveredisPressedisFocusVisible 等)。将函数作为 Checkbox.ControlCheckbox.Indicator 的子元素即可访问。

本页目录