如何在html中自定义单选按钮

时间:2014-10-09 04:08:09

标签: html css html5 radio-button

我正试图像这样得到单选按钮..

enter image description here

但我得到这样的

enter image description here

如果没有选择选项,我需要自定义单选按钮,它应该在其中显示白色。如果选择单选按钮,则框内应显示绿色。怎么做到这一点?

这是我尝试过的。

的index.html

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
<style>
/* Radio Button CSS*/
label {
    display: inline;
}
.radio-1 {
    width: 193px;
}
.button-holder {
    float: left;
    margin-left: 6px;
    margin-top: 16px;
}
.regular-radio {
    display: none;
}
.regular-radio + label {
    background-color: #fafafa;
    border: 2px solid #cacece;
    border-radius: 50px;
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), 0 -15px 10px -12px rgba(0, 0, 0, 0.05) inset;
    display: inline-block;
    padding: 11px;
    position: relative;

}
.regular-radio:checked + label:after {
    background: none repeat scroll 0 0 #94E325;
    border-radius: 50px;
    box-shadow: 0 0 10px rgba(0, 0, 0, 0.3) inset;
    content: " ";
    font-size: 36px;
    height: 8px;
    left: 7px;
    position: absolute;
    top: 7px;
    width: 8px;
}
.regular-radio:checked + label {
    background-color: #e9ecee;
    border: 2px solid #adb8c0;
    color: #99a1a7;
    padding: 11px;
}
.regular-radio + label:active, .regular-radio:checked + label:active {
    box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), 0 1px 3px rgba(0, 0, 0, 0.1) inset;
}
</style>
  </head>
  <body>
 <div class="button-holder">
<input type="radio" checked="" class="regular-radio" name="radio-1-set" id="radio-1-set"><label for="radio-1-set"></label><br>
<input type="radio" checked="" class="regular-radio" name="radio-1-set" id="radio-2-set"><label for="radio-2-set"></label><br>
</div>
    </body>
</html>

4 个答案:

答案 0 :(得分:5)

只需添加:before伪元素,即可在检查radio按钮之前处理颜色。您可以将其添加到CSS

 .regular-radio + label:before {
  background: none repeat scroll 0 0 #FDFDFD;
  border-radius: 50px;
  box-shadow: 0 0 10px rgba(0, 0, 0, 0.3) inset;
  content: " ";
  font-size: 36px;
  height: 8px;
  left: 7px;
  position: absolute;
  top: 7px;
  width: 8px;
}

Working demo。您可以更改此标签的background以完全匹配您显示的示例。希望它有所帮助。

答案 1 :(得分:2)

input[type=radio].css-checkbox {
    position: absolute;
    z-index: -1000;
    left: -1000px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    height: 1px;
    width: 1px;
    margin: -1px;
    padding: 0;
    border: 0;
}
input[type=radio].css-checkbox + label.css-label {
    padding-left: 30px;
    height: 25px;
    display: inline-block;
    line-height: 25px;
    background-repeat: no-repeat;
    background-position: 0 0;
    font-size: 25px;
    vertical-align: middle;
    cursor: pointer;
}
input[type=radio].css-checkbox:checked + label.css-label {
    background-position: 0 -25px;
}
label.css-label {
    background-image: url(http://csscheckbox.com/checkboxes/u/csscheckbox_98809849d4d88f570f5ad4ce6c2be5b1.png);
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

查看此fiddle.

答案 2 :(得分:2)

您应该取消选中并选中格式化单选按钮。

您可以找到您的anwser跟随区块代码:

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <style>
        /* Radio Button CSS*/
        label {
            display: inline;
        }
        .radio-1 {
            width: 193px;
        }
        .button-holder {
            float: left;
            margin-left: 6px;
            margin-top: 16px;
        }
        .regular-radio {
            display: none;
        }
        .regular-radio + label {
            background-color: #fafafa;
            border: 2px solid #cacece;
            border-radius: 50px;
            box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), 0 -15px 10px -12px rgba(0, 0, 0, 0.05) inset;
            display: inline-block;
            padding: 11px;
            position: relative;

        }
        .regular-radio:checked + label:after {
            background: none repeat scroll 0 0 #94E325;
            border-radius: 50px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.3) inset;
            content: " ";
            font-size: 36px;
            height: 8px;
            left: 7px;
            position: absolute;
            top: 7px;
            width: 8px;
        }


        .regular-radio:checked + label {
            background-color: #e9ecee;
            border: 2px solid #adb8c0;
            color: #99a1a7;
            padding: 11px;
        }
        .regular-radio + label:active, .regular-radio:checked + label:active {
            box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05), 0 1px 3px rgba(0, 0, 0, 0.1) inset;
        }

        /*----------------hungtq added--------------*/
        .regular-radio + label:before {
            background: none repeat scroll 0 0 #e9ecee;
            border-radius: 50px;
            box-shadow: 0 0 10px rgba(0, 0, 0, 0.3) inset;
            content: " ";
            font-size: 36px;
            height: 8px;
            left: 7px;
            position: absolute;
            top: 7px;
            width: 8px;
        }
    </style>
