純CSS設(shè)置Checkbox復(fù)選框控件的樣式

Checkbox復(fù)選框是一個(gè)可能每一個(gè)網(wǎng)站都在使用的HTML元素击纬,但大多數(shù)人并不給它們?cè)O(shè)置樣式,所以在絕大多數(shù)網(wǎng)站它們看起來是一樣的号俐。為什么不把你的網(wǎng)站中的Checkbox設(shè)置一個(gè)與眾不同的樣式娃殖,甚至可以讓它看起來一點(diǎn)也不像復(fù)選框。

在本教程中,我們將創(chuàng)建5個(gè)不同的選擇框愈腾,你可以在你的網(wǎng)站上使用它憋活。

圖片.png

查看演示,可以看到我們將要?jiǎng)?chuàng)建的復(fù)選框樣式虱黄。

演示地址

首先悦即,需要添加一段CSS隱藏所有的Checkbox復(fù)選框,下面我們會(huì)改變它的外觀礁鲁。要做到點(diǎn)需要添加一段代碼到你的CSS文件中盐欺。

/**
 * 隱藏默認(rèn)的checkbox
 */
input[type=checkbox] {
    visibility: hidden;
}

隱藏掉所有的Checkbox復(fù)選框后,我們需要添加一個(gè)label HTML元素仅醇,我們都知道冗美,當(dāng)點(diǎn)擊的有for屬性的label標(biāo)簽時(shí),對(duì)應(yīng)的Checkbox復(fù)選框會(huì)被選中析二。這意味著粉洼,我們可以通過label的點(diǎn)擊事件來處理我們的Checkbox復(fù)選框。

樣式一

checkbox-one

此復(fù)選框風(fēng)格就像一個(gè)解鎖滑塊叶摄,滑塊選中和未選中狀態(tài)會(huì)顯示在的不同位置属韧。當(dāng)單擊滑塊按鈕(label標(biāo)簽),將會(huì)選中復(fù)選框蛤吓,然后滑塊移動(dòng)到ON位置宵喂。

我們開始創(chuàng)建復(fù)選框區(qū)的HTML。

<section>
  <!-- Checbox One -->
  <h3>Checkbox One</h3>
    <div class="checkboxOne">
        <input type="checkbox" value="1" id="checkboxOneInput" name="" />
        <label for="checkboxOneInput"></label>
    </div>
</section>

因?yàn)檫@個(gè)樣式的復(fù)選框会傲,一個(gè)label不足以完成任務(wù)锅棕,我們用一個(gè)DIV元素包含checkbox,我們需要使用它們來做黑色條帶和圓角淌山。

/**
 * Create the slider bar
 */
.checkboxOne {
    width: 40px;
    height: 10px;
    background: #555;
    margin: 20px 80px;
    position: relative;
    border-radius: 3px;
}

現(xiàn)在裸燎,我們可以把label作為條帶上的滑塊,我們希望按鈕效果是從條帶的一側(cè)移動(dòng)到另一側(cè)泼疑,我們可以添加label的過渡德绿。

/**
 * Create the slider from the label
 */
.checkboxOne label {
    display: block;
    width: 16px;
    height: 16px;
    border-radius: 50%;
 
    -webkit-transition: all .5s ease;
    -moz-transition: all .5s ease;
    -o-transition: all .5s ease;
    -ms-transition: all .5s ease;
    transition: all .5s ease;
    cursor: pointer;
    position: absolute;
    top: -3px;
    left: -3px;
 
    background: #ccc;
}

現(xiàn)在這個(gè)滑塊在選中(關(guān)閉)位置,當(dāng)我們選中復(fù)選框退渗,我們希望有一個(gè)反應(yīng)發(fā)生移稳,所以我們可以移動(dòng)滑塊到另一端。我們需要知道会油,判斷復(fù)選框被選中秒裕,如果是則改變label元素的left屬性。

/**
 * Move the slider in the correct position if the checkbox is clicked
 */
.checkboxOne input[type=checkbox]:checked + label {
    left: 27px;
}

這就是你需要的第一個(gè)Checkbox復(fù)選框的CSS钞啸。

樣式二

checkbox-two

