ICEN UI 开关与选择
Docs ⌘K
Core · 稳定

开关与选择

开关、勾选框、单选行组三件套:纯 CSS 状态组件。

Preview
表单 switch
html
<div class="demo-row">  <button class="icen-switch" type="button" role="switch" aria-checked="true" aria-label="标准开关(开)"><span class="icen-switch-thumb"></span></button>  <button class="icen-switch" type="button" role="switch" aria-checked="false" aria-label="标准开关(关)"><span class="icen-switch-thumb"></span></button>  <button class="icen-switch icen-switch--sm" type="button" role="switch" aria-checked="true" aria-label="小号开关"><span class="icen-switch-thumb"></span></button></div><div class="demo-row" style="margin-top:16px">  <button class="icen-checkbox icen-focus-ring" type="button" role="checkbox" aria-checked="false" aria-label="未选中"></button>  <button class="icen-checkbox icen-focus-ring" type="button" role="checkbox" aria-checked="true" aria-label="已选中"></button>  <button class="icen-checkbox icen-focus-ring" type="button" role="checkbox" aria-checked="mixed" aria-label="半选"></button></div><div class="demo-col" style="margin-top:16px">  <div class="icen-radio-group" role="radiogroup" aria-label="套餐">    <button class="icen-radio-item icen-motion is-selected" type="button" role="radio" aria-checked="true"><span class="icen-radio-dot"></span>基础版</button>    <button class="icen-radio-item icen-motion" type="button" role="radio" aria-checked="false"><span class="icen-radio-dot"></span>专业版</button>    <button class="icen-radio-item icen-motion" type="button" role="radio" aria-checked="false"><span class="icen-radio-dot"></span>旗舰版</button>  </div></div>

特性

没有私有状态机——你的框架数据是唯一事实源,组件只管呈现。

接口

初始化
initSwitch()(kit 一行入口可直接命名导入)
导出
initSwitch 共享行为模块,清单含族内导出
事件
icen:check-changeicen:page-changeicen:rating-changeicen:segmented-changeicen:sort-changeicen:step-changeicen:stepper-changeicen:switch-change detail 契约见 IcenEventMap;共享行为模块,清单含族内事件
类型
dist/behaviors/controls.d.mts(随 npm 包发布,含全部 JSDoc 约束)

安装

bun add @icen.ai/ui

一行引入该组件(CSS 与 behavior 自动带上,无需关心内部 CSS 文件名):

js
import '@icen.ai/ui/kit/switch';import { initSwitch } from '@icen.ai/ui';initSwitch();

也可以用脚手架直接打印引入行:

bash
bunx --bun @icen.ai/ui add switch

Astro 项目注意:kit 入口里的 CSS import 在页面 <script> 里会被 Astro 的 client bundle 摇掉——请改在布局 frontmatter 里引 CSS(import '@icen.ai/ui/components/switch.css';),JS 行为仍可走 kit。Vite SPA / webpack 项目无此问题。

用法

html
<button class="icen-switch" type="button" role="switch" aria-checked="false">  <span class="icen-switch-thumb"></span></button><!-- 状态由使用方驱动:点击切换 aria-checked,CSS 负责全部视觉 -->