跳到内容
+

单选

单选按钮允许用户从一组选项中选择一个选项。

简介

单选按钮允许用户做出互斥的选择(例如:“这个”或“那个”)。从可用选项集中仅允许选择一个。

单选按钮应默认选择最常用的选项。

<Radio />

Playground


基础知识

import Radio from '@mui/joy/Radio';

Joy UI 单选按钮的行为类似于原生 HTML <input type="radio">,因此它接受 checkedvalueonChange 等属性。

Enter 开始编辑

自定义

变体

Radio 组件支持 Joy UI 的四种全局变体outlined(默认)、softsolidplain

Enter 开始编辑

尺寸

Radio 组件提供三种尺寸:smmd(默认)和 lg

Enter 开始编辑

颜色

主题中包含的每个调色板都可通过 color 属性使用。

Enter 开始编辑

标签

使用 label 属性为单选按钮添加标签。

Enter 开始编辑

对于更复杂的布局,将单选按钮与 Form Control、Form Label 和 Form Helper Text(可选)组合在一起,如下所示

最多一行的描述 lorem ipsum
Enter 开始编辑

位置

要交换单选按钮及其标签的位置,请使用 CSS 属性 flex-direction: row-reverse

与 Radio Group 一起使用

import RadioGroup from '@mui/joy/RadioGroup';

Radio Group 组件是多个 Radio 组件的理想包装器,因为它提供了用于分组和改进键盘导航可访问性的定制 API。

此单选按钮的辅助文本。
这是辅助文本。
Enter 开始编辑

受控

使用 valueonChange 属性来控制单选按钮执行的操作。例如,下面演示中的单选按钮更新状态以反映所选选项

Enter 开始编辑

焦点轮廓

默认情况下,焦点轮廓会包裹单选按钮及其标签。如果您需要将焦点省略标签,请定位 radioClasses.radio 类并添加 position: 'relative'

选择一个选项并使用键盘 ↑↓ 查看焦点轮廓
Enter 开始编辑

叠加层

要使单选按钮的容器可点击,请使用 overlay 属性。

您也可以直接将此属性应用于 Radio Group(如果存在),这会将该属性传递给其中嵌套的每个单独的单选按钮。

自定义图标

使用 checkedIconuncheckedIcon 属性为单选按钮添加自定义图标,分别对应于每种状态。下面的演示展示了如何将自定义 checkedIcon 应用于位于每个 Sheet 角落的单选按钮

无图标

使用 disableIcon 属性移除单选按钮的图标。在这种情况下,您需要使用 CSS 属性(如边框和背景颜色)来传达单选按钮的状态,如下面的演示所示

对齐方式

层级

此示例演示了组件的组合,灵感来自Tailwind Labs 的这张 Dribbble 作品

适用于发送电子邮件等轻量级后台作业
适用于图像大小调整、导出 PDF 等任务。
适用于视频编码等密集型任务。

对齐按钮

此示例使用图标作为一组单选按钮的标签,以重现切换按钮的形式和功能。在这种情况下,您必须为依赖屏幕阅读器的用户在输入槽中提供 aria-label

支付方式

将单选按钮与List 组件混合使用,以创建垂直或水平支付方式列表。

使用以下方式支付

电子商务产品属性

此示例演示了使用 Sheet 组件作为单选按钮容器的复杂自定义。焦点轮廓被自定义得更小,并且颜色会根据值而变化。

选中图标的颜色继承了单选按钮的 solid 变体,因此您无需手动选择与背景对比度足够的颜色。


可访问性

以下是一些确保您的单选按钮组件可访问的技巧

  • 每个 Form Control 都应具有适当的标签。这包括单选按钮、复选框和开关。在大多数情况下,这是通过使用 Form Control 和 Form Label 元素来完成的。
  • 当无法使用标签时,请确保直接在输入组件上添加属性,例如 aria-labelaria-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 样式。此无样式版本的组件是需要重度自定义且捆绑包尺寸更小的理想选择。

API

请参阅下面的文档,以获取此处提及的组件的所有可用属性和类的完整参考。