此復(fù)選框風(fēng)格像樣式一樣,但不同的是,這個(gè)滑塊按鈕會(huì)改變顏色体斩。當(dāng)您單擊滑塊按鈕梭稚,它移動(dòng)到條帶的另一邊,并改變按鈕的顏色絮吵。

HTML代碼和樣式一是完全一樣的弧烤。

<section>
  <!-- Checbox Two -->
  <h3>Checkbox Two</h3>
    <div class="checkboxTwo">
        <input type="checkbox" value="1" id="checkboxTwoInput" name="" />
        <label for="checkboxTwoInput"></label>
    </div>
</section>

這個(gè)DIV會(huì)變成比樣式一大一些的條帶,label依然是作為滑塊蹬敲,使用下面的CSS來定義它暇昂。

/**
 * Checkbox Two
 */
.checkboxTwo {
    width: 120px;
    height: 40px;
    background: #333;
    margin: 20px 60px;
 
    border-radius: 50px;
    position: relative;
}

這個(gè)樣式中間有一個(gè)黑色的條,滑塊會(huì)沿著它左右滑動(dòng)伴嗡,但是DIV元素已經(jīng)使用了急波,所以我們需要用:before偽類創(chuàng)建一個(gè)新的元素。

/**
 * Create the line for the circle to move across
 */
.checkboxTwo:before {
    content: '';
    position: absolute;
    top: 19px;
    left: 14px;
    height: 2px;
    width: 90px;
    background: #111;
}

和樣式一一樣瘪校,接下來我們?yōu)閘abel寫CSS樣式澄暮,把它用作滑塊。

/**
 * Create the circle to click
 */
.checkboxTwo label {
    display: block;
    width: 22px;
    height: 22px;
    border-radius: 50%;
 
    -webkit-transition: all .5s ease;
    -moz-transition: all .5s ease;
    -o-transition: all .5s ease;
    -ms-transition: all .5s ease;
    transition: all .5s ease;
    cursor: pointer;
    position: absolute;
    top: 9px;
    z-index: 1;
    left: 12px;
    background: #ddd;
}

我要實(shí)現(xiàn)和樣式一差不多的選中狀態(tài)阱扬,當(dāng)選中時(shí)改變label的left和background屬性泣懊。

/**
 * Create the click event for the checkbox
 */
.checkboxTwo input[type=checkbox]:checked + label {
    left: 84px;
    background: #26ca28;
}

樣式三

checkbox-three

這個(gè)復(fù)選框的樣式比樣式二更復(fù)雜一些,它和前面的例子一樣會(huì)左右滑動(dòng)麻惶,并且當(dāng)改變選中和未選中的狀態(tài)時(shí)馍刮,滑塊滑動(dòng)到另一側(cè)并且在原位置顯示對(duì)應(yīng)的文本。

首先窃蹋,我們寫HTML代碼卡啰,這和前面是相同的。

<section>
  <!-- Checbox Three -->
  <h3>Checkbox Three</h3>
    <div class="checkboxThree">
        <input type="checkbox" value="1" id="checkboxThreeInput" name="" />
        <label for="checkboxThreeInput"></label>
    </div>
</section>

然后脐彩,我們用相同的方式把div作為滑塊碎乃,下面的代碼會(huì)創(chuàng)建一個(gè)黑色圓角的條帶,我們可以把滑塊和文本放到里面惠奸。

/**
 * Checkbox Three
 */
.checkboxThree {
    width: 120px;
    height: 40px;
    background: #333;
    margin: 20px 60px;
 
    border-radius: 50px;
    position: relative;
}

當(dāng)滑塊處于未選中狀態(tài)時(shí)梅誓,滑塊會(huì)在左側(cè),并且右邊顯示”O(jiān)FF”佛南,當(dāng)點(diǎn)擊的時(shí)候梗掰,滑塊移動(dòng)到右側(cè),左側(cè)顯示”O(jiān)N”嗅回。
但是元素?cái)?shù)量不足以讓我們實(shí)現(xiàn)這些功能及穗,所以我們要用:before和:after兩個(gè)偽類創(chuàng)建兩個(gè)元素,分別放置”O(jiān)N”和”O(jiān)FF”绵载。

/**
 * Create the text for the On position
 */
.checkboxThree:before {
    content: 'On';
    position: absolute;
    top: 12px;
    left: 13px;
    height: 2px;
    color: #26ca28;
    font-size: 16px;
}
/**
 * Create the label for the off position
 */