</head>
<body>
<div class="button-holder">
    <input type="radio" checked="" class="regular-radio" name="radio-1-set" id="radio-1-set"><label for="radio-1-set"></label><br>
    <input type="radio" checked="" class="regular-radio" name="radio-1-set" id="radio-2-set"><label for="radio-2-set"></label><br>
</div>
</body>
</html>

结果: enter image description here

答案 3 :(得分:1)

您可以通过两种方式实现所需的布局

  • 通过使用CSS appearance删除标准外观并应用自定义外观。不幸的是,这在IE for Desktop中不起作用(但适用于Windows Phone的IE)。演示:

    input[type="radio"] {
      /* remove standard background appearance */
      -webkit-appearance: none;
      -moz-appearance: none;
      appearance: none;
      /* create custom radiobutton appearance */
      display: inline-block;
      width: 25px;
      height: 25px;
      padding: 6px;
      /* background-color only for content */
      background-clip: content-box;
      border: 2px solid #bbb;
      background-color: #e7e6e7;
      border-radius: 50%;
    }
    
    /* appearance for checked radiobutton */
    input[type="radio"]:checked {
      background-color: #93e026;
    }
    
    /* optional styles, I'm using this for centering radiobuttons */
    .flex {
      display: flex;
      align-items: center;
    }
    <div class="flex">
      <input type="radio" name="radio" id="radio1" />
      <label for="radio1">RadioButton1</label>
    </div>
    <div class="flex">
      <input type="radio" name="radio" id="radio2" />
      <label for="radio2">RadioButton2</label>
    </div>
    <div class="flex">
      <input type="radio" name="radio" id="radio3" />
      <label for="radio3">RadioButton3</label>
    </div>

  • 通过隐藏radiobutton并将自定义radiobutton外观设置为label的伪选择器。顺便说一句,这里不需要绝对定位。演示:

    *,
    *:before,
    *:after {
      box-sizing: border-box;
    }
    
    input[type="radio"] {
      display: none;
    }
    
    input[type="radio"] + label:before {
      content: "";
      /* create custom radiobutton appearance */
      display: inline-block;
      width: 25px;
      height: 25px;
      padding: 6px;
      margin-right: 3px;
      /* background-color only for content */
      background-clip: content-box;
      border: 2px solid #bbb;
      background-color: #e7e6e7;
      border-radius: 50%;
    }
    
    /* appearance for checked radiobutton */
    input[type="radio"]:checked + label:before {
      background-color: #93e026;
    }
    
    /* optional styles, I'm using this for centering radiobuttons */
    label {
      display: flex;
      align-items: center;
    }
    <input type="radio" name="radio" id="radio1" />
    <label for="radio1">RadioButton1</label>
    <input type="radio" name="radio" id="radio2" />
    <label for="radio2">RadioButton2</label>
    <input type="radio" name="radio" id="radio3" />
    <label for="radio3">RadioButton3</label>