純CSS3美化單選按鈕radio

這種純CSS3美化單選按鈕radio的方法適用於如下狀況:字體

一、可兼容IE9以上,須要兼容IE8的要寫IE的hack把樣式去掉spa

二、只支持單選按鈕radio,由於單選按鈕選中樣式的圓圈能夠用CSS作出來,可是複選按鈕checkbox的選中效果對勾就須要圖片或者圖標字體庫code

三、不須要JS支持切換效果orm

下圖是最終效果圖:blog

HTML代碼:圖片

<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代碼:input

.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-onit

+是CSS2的僞類,其意義爲:div+p 選擇緊接在 <div> 元素以後的全部 <p> 元素。io

也就是找到選中的(:checked)的input,其以後的類名爲radio-on的span元素作選中圓圈效果。form

 

網上有不少美化方法是把label作成了圓圈,可是這樣的話,單選的文字就必需要要放到label的外面,這致使了點擊文字的時候,不能切換單選效果。

因此我在label里加了一個類名爲radio-bg的span來專門作後面大的圓圈,再用一個類名爲radio-on的span來作選中的前面小的圓圈。

這樣就保留了點擊label裏的文字,也能夠切換單選的效果。

相關文章
相關標籤/搜索