【问题标题】:How to customize radio button in html如何在html中自定义单选按钮
【发布时间】:2014-12-03 21:31:05
【问题描述】:

我正在尝试获取这样的单选按钮..

但我越来越喜欢了

如果没有选择任何选项,我需要自定义单选按钮,它应该在里面显示白色。如果选择单选按钮,它应该在框内显示绿色。如何做到这一点?

这是我尝试过的。

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>

【问题讨论】:

    标签: css html radio-button


    【解决方案1】:
    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】:

      只需在选中radio 按钮之前添加:before 伪元素来处理颜色。您可以将此添加到您的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 以完全匹配您显示的示例。希望对您有所帮助。

      【讨论】:

        【解决方案3】:

        您应该格式化您的单选按钮,取消选中和选中。

        你可以找到你的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>
        

        结果:

        【讨论】:

          【解决方案4】:

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

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

            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>
          • 通过隐藏单选按钮并将自定义单选按钮外观设置为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>

          【讨论】:

            猜你喜欢
            • 2013-05-08
            • 2020-11-24
            • 1970-01-01
            • 2020-07-21
            • 1970-01-01
            • 1970-01-01
            • 2013-05-22
            • 2021-07-12
            • 1970-01-01
            相关资源
            最近更新 更多