Skip to content

Radio 单选框 ​

原生 <input type="radio"> 增强,支持单选组键盘导航(radiogroup 模式)、数据驱动与卡片形态。

基础用法 ​

基础用法

选项一选项二

同名 name 的 radio 互斥(组件跨 Shadow DOM 同步);无 name 时各自独立,互斥请用同名或 oas-radio-group。

尺寸 ​

三档尺寸(size)

small(14px)medium(默认,16px)large(18px)

size 同时控制圆点尺寸与字号;组上设置时统一下发子项,子项显式 size 优先。

单选组(键盘可达) ​

单选组(radio-group)

选择支付方式微信支付支付宝银行卡

组通过 value 受控,子项 value 作为选项标识;组会统一管理单选互斥。

组遵循 WAI-ARIA radiogroup 键盘模式:Tab 一次进入组(停在选中项,无选中时停首个非禁用/非只读项),↑ ↓ ← → 移动即选中(循环回绕、跳过禁用项),Home / End 跳首末可用项。原生 input 各藏于 Shadow DOM,浏览器同名方向键分组跨 Shadow 失效,组件在 host 层补齐了 roving tabindex 与方向键处理。

单个禁用 ​

单个 disabled

可选已禁用禁用且选中

单项 disabled 只禁该项:不可点击、不可聚焦(原生 disabled 语义),组内其余项不受影响;整组禁用走 oas-radio-group 的 disabled(见下)。

禁用 ​

禁用

已选且禁用禁用禁用

只读 ​

只读(readonly)

只读组(可聚焦、方向键不切换)选项 A选项 B选项 C

readonly 与 disabled 的表单语义分立:可聚焦、可进 Tab 序、值照常提交,但点击(含 Space)与方向键均不切换。单项也可单独设置。

校验态 ​

校验态(status,支持单项级)

请选择配送方式(必填)同城闪送标准快递单项 success单项 warning单项 error

组级 status 下发全部子项;单项显式 status 优先于组下发。status="error" 自动联动 aria-invalid="true";卡片形态下校验色落在描边。

辅助文本与标签位置 ​

辅助文本(description)与标签位置(label-position)

同城闪送标准快递门店自取标签在左侧(label-position="start")

description 属性渲染为标签下方次要文本(选项级副文本);也支持 <span slot="description"> 分发富文本(优先于属性)。label-position="start" 把文本移到圆点的起始侧(RTL 下自动镜像)。

自定义指示器 ​

自定义指示器(checked-icon 插槽)

点赞 未自定义(原生对照)

插槽内容接管选中态图标(template[slot] 或直接放元素皆可);未选态显示默认空心圆轮廓,宿主可用 ::part(box) 覆写(见下例:两态全自定义)。

两态全自定义(checked-icon 插槽 + ::part(box))

已点亮(主色实心星) 未点亮(灰色虚线环)

自定义指示器是「项级」开关:只有带了 checked-icon 插槽的项才进入自定义模式(原生圆点隐藏、.box 成为未选态载体)——所以上例两项都带插槽;组内要统一外观,需每项都带。

组横排 ​

组横排(direction)

性别男女保密

默认 direction="vertical" 纵向堆叠;horizontal 横向排布并自动换行。

数据驱动 ​

options 数据通道

配送方式

options JSON 属性与子元素声明式双通道并存:options 显式时数据驱动优先(渲染进组件内部,声明式子项让位)。字段:label / value / disabled / description。数据驱动的子项同样参与键盘导航。

卡片形态 ​

卡片形态(variant=card)

支付方式钱包支付银行卡支付货到付款

variant="card" 切换为卡片皮肤:整块可点、选中描边着色、hover 反馈;默认插槽放标题等富内容,description 作副文本。卡片项可入组(组 value 照常驱动、键盘导航照常工作),也可单独使用。

事件 ​

事件(oas-change / oas-focus / oas-blur)

选项 A选项 B选项 C

单项派发 oas-change(detail: { checked, value })、oas-focus / oas-blur;组派发 oas-change(detail: { value },点击与方向键选中都会触发)与组级 oas-focus / oas-blur(子项间转移不误报)。

required 必填 ​

required 必填(原生校验链)

方案 A

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

required 同样支持组级:oas-radio-group required 走 form-associated 原生校验链,组内无选中项时 valueMissing 阻止原生表单提交(FormData 以组的 name 提交选中值,无选中不提交)。

组级 required(radio-group)

基础版专业版团队版提交(未选时被浏览器拦截)

未选择就点击提交:浏览器弹出 valueMissing 校验气泡、表单不提交,页面提示「请先选择方案」;选中后再提交则显示提交值。

当前值可经公开 value property 读/写(对齐原生 radio.value):提交值语义——value 属性缺省回落 'on',与选中态分立(是否提交由 checked 决定);el.value = 'x' 写入受控 value 属性并同步 FormData 提交口径,不派发事件。

API ​

oas-radio ​

属性 ​

属性说明类型默认值
checked是否选中boolean—
description辅助文本:渲染为标签下方次要说明;slot="description" 分发富文本时优先string—
disabled禁用boolean—
label-position标签位置:end(默认,框左文右)/ start(文左框右;RTL 下自动镜像)——
name原生分组名(跨 Shadow DOM 同名互斥;组内自动分配唯一 name)string—
readonly只读:可聚焦可进 Tab 序、值照常提交,但点击(含 Space)与方向键均不切换boolean—
required必填标记(单元素语义:本项未选中即 valueMissing;组级任一选中语义为已知边界)boolean—
size尺寸档:small(14px)/ medium(默认 16px)/ large(18px),圆点与字号联动;组级设置统向下发子项,单项显式优先stringmedium
status校验态:error / warning / success(圆点着色;error 联动宿主 aria-invalid)string—
value选项标识string | null—
variant形态:default(默认)/ card(卡片:整块可点、选中描边着色、hover 反馈)string—

Property(JS property;是否写回 attribute 见各行说明) ​

Property说明类型默认值
value提交值(属性缺省回落 on;与 checked 分立,对齐原生 radio.value)string | null—

事件 ​

事件说明
oas-blur单选框失去焦点
oas-change选中变化,detail: { checked, value }
oas-focus单选框获得焦点

插槽 ​

名称说明
默认标签内容(可放富文本/链接)
checked-icon自定义选中指示器(template[slot] 或直接元素;未选态回落默认空心圆轮廓)
description辅助文本分发通道(优先于 description 属性)

oas-radio-group ​

属性 ​

属性说明类型默认值
direction布局方向:vertical(默认纵向)/ horizontal(横向排布自动换行)stringvertical
disabled禁用整组(下发子项,不覆盖子项自身显式 disabled)boolean—
options数据通道:JSON [{ label, value, disabled?, description? }],显式设置时数据驱动优先于子元素声明式RadioOption[] | string—
readonly只读(下发子项):可聚焦、方向键不切换boolean—
required组级必选校验(form-associated valueMissing,reset 恢复基线)boolean—
size尺寸档(下发子项):small / medium(默认)/ largestring—
status校验态(下发子项):error / warning / success;单项显式 status 优先string—
value组值(选中项的 value)string—

事件 ​

事件说明
oas-blur焦点离开组时派发
oas-change组值变化,detail: { value }(点击与方向键选中都触发)
oas-focus组内任一子项获得焦点(子项间转移不误报)

插槽 ​

名称说明
默认声明式子项通道(<oas-radio> 子元素;options 显式时让位)
label组标题(渲染进 legend)

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