Skip to content

Switch 开关 ​

role="switch" 的开关按钮。

基础用法 ​

基础用法

禁用与加载 ​

disabled / loading

loading 显示加载动画并阻止切换,用于异步提交场景。

标签 ​

label 属性在开关旁渲染文本标签,点击标签即可切换(原生 label 关联),同时为 role="switch" 提供可访问名称;label-position="start" 把标签放到开关左侧,默认 end(右侧)。也可以用默认插槽放入自定义内容(优先于 label 属性文本)。

标签

自定义内容

热区说明:开关宿主宽度收缩为控件实际宽度(width: fit-content),默认形态下视觉宽度与点击热区一致;当宿主被显式拉宽(竖向 oas-space 的 align-stretch、宿主 width: 100%)时,整行空白区点击同样切换——对齐 iOS 设置项的整行点击语义(内部按钮与 label 标签区域仍走各自通道,不会重复触发)。需要旁侧文本热区时用 label 提供可点标签。无 label 时宿主也可自设 aria-label(自动镜像到内部按钮作可访问名称)。

块级拉伸整行可点

disabled / loading 状态下整行热区同样拦截,行为与拨杆一致。

开关文案 ​

checked-text / unchecked-text 在开关上显示对应文案:medium/large/xl 尺寸显示在轨道内滑块对侧,size="xs" / size="small" 时文案放到开关外侧。

开关文案

尺寸 ​

size 支持 xs / small / medium(默认)/ large / xl 五档;非法值回落 medium 并提示告警。

五种尺寸

自定义颜色 ​

color 覆盖开启态主色(默认走 --oas-color-primary)。

自定义颜色

滑块图标 ​

checked-icon / unchecked-icon 在滑块上渲染图标(oas-icons 图标名),开启/关闭切换图标随之切换,适合星标收藏、昼夜模式等场景:

滑块图标

值映射 ​

true-value / false-value 自定义开关的取值(字符串),oas-change 的 detail.value 返回当前映射值(未设置时为布尔 true / false);读 el.value 也可直接获得当前映射值,适合表单提交 'YES' / 'NO' 这类场景。

true-value / false-value

value: "NO"

切换前拦截 ​

el.beforeChange = (next) => boolean | Promise<boolean>(JS property 通道,attribute 传不了函数):返回 false 或 Promise reject 则不切换;异步确认(如关闭两步验证前请求后端)在途期间组件进入加载态(spinner + 禁点),防止重复触发。

before-change 异步确认

关闭前将异步确认(约 800ms)

校验态 ​

status="success" | "warning" | "error" 校验态着色(error 自动联动 aria-invalid,宿主自设 aria-invalid 等效 error 视觉):

status 校验态

描述(description) ​

description 在标签下方渲染一行弱化副文本,说明开关的业务含义(与 oas-checkbox / oas-radio 的 description 契约一致);slot[name="description"] 富内容优先于属性文本:

描述副文本

自定义内容 支持 HTML 富文本描述

卡片形态(variant=card) ​

variant="card" 把开关升级为选择卡:描边容器包住拨杆 + 标签 + 描述,整卡可点(点击卡片任意位置切换)、选中时描边着主色并带浅色底(与 oas-checkbox / oas-radio 的选择卡同视觉语言);disabled / status 校验态同样作用于卡片描边。适合设置页的逐项开关列表:

卡片形态

宽度自定义 ​

--oas-switch-width / --oas-switch-height / --oas-switch-thumb-size CSS 变量覆盖尺寸档的轨道宽 / 高 / 滑块大小(跨尺寸档生效):

CSS 变量尺寸

事件 ​

oas-change(detail: { checked, value })、oas-focus / oas-blur(焦点进入 / 离开组件)。

切换事件

受控用法:宿主持有状态时绑定 checked 属性并在 oas-change 里回写(Vue 下 :checked="x" + @oas-change="x = $event.detail.checked" 一行完成双向)。

required 必填 ​

required 必填(原生校验链)

required 驱动原生校验链(form-associated):未填时 checkValidity() 为 false(valueMissing),原生表单提交被阻止;填写后自动恢复 :valid。

API ​

oas-switch ​

属性 ​

属性说明类型默认值
aria-label可访问名(宿主覆盖通道,显式设置优先于 label 推导)——
checked是否开启boolean—
checked-icon选中态滑块图标(oas-icon 图标名)string—
checked-text开启时显示的文案;medium/large/xl 在轨道内,xs/small 在轨道外侧——
color开启态自定义主色,覆盖 --oas-color-primary(CSS 颜色值)——
description描述副文本(label 下方的次级说明;slot[name=description] 富内容优先于属性文本),与 checkbox/radio 的 description 契约一致string—
disabled禁用boolean—
false-value未选中时的映射值string—
label标签文本(label 通道,点击标签切换;slot 同名插槽可传富内容)string—
label-position标签位置:end(默认,右侧)/ start(左侧)string—
loading加载态,阻止切换boolean—
required必填标记(驱动原生校验链 valueMissing:关 = 未填)boolean—
size尺寸:xs / small / medium(默认)/ large / xl;非法值回落 medium 并告警stringmedium
status校验态:error / warning / success;error 联动 aria-invalidstring—
true-value选中时的映射值(读 value getter 取映射值)string—
unchecked-icon未选中态滑块图标string—
unchecked-text关闭时显示的文案;medium/large/xl 在轨道内,xs/small 在轨道外侧——
variant形态:default(默认拨杆)/ card(卡片:描边容器包住拨杆 + 标签 + 描述,整卡可点、选中描边着色,对齐 checkbox/radio 选择卡);非法值静默回落 defaultstring—

事件 ​

事件说明
oas-blur失焦时派发
oas-change切换,detail: { checked, value }(value 为映射值)
oas-focus聚焦时派发

插槽 ​

名称说明
默认开关内容(文案 / 富内容)
description描述副文本富内容(优先于 description 属性文本)

CSS 变量 ​

CSS 变量说明默认值
--oas-glass-refraction液态玻璃边缘折射滤镜(data-glass 生效,默认 none);局部停用覆盖为空值(--oas-glass-refraction: ;)——不得用 none(与 button 态的 brightness() 混排会使整条 filter 声明非法)none
--oas-switch-height—22px
--oas-switch-on-color开启态轨道内文字色(color 自定义轨道底色时组件按底色亮度注入深/浅文字;缺省回落 var(--oas-color-bg))var(--oas-color-bg)
--oas-switch-thumb-size—18px
--oas-switch-width—40px

基于 MIT OR Apache-2.0 双许可发布