css修改複選框默認樣式

不知道小夥伴們在使用複選框(checkbox)的時候有沒有覺得默認的樣式實在太醜了,自己想換一個好看點的樣式又感覺挺麻煩的,前幾天博主就遇到了這個麻煩,然後翻閱了書籍找到了解決方法,現在和大家分享一下

我們先看一下複選框的默認樣式,這種默認的複選框樣式還是不夠美觀的,那麼下面我們把它美化一下

有一個元素和複選框是形影不離、息息相關的,那就是<label>,當<label>元素和複選框關聯之後,也可以起到觸發開關的作用

我們可以爲label添加僞元素,並基於複選框的狀態來爲其設置樣式,然後就可以把真正的複選框隱藏起來,再把僞元素的內容進行美化,用來頂替原來的複選框~

從下面一段代碼開始:

<input type="checkbox" id="check-box" />
<label for="check-box">哈哈哈哈</label>

然後我們在label的前面生成一個僞元素,作爲美化版的複選框,並加上樣式:

input[type="checkbox"] + label::before {
            content: '\a0';       /* 不換行空格 */
            display: inline-block;
            vertical-align: .1em;
            width: .8em;
            height: .8em;
            margin-right: .2em;
            border-radius: .2em;
            background: silver;
            text-indent: .15em;
            line-height: .65; }

現在的頁面是這樣的:

 

 現在可以看見那個僞元素了,複選框仍然可見,我們等一下把它隱藏,我們先給複選框的勾選狀態加上不同的樣式:

input[type="checkbox"]:checked + label::before {
 content: '\2713';
 background: yellowgreen; }

正如上圖所示,現在樣式已經出來了,我們再將原來的複選框隱藏掉,注意不能使用display:none來隱藏,因爲那樣會

把它從鍵盤tab鍵切換焦點的隊列中完全刪除,我們用下面的方法來隱藏:

input[type="checkbox"] {
 position: absolute;
 clip: rect(0,0,0,0);
}

clip屬性對元素進行裁剪,這裏我們把複選框全部裁剪掉,不瞭解用法的小朋友可以自行查閱~

現在就得到下面的樣式啦:

我們還可以進行進一步的優化,比如在聚焦或者禁用的時候改變它的樣式:

input[type="checkbox"]:focus + label::before {
 box-shadow: 0 0 .1em .1em #58a; }

input[type="checkbox"]:disabled + label::before {
 background: gray;
 box-shadow: none;
 color: #555; }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章