Skip to content
通用组件

单选Radio

圆形单选(系统里唯一的圆);单选按钮组是「列表 / 网格 / 表格」这类分段控件。

Vue
实验import { AkRadioGroup, AkRadio, AkRadioButton } from "@mooncellwiki/prts-design-vue"Storybook ↗源码 ↗

几个里选一个(同 Naive UI 的 n-radio-group + n-radio / n-radio-button)。AkRadioGroup 的 v-model 是选中项的 value;里面放 AkRadio 是一排圆形单选,放 AkRadioButton 是连成一排的分段控件。

单选组 ​

圆是单选的通用语义,也是整套系统里 UI 控件唯一的圆(选中 = 主色实底 + 圆点)。长相与裸 <input type="radio"> 同一套(裸控件规则),组给它们同一个 name,方向键在组内移动并选中是浏览器自己的。vertical 竖排,size="sm" 16px。

单独用的 AkRadio 与原生写法一样:几个 <AkRadio v-model="picked" value="…"> 绑同一个变量、写同一个 name。

单选按钮组 ​

AkRadioButton 渲染成 .ak-btn-group 里的 .ak-btn,选中 .is-active(主色实底):视图切换(列表 / 网格 / 表格)、排序方式这类立即生效的多选一。写法同 按钮:icon 放图标,不写文字就是方形图标按钮(这时 label 必填);size 写在组上(30 / 36 / 44)。

它和按钮组长得一样,但语义不同:按钮组 是一排各自独立的动作,单选按钮组是一个值。精英阶段切换另有专门的阶段选择器,不用它。

键盘 ​

按 WAI-ARIA Radio Group:

键行为
Tab进入组时落在选中项上(没有选中项时落在第一个可用项),再按一次离开整组
→ / ↓下一个并选中(跳过禁用、到头回到第一个)
← / ↑上一个并选中
Space选中当前项

普通单选这些是浏览器对同名 <input type="radio"> 的原生行为;单选按钮组由 AkRadioGroup 实现(role="radiogroup" + 每项 role="radio" aria-checked,roving tabindex:只有选中项 tabindex="0")。

Vue API ​

AkRadioGroup ​

属性类型默认说明
namestring—原生 name(普通单选靠它互斥);不写自动生成
disabledbooleanfalse整组禁用
size"md""sm""lg"—尺寸:单选按钮 sm 30 · md 36 · lg 44(px 高);普通单选只有 sm(16px 圆)与 md
verticalbooleanfalse竖排(只对普通单选;单选按钮总是连成一排)
labelstring—读屏用的组名(aria-label);放在带标签的 AkField 里时不用写
modelValueRadioValue—选中项的 value
事件参数说明
update:modelValue[value: RadioValue | undefined]
插槽说明
default若干 AkRadio,或若干 AkRadioButton

AkRadio ​

属性类型默认说明
value必填RadioValue—这一项的值:选中时成为 v-model(或所在 AkRadioGroup 的 v-model)的值
disabledbooleanfalse禁用
size"md""sm"—尺寸:sm 16px 圆 · md 18px;不写时跟 AkRadioGroup(lg 对单选圆点不起作用)
namestring—原生 name:同名的单选互斥、方向键在其间移动;放在 AkRadioGroup 里时由组统一给
labelstring—可访问名(aria-label):不写文字(默认插槽)时必填
modelValueRadioValue—单独用时 = 选中项的值(同原生 <input type="radio" v-model>);放在 AkRadioGroup 里时由组的 v-model 决定,不用绑
事件参数说明
update:modelValue[value: RadioValue | undefined]
插槽说明
default文字

AkRadioButton ​

属性类型默认说明
value必填RadioValue—这一项的值:选中时成为 AkRadioGroup 的 v-model
disabledbooleanfalse禁用:不可选,方向键跳过
iconIconName—图标;不写文字(默认插槽)时是方形的图标按钮,这时 label 必填
labelstring—可访问名(aria-label;图标按钮同时作 title)——只有图标时必填
插槽说明
default文字;不写就是图标按钮

CSS 实现 ​

html
<div class="ak-check-group" role="radiogroup" aria-label="部署位置">
  <label class="ak-check"><input type="radio" name="pos" checked>近战位</label>
  <label class="ak-check"><input type="radio" name="pos">远程位</label>
</div>
<div class="ak-btn-group" role="radiogroup" aria-label="视图">
  <button type="button" class="ak-btn" role="radio" aria-checked="false" tabindex="-1">列表</button>
  <button type="button" class="ak-btn is-active" role="radio" aria-checked="true" tabindex="0">网格</button>
</div>

单选按钮组的 .ak-btn-group / .ak-btn.is-active 在 components/button.css;CSS 实现只有外观,方向键要皮肤脚本或 Vue 组件补。

块元素 __修饰 --

文本 CC BY-NC-SA 4.0 · 游戏素材版权归鹰角网络所有