单选
单选按钮允许用户从一组选项中选择一个选项。
<Radio />
Playground
基础知识
import Radio from '@mui/joy/Radio';
Joy UI 单选按钮的行为类似于原生 HTML <input type="radio">
,因此它接受 checked
、value
和 onChange
等属性。
尺寸
Radio 组件提供三种尺寸:sm
、md
(默认)和 lg
颜色
主题中包含的每个调色板都可通过 color
属性使用。
标签
使用 label
属性为单选按钮添加标签。
对于更复杂的布局,将单选按钮与 Form Control、Form Label 和 Form Helper Text(可选)组合在一起,如下所示
位置
要交换单选按钮及其标签的位置,请使用 CSS 属性 flex-direction: row-reverse
。
与 Radio Group 一起使用
import RadioGroup from '@mui/joy/RadioGroup';
Radio Group 组件是多个 Radio 组件的理想包装器,因为它提供了用于分组和改进键盘导航可访问性的定制 API。
受控
使用 value
和 onChange
属性来控制单选按钮执行的操作。例如,下面演示中的单选按钮更新状态以反映所选选项
焦点轮廓
默认情况下,焦点轮廓会包裹单选按钮及其标签。如果您需要将焦点省略标签,请定位 radioClasses.radio
类并添加 position: 'relative'
。
自定义图标
使用 checkedIcon
和 uncheckedIcon
属性为单选按钮添加自定义图标,分别对应于每种状态。下面的演示展示了如何将自定义 checkedIcon
应用于位于每个 Sheet 角落的单选按钮
无图标
使用 disableIcon
属性移除单选按钮的图标。在这种情况下,您需要使用 CSS 属性(如边框和背景颜色)来传达单选按钮的状态,如下面的演示所示
对齐方式
层级
此示例演示了组件的组合,灵感来自Tailwind Labs 的这张 Dribbble 作品。
使用以下方式支付
电子商务产品属性
此示例演示了使用 Sheet 组件作为单选按钮容器的复杂自定义。焦点轮廓被自定义得更小,并且颜色会根据值而变化。
选中图标的颜色继承了单选按钮的 solid
变体,因此您无需手动选择与背景对比度足够的颜色。
可访问性
以下是一些确保您的单选按钮组件可访问的技巧
- 每个 Form Control 都应具有适当的标签。这包括单选按钮、复选框和开关。在大多数情况下,这是通过使用 Form Control 和 Form Label 元素来完成的。
- 当无法使用标签时,请确保直接在输入组件上添加属性,例如
aria-label
、aria-labelledby
和/或title
。您也可以使用slotProps.input
属性来添加它们。
<Radio
value="radioA"
slotProps={{
input: {
'aria-label': 'Radio A',
},
}}
/>
访问 WAI-ARIA 创作实践 以了解更多详情。
解剖结构
Radio Group 组件由一个根 <div>
元素组成,该元素可以包裹多个 Radio 组件。
<div class="MuiRadioGroup-root">
<!-- Radio components here -->
</div>
Radio 组件由一个根 <span>
组成,其中还嵌套了用于单选按钮、图标、操作(带有嵌套的 <input>
)及其关联的 <label>
的 <span>
元素。
<span class="MuiRadio-root">
<span class="MuiRadio-radio">
<span class="MuiRadio-icon"></span>
<span class="MuiRadio-action">
<input class="MuiRadio-input">
</span>
</span>
<label class="MuiRadio-label">
</span>
无样式
使用 Base UI Radio 完全拥有组件的设计,而无需覆盖 Material UI 或 Joy UI 样式。此无样式版本的组件是需要重度自定义且捆绑包尺寸更小的理想选择。