这种纯CSS3美化单选按钮radio的方法适用于以下情况:
1、可兼容IE9以上,需要兼容IE8的要写IE的hack把样式去掉
2、只支持单选按钮radio,因为单选按钮选中样式的圆圈可以用CSS做出来,但是复选按钮checkbox的选中效果对勾就需要图片或者图标字体库
3、不需要JS支持切换效果
下图是最终效果图:

HTML代码:
1 2 3 4 5 6 7 8 9 10 | <label for = "man" class = "radio" >
<span class = "radio-bg" ></span>
<input type= "radio" name= "sex" id= "man" value= "男" checked= "checked" /> 男
<span class = "radio-on" ></span>
</label>
<label for = "woman" class = "radio" >
<span class = "radio-bg" ></span>
<input type= "radio" name= "sex" id= "woman" value= "女" /> 女
<span class = "radio-on" ></span>
</label>
|
登录后复制
CSS代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | .radio{
display: inline-block;
position: relative;
line-height: 18px;
margin-right: 10px;
cursor: pointer;
}
.radio input{
display: none;
}
.radio .radio-bg{
display: inline-block;
height: 18px;
width: 18px;
margin-right: 5px;
padding: 0;
background-color: #45bcb8;
border-radius: 100%;
vertical-align: top;
box-shadow: 0 1px 15px rgba(0, 0, 0, 0.1) inset, 0 1px 4px rgba(0, 0, 0, 0.1) inset, 1px -1px 2px rgba(0, 0, 0, 0.1);
cursor: pointer;
transition: all 0.2s ease;
}
.radio .radio-on{
display: none;
}
.radio input:checked + span.radio-on{
width: 10px;
height: 10px;
position: absolute;
border-radius: 100%;
background: #FFFFFF;
top: 4px;
left: 4px;
box-shadow: 0 2px 5px 1px rgba(0, 0, 0, 0.3), 0 0 1px rgba(255, 255, 255, 0.4) inset;
background-image: linear-gradient(#ffffff 0, #e7e7e7 100%);
transform: scale(0, 0);
transition: all 0.2s ease;
transform: scale(1, 1);
display: inline-block;
}
|
登录后复制
这个方法中最重要的是选中效果的类名:.radio input:checked + span.radio-on
+是CSS2的伪类,其意义为:p+p 选择紧接在
元素之后的所有
元素。
也就是找到选中的(:checked)的input,其之后的类名为radio-on的span元素做选中圆圈效果。
网上有很多美化方法是把label做成了圆圈,但是这样的话,单选的文字就必须要要放到label的外面,这导致了点击文字的时候,不能切换单选效果。
所以我在label里加了一个类名为radio-bg的span来专门做后面大的圆圈,再用一个类名为radio-on的span来做选中的前面小的圆圈。
这样就保留了点击label里的文字,也可以切换单选的效果。
以上是如何使用纯CSS3美化单选按钮radio的示例代码分享的详细内容。更多信息请关注PHP中文网其他相关文章!