.checkboxThree:after {
    content: 'Off';
    position: absolute;
    top: 12px;
    left: 84px;
    height: 2px;
    color: #ddd;
    font-size: 16px;
}

和前面一樣埂陆,我們來添加滑塊的樣式苛白,當(dāng)被點(diǎn)擊時(shí)它會(huì)移動(dòng)到另一側(cè),并且改變顏色焚虱。

/**
 * Create the pill to click
 */
.checkboxThree label {
    display: block;
    width: 52px;
    height: 22px;
    border-radius: 50px;
 
    -webkit-transition: all .5s ease;
    -moz-transition: all .5s ease;
    -o-transition: all .5s ease;
    -ms-transition: all .5s ease;
    transition: all .5s ease;
    cursor: pointer;
    position: absolute;
    top: 9px;
    z-index: 1;
    left: 12px;
    background: #ddd;
}
 
/**
 * Create the checkbox event for the label
 */
.checkboxThree input[type=checkbox]:checked + label {
    left: 60px;
    background: #26ca28;
}

樣式四

checkbox-four

在這個(gè)樣式中购裙,我們會(huì)創(chuàng)建兩個(gè)圓形,當(dāng)點(diǎn)擊時(shí)改變里面的圓形的顏色表示選中與未選中的狀態(tài)鹃栽。
和前面一樣的HTML代碼躏率。

<section>
  <!-- Checbox Four -->
  <h3>Checkbox Four</h3>
    <div class="checkboxFour">
        <input type="checkbox" value="1" id="checkboxFourInput" name="" />
        <label for="checkboxFourInput"></label>
    </div>
</section>

接下來我們要為checkbox創(chuàng)建外面的圓形,使用CSS的border-radius屬性民鼓,并且設(shè)置為100%就可以創(chuàng)建一個(gè)正圓形薇芝。

/**
 * Checkbox Four
 */
.checkboxFour {
    width: 40px;
    height: 40px;
    background: #ddd;
    margin: 20px 90px;
 
    border-radius: 100%;
    position: relative;
    -webkit-box-shadow: 0px 1px 3px rgba(0,0,0,0.5);
    -moz-box-shadow: 0px 1px 3px rgba(0,0,0,0.5);
    box-shadow: 0px 1px 3px rgba(0,0,0,0.5);
}

然后我們用label元素來創(chuàng)建一個(gè)小一點(diǎn)的圓形,它會(huì)根據(jù)checkbox狀態(tài)來改變顏色丰嘉。

/**
 * Create the checkbox button
 */
.checkboxFour label {
    display: block;
    width: 30px;
    height: 30px;
    border-radius: 100px;
 
    -webkit-transition: all .5s ease;
    -moz-transition: all .5s ease;
    -o-transition: all .5s ease;
    -ms-transition: all .5s ease;
    transition: all .5s ease;
    cursor: pointer;
    position: absolute;
    top: 5px;
    left: 5px;
    z-index: 1;
 
    background: #333;
 
    -webkit-box-shadow:inset 0px 1px 3px rgba(0,0,0,0.5);
    -moz-box-shadow:inset 0px 1px 3px rgba(0,0,0,0.5);
    box-shadow:inset 0px 1px 3px rgba(0,0,0,0.5);
}

當(dāng)復(fù)選框被選中的時(shí)候夯到,我們要改變內(nèi)圈的背景顏色來表示選中狀態(tài)。

/**
 * Create the checked state
 */
.checkboxFour input[type=checkbox]:checked + label {
    background: #26ca28;
}

樣式五

checkbox-five

這個(gè)復(fù)選框的樣式有些不同供嚎,它看起來只是比瀏覽器默認(rèn)的checkbox樣式稍微好了些黄娘,但是不同的是我們可以根據(jù)自己的需要來定義它的樣式了。
首先還是一樣的HTML代碼

<section>
  <!-- Checbox Five -->
  <h3>Checkbox Five</h3>
    <div class="checkboxFive">
        <input type="checkbox" value="1" id="checkboxFiveInput" name="" />
        <label for="checkboxFiveInput"></label>
    </div>
</section>

