用css自定義radio樣式

設(shè)計(jì)師眼中的頁面總是充滿美感的,但當(dāng)一個充滿美感的設(shè)計(jì)圖放在程序員眼前時(shí),情形會大為不同。我們會考慮,這個設(shè)計(jì)應(yīng)該怎么實(shí)現(xiàn),難度如何,等等等。在不斷的撕逼中,我們嘗試著以用戶的角度去考慮問題。畢竟,他們高興就好_

先看一下單選按鈕的設(shè)計(jì)圖:

我是美麗的單選按鈕

之前嘗試過直接用css對單選按鈕進(jìn)行修改,可是基本不可能修改為以上樣式。于是,改用其他元素代替。當(dāng)改用其他元素代替后,我們又會考慮一個問題。能否繼續(xù)使用原生radio的選中邏輯?或者用js來模擬選中邏輯?就這樣,樣式的問題擴(kuò)展為一個比較復(fù)雜的交互處理問題。但是,我們的原則是,能用簡單的方式就絕對不用復(fù)雜的方式。在css3選擇器的幫助下,我們確實(shí)可以只用css實(shí)現(xiàn)上述效果。

頁面dom結(jié)構(gòu)

<label class="m-check ui-margin">
     <input type="radio" name="remindType" value="2" v-model="remind"/>
     <div class="m-radio ui-pos"></div>
     <span>天</span>
</label>

整個結(jié)構(gòu)包含在label標(biāo)簽里,以擴(kuò)大radio的選中范圍。雖然在用一個div來模擬radio的樣式,但是仍然需要input來幫忙實(shí)現(xiàn)選中時(shí)的樣式效果,而重點(diǎn)也就在這里。

css代碼

.ui-middle{
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
}
.m-radio{
    display: inline-block;
    position: relative;
    width: 20px;
    height: 20px;
    border: solid 1px #ccc;
    border-radius: 50%;
    cursor: pointer;
    }
.m-radio:after{
    .ui-middle;
    content: "";
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background-color: #fff;
}
.m-check{
    display: inline-block;
}
.m-check input[type="radio"]{
    display: none;
}
.m-check input[type="radio"]:checked + div{
    border:solid 2px #60A3F5;
}
.m-check input[type="radio"]:checked + div:after{
    background-color: #60A3F5;
}

首先,將input標(biāo)簽隱藏,然后將div標(biāo)簽的樣式修改為設(shè)計(jì)圖中的按鈕樣式,其中的實(shí)心點(diǎn),則用偽元素實(shí)現(xiàn),并讓偽元素在父元素中絕對居中。

接下來是選中邏輯的實(shí)現(xiàn),當(dāng)點(diǎn)擊label標(biāo)簽時(shí),隱藏的input標(biāo)簽被選中,其狀態(tài)發(fā)生改變。狀態(tài)用偽類選擇器選中。這個時(shí)候,用兄弟選擇器選中的div的樣式發(fā)生改變,就實(shí)現(xiàn)了選中效果。

總結(jié):為了讓隱藏的input標(biāo)簽被選中,使用label將其包裹。用偽類選擇器和相鄰元素選擇器實(shí)現(xiàn)div樣式的修改。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,801評論 1 92
  • HTML標(biāo)簽解釋大全 一、HTML標(biāo)記 標(biāo)簽:!DOCTYPE 說明:指定了 HTML 文檔遵循的文檔類型定義(D...
    米塔塔閱讀 3,321評論 1 41
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,932評論 18 139
  • 轉(zhuǎn)載請聲明 原文鏈接地址 關(guān)注公眾號獲取更多資訊 第一部分 HTML 第一章 職業(yè)規(guī)劃和前景 職業(yè)方向規(guī)劃定位...
    前端進(jìn)階之旅閱讀 16,621評論 32 459
  • 隨著十一月的最后一天的到來,我可以驕傲的宣布,這個月的寫作打卡我堅(jiān)持下來了,沒有請假一次。 這個月收獲頗豐。 第一...
    佳佳的寶瓶子閱讀 367評論 0 0