Radio 使用手册
v1.4.0 · @snowui-design-system/components
许可阅读:首次阅读组件文档、源码或 npm 使用流程,先读完整 LICENSE;同任务同版本去重。公开 API 配置与内部实现修改分别按许可处理;全部组件使用统一运行包,源码权益以许可为准。
组件介绍
在一组互斥选项中选择一项,适合需要直接展示所有选项的表单设置。
使用选择
用于一组选项中的单选。多选用 Checkbox,分段参数选择用 Segmented;为组和选项提供可访问名称。
同组使用 bind:group 和不同的稳定 value;无初始选择可用 null。
组件支持取消当前项并写入 undefined,不能假定已选项永远不可取消;提供可读标签。
快速开始
以下示例展示推荐的基本组合。更多场景与组合限制见后文。
API
未重新声明的继承能力请查所属基础组件文档;本表只列本组件源码具名公开属性。
使用边界与详细说明
关键字
分组建议在外层提供带名称的 role="radiogroup"。使用 Tab 聚焦、Space 切换;当前组件通过绑定管理组值,不提供组内方向键导航。name、required 等剩余属性传递到外层 Frame,不等同于内层原生 input 的表单属性。
布局模型
主布局模型:内联外壳布局。定义见 ../../../specs/maintainers/LayoutProtocol.md §12.4(源码参考:specs/maintainers/LayoutProtocol.md)。
Radio 属于“控件视觉体 + label”的内联外壳子类:
根节点保持
inline-flex,内容整体 Hug。.snowui-radio-visual是固定 Hug 的控件视觉体。.snowui-radio-label是可选标签,空间充足时 Hug,受限时允许收缩并单行省略;原始内容及完整原生名称保留。visual 与 label 的距离由
--snowui-radio-gap管理,可通过 gap 或--snowui-radio-gap-override设置首选值;有效间距至少 4 CSS px。size表示包含透明留白的控件占位尺寸,不改变 label 的布局策略。四周留白为
size / 16,可见图形宽高为size × 0.875;例如size={32}占位 32×32px、图形 28×28px、四边各 2px。留白与图形随 size、根字号和尺寸 Token 等比缩放,留白仍可点击。留白由共享控件壳持有,label 位于壳外;内边框继续按名义 size 的
0.0625计算,圆角、Dot 与选中环按可见图形尺寸计算。as="badge"只表示 Radio 作为 Image 的角标挂件,不改变 Radio 内部布局模型。
使用示例
Outline
未选中:灰色边框,透明背景
选中:主题色圆点,灰色边框
Filled(默认)
未选中:灰色边框,透明背景
选中:主题色背景,白色圆点
状态
unchecked: 未选中状态
checked: 选中状态
disabled: 禁用状态
分组行为
当使用 group 属性时:
自动管理同组内的单选逻辑
选中一个会自动取消其他选项
再次点击当前选中项会取消选中
取消当前选中项后,
group值会被清空为undefinedgroup值等于选中项的value
无障碍性
使用原生
<input type="radio">作为基础语义,并在组件内补充“再次点击可取消”逻辑支持 Tab 键聚焦
支持 Space 键选中与取消
组选择由绑定管理;当前不提供组内方向键导航
禁用状态下
tabindex=-1
Radio 样式覆盖
先阅读 完整 LICENSE;同任务、同版本、同范围去重。
优先用组件公开 Props 匹配合适样式,尽可能保留原有视觉。确需改写时按 样式选择与改写顺序 使用自己的 class(含项目已有 Tailwind)或实例 style。以下名称来自源码实际消费的公开 override;先核对目标作用域,不修改私有 DOM。采用 SnowUI Token 时选择正确类别,外部应用不被要求安装一方 utilities。
Radio 类型与状态
必填属性:无具名必填属性。
可双向绑定:bind:checked、bind:group。
继承声明:Omit<FrameProps, "size">。继承能力以基类公开文档为准;Omit 中的字段已排除,不能按基类原样使用。
以下为公开属性实际引用的类型声明,来自源码;Svelte Snippet 表示内容片段,ComponentProps 表示对应组件的 Props。
ResourceSize
来源:components/src/context.ts