在前面的例子中克滴,我們把div作為checkbox的滑動(dòng)條帶或者外部的圓圈逼争,但是這一次我們不需要了,可以使用div元素來設(shè)置復(fù)選框的區(qū)域劝赔。

/**
 * Checkbox Five
 */
.checkboxFive {
    width: 25px;
    margin: 20px 100px;
    position: relative;
}

label標(biāo)簽用于Click事件和我們要定義的復(fù)選框的方框樣式誓焦。

/**
 * Create the box for the checkbox
 */
.checkboxFive label {
    cursor: pointer;
    position: absolute;
    width: 25px;
    height: 25px;
    top: 0;
    left: 0;
    background: #eee;
    border:1px solid #ddd;
}

接下來,我們要?jiǎng)?chuàng)建方框中的對(duì)勾着帽,對(duì)于這一點(diǎn)杂伟,我們可以使用:after偽類創(chuàng)建一個(gè)新的元素,為了實(shí)現(xiàn)這個(gè)樣式仍翰,我們可以創(chuàng)建一個(gè)5px x 9px的長(zhǎng)方形并給他加上邊框赫粥。這時(shí)候我們?nèi)サ羯厦婧陀疫叺倪吙蛑螅鼤?huì)看起來像一個(gè)字母L予借。然后我們可以使用CSS的transform屬性讓它旋轉(zhuǎn)一下越平,這樣看起來就像是一個(gè)對(duì)勾。

/**
 * Display the tick inside the checkbox
 */
.checkboxFive label:after {
    opacity: 0.2;
    content: '';
    position: absolute;
    width: 9px;
    height: 5px;
    background: transparent;
    top: 6px;
    left: 7px;
    border: 3px solid #333;
    border-top: none;
    border-right: none;
 
    -webkit-transform: rotate(-45deg);
    -moz-transform: rotate(-45deg);
    -o-transform: rotate(-45deg);
    -ms-transform: rotate(-45deg);
    transform: rotate(-45deg);
}

在上面的CSS中灵迫,我們已經(jīng)設(shè)置它的透明度為0.2秦叛,所以你會(huì)看到的復(fù)選框有一個(gè)半透明的對(duì)勾。你可以在懸停的時(shí)候加深一點(diǎn)瀑粥,在選中時(shí)挣跋,可以把設(shè)置為不透明。

/**
 * Create the hover event of the tick
 */
.checkboxFive label:hover::after {
    opacity: 0.5;
}
 
/**
 * Create the checkbox state for the tick
 */
.checkboxFive input[type=checkbox]:checked + label:after {
    opacity: 1;
}

這將會(huì)為你創(chuàng)建全新的checkbox復(fù)選框樣式狞换。
觀看演示避咆,看看這些復(fù)選框是如何工作的舟肉。

演示地址

本文轉(zhuǎn)發(fā)自 朽木 技術(shù)隨筆

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市牌借,隨后出現(xiàn)的幾起案子度气,更是在濱河造成了極大的恐慌,老刑警劉巖膨报,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異适荣,居然都是意外死亡现柠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門弛矛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來够吩,“玉大人,你說我怎么就攤上這事丈氓≈苎” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵万俗,是天一觀的道長(zhǎng)湾笛。 經(jīng)常有香客問我,道長(zhǎng)闰歪,這世上最難降的妖魔是什么嚎研? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮库倘,結(jié)果婚禮上临扮,老公的妹妹穿的比我還像新娘。我一直安慰自己教翩,他們只是感情好杆勇,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著饱亿,像睡著了一般蚜退。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上路捧,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天关霸,我揣著相機(jī)與錄音,去河邊找鬼杰扫。 笑死队寇,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的章姓。 我是一名探鬼主播佳遣,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼识埋,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了零渐?” 一聲冷哼從身側(cè)響起窒舟,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诵盼,沒想到半個(gè)月后惠豺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡风宁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年洁墙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片戒财。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡热监,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出饮寞,到底是詐尸還是另有隱情孝扛,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布幽崩,位于F島的核電站苦始,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏歉铝。R本人自食惡果不足惜盈简,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望太示。 院中可真熱鬧柠贤,春花似錦、人聲如沸类缤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽餐弱。三九已至宴霸,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間膏蚓,已是汗流浹背瓢谢。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驮瞧,地道東北人氓扛。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親采郎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子千所,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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