n-radio 单选框
圆环 + 实心圆点 + 文案的纯 CSS 单选控件(无原生 radio 元素,样式与行为全自绘)。推荐放进 n-radio-group 使用,由组容器统一管理选中值;也可以独立使用(checked + change 受控)。
- 单选语义:点击已选中项不会取消选中,也不派发事件;是否取消由页面状态决定
- 组内使用的单项不派发
change,由n-radio-group统一派发(回调参数为新选中项的值)
平台兼容性
| App | H5 | 微信小程序 | 支付宝小程序 | 百度小程序 | 头条小程序 | QQ小程序 |
|---|---|---|---|---|---|---|
| √ | √ | √ | × | × | × | × |
API
属性
| 参数 | 说明 | 类型 | 默认值 | 可选值 |
|---|---|---|---|---|
| name | 该项对应的值:组内选中后组容器 change 事件与 modelValue 携带的就是它;同一组内必须唯一 | String | "" | - |
| checked | 独立使用时的选中态(受控;放进 n-radio-group 时由组接管,本属性不参与) | Boolean | false | - |
| disabled | 禁用(保留配色降透明度并拦截点击;组内使用时叠加组级 disabled) | Boolean | false | - |
| label | 单选框右侧文案;留空只渲染圆环(触控区不变) | String | "" | - |
| color | 选中态颜色(圆环描边与实心圆点,实色值);留空取主题品牌色 | String | "" | 与 css 相同 |
| label-disabled | 点击文案是否不切换选中(圆环仍可切换);文案含链接等可点内容时使用 | Boolean | false | - |
| label-style | 微调文案的行内样式,如 "font-weight:600"(页面 class 打不进组件内部) | String | "" | 与 css 相同 |
| custom-class | 挂到根节点的额外 class(类需定义在组件样式表内) | String | "" | - |
| custom-style | 根节点行内样式,如 "margin-right:12px" 用于横排时拉开单项间距 | String | "" | 与 css 相同 |
事件
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| change | 仅独立使用时触发(组内使用由组容器统一派发,单项不重复派发);点击已选中项不触发 | 该项的值(String) |
插槽
无(文案用 label)。
主题令牌
| 令牌 | 默认值 | 说明 |
|---|---|---|
| --n-radio-min-height | 40px | 单项最小高度(保触控目标不小于 40px) |
| --n-radio-padding-y | 8px | 单项上下内边距 |
| --n-radio-circle-size | 20px | 圆环尺寸 |
| --n-radio-dot-size | 10px | 选中态实心圆点尺寸 |
| --n-radio-label-gap | 10px | 圆环与文案间距 |
| --n-radio-label-size | 15px | 文案字号 |
| --n-radio-disabled-opacity | 0.5 | 禁用态整体透明度 |
实现说明
| 机制 | 参考做法 | 本库做法 | 分歧理由 |
|---|---|---|---|
| 视觉形态 | 图标字体切换(选中/未选中两图标名)/ 多形态枚举(圆、方、点、勾、按钮)/ 描边圆点与实底对勾两型切换 | 纯 CSS 圆环 + 实心圆点单形态 | 单选平台语言恒圆(原生 radio、Material、iOS 一致),方形勾选形态由复选框族承担;纯 CSS 无字体依赖,任意选中色与深浅主题下形态稳定 |
| 选中色 | activeColor / color prop,部分支持组级统一下发 | 单项 color 行内实色,留空挂品牌色令牌 | 值源收敛在组、色源收敛在成员最直白;组级下发属间接层,全局统一走令牌即可 |
| 未选中色 | inactiveColor prop | 主题中性描边令牌 | 未选中是"无语义"中性面,交主题令牌治理;单设 prop 易与深浅主题打架 |
| label 点击 | labelDisabled prop | 相同(label-disabled,.stop 阻断冒泡到整行热区) | 一致 |
| 组通信 | 组件树遍历 + 子项注册簿 | provide/inject 字符串键下发上下文(current / disabled / select) | 无注册簿即无成员增删的簿记同步负担,动态增删选项天然正确 |
| 独立使用 | 部分参考要求必须搭配组容器 | 支持(inject 落空即独立受控 checked + change) | 单项独立场景真实存在(协议单选、卡片内嵌单点) |
| 点击已选中 | 有派发与不派发两种 | 不派发(独立与组内一致) | 单选语义不自行动取消,重复派发只添业务回调噪音 |
| 值通道 | 组 v-model | 组 update:modelValue 与 change 同参同发 | 库内受控组件统一双事件通道;v-model 自动回写,change 供业务监听 |
| 不收项 | 图标插槽与自定义 label 插槽(作用域 checked)/ 文案图标左右位 / 组级下发尺寸与色 | 文案走 label prop;排列组合(左文右环等)由 n-cell 等布局组件承担 | 插槽文案与 label prop 双轨易混;本族非图标族(库内图标规范:图标族才走插槽);组合布局是布局组件的职责 |