Skip to content

单选框 Radio

单选框是表单中用于从多个选项中选择一个的控件。

基础用法

单选组

html
<div class="radio-group">
  <label class="glass-radio">
    <input type="radio" name="option" value="option1">
    <span class="radio-mark"></span>
    选项一
  </label>
  <label class="glass-radio">
    <input type="radio" name="option" value="option2">
    <span class="radio-mark"></span>
    选项二
  </label>
  <label class="glass-radio">
    <input type="radio" name="option" value="option3">
    <span class="radio-mark"></span>
    选项三
  </label>
</div>

带标签的单选组

html
<div class="form-group">
  <label class="form-label">性别</label>
  <div class="radio-group">
    <label class="glass-radio">
      <input type="radio" name="gender" value="male">
      <span class="radio-mark"></span>

    </label>
    <label class="glass-radio">
      <input type="radio" name="gender" value="female">
      <span class="radio-mark"></span>

    </label>
  </div>
</div>

基础单选框

html
<label class="glass-radio">
  <input type="radio" name="option">
  <span class="radiomark"></span>
  选项一
</label>

<label class="glass-radio">
  <input type="radio" name="option">
  <span class="radiomark"></span>
  选项二
</label>

预览效果:

单选框状态

默认选中

html
<div class="radio-group">
  <label class="glass-radio">
    <input type="radio" name="default" value="option1" checked>
    <span class="radio-mark"></span>
    默认选中
  </label>
  <label class="glass-radio">
    <input type="radio" name="default" value="option2">
    <span class="radio-mark"></span>
    未选中
  </label>
</div>

禁用状态

html
<label class="glass-radio">
  <input type="radio" name="disabled-demo" disabled>
  <span class="radio-checkmark"></span>
  禁用选项一
</label>

<label class="glass-radio">
  <input type="radio" name="disabled-demo" checked disabled>
  <span class="radio-checkmark"></span>
  禁用选项二(已选中)
</label>

预览效果:

垂直单选组

html
<div class="radio-group vertical">
  <label class="glass-radio">
    <input type="radio" name="vertical-demo" checked>
    <span class="radio-checkmark"></span>
    选项一
  </label>
  <label class="glass-radio">
    <input type="radio" name="vertical-demo">
    <span class="radio-checkmark"></span>
    选项二
  </label>
  <label class="glass-radio">
    <input type="radio" name="vertical-demo">
    <span class="radio-checkmark"></span>
    选项三
  </label>
</div>

预览效果:

单选框尺寸

html
<!-- 小尺寸 -->
<div class="radio-group">
  <label class="glass-radio small">
    <input type="radio" name="size-small" value="option1">
    <span class="radio-mark"></span>
    小尺寸
  </label>
</div>

<!-- 默认尺寸 -->
<div class="radio-group">
  <label class="glass-radio">
    <input type="radio" name="size-default" value="option1">
    <span class="radio-mark"></span>
    默认尺寸
  </label>
</div>

<!-- 大尺寸 -->
<div class="radio-group">
  <label class="glass-radio large">
    <input type="radio" name="size-large" value="option1">
    <span class="radio-mark"></span>
    大尺寸
  </label>
</div>

CSS 类名

基础类名

  • .glass-radio - 基础单选框样式
  • .radio-mark - 单选框标记
  • .radio-group - 单选框组容器

修饰类名

尺寸修饰符

  • .small - 小尺寸
  • .large - 大尺寸

状态修饰符

  • :checked - 选中状态
  • :disabled - 禁用状态

JavaScript 增强

单选框事件处理

javascript
// 监听单选框变化
document.querySelectorAll('input[type="radio"]').forEach(radio => {
  radio.addEventListener('change', function() {
    if (this.checked) {
      console.log('选择了:', this.value);
    }
  });
});

获取选中值

javascript
function getSelectedValue(name) {
  const selected = document.querySelector(`input[name="${name}"]:checked`);
  return selected ? selected.value : null;
}

// 使用示例
const selectedGender = getSelectedValue('gender');
console.log('选择的性别:', selectedGender);

应用场景

问卷调查

html
<form class="survey-form">
  <div class="form-group">
    <label class="form-label">您对我们服务的满意度?</label>
    <div class="radio-group">
      <label class="glass-radio">
        <input type="radio" name="satisfaction" value="5">
        <span class="radio-mark"></span>
        非常满意
      </label>
      <label class="glass-radio">
        <input type="radio" name="satisfaction" value="4">
        <span class="radio-mark"></span>
        满意
      </label>
      <label class="glass-radio">
        <input type="radio" name="satisfaction" value="3">
        <span class="radio-mark"></span>
        一般
      </label>
      <label class="glass-radio">
        <input type="radio" name="satisfaction" value="2">
        <span class="radio-mark"></span>
        不满意
      </label>
    </div>
  </div>
</form>

支付方式选择

html
<div class="payment-form">
  <div class="form-group">
    <label class="form-label">选择支付方式</label>
    <div class="radio-group">
      <label class="glass-radio">
        <input type="radio" name="payment" value="alipay">
        <span class="radio-mark"></span>
        支付宝
      </label>
      <label class="glass-radio">
        <input type="radio" name="payment" value="wechat">
        <span class="radio-mark"></span>
        微信支付
      </label>
      <label class="glass-radio">
        <input type="radio" name="payment" value="credit">
        <span class="radio-mark"></span>
        信用卡
      </label>
    </div>
  </div>
</div>

配置选项

html
<div class="config-form">
  <div class="form-group">
    <label class="form-label">通知频率</label>
    <div class="radio-group">
      <label class="glass-radio">
        <input type="radio" name="frequency" value="realtime">
        <span class="radio-mark"></span>
        实时通知
      </label>
      <label class="glass-radio">
        <input type="radio" name="frequency" value="daily">
        <span class="radio-mark"></span>
        每日汇总
      </label>
      <label class="glass-radio">
        <input type="radio" name="frequency" value="weekly">
        <span class="radio-mark"></span>
        每周汇总
      </label>
      <label class="glass-radio">
        <input type="radio" name="frequency" value="never">
        <span class="radio-mark"></span>
        从不通知
      </label>
    </div>
  </div>
</div>

Released under the MIT License.