純CSS設置Checkbox復選框控件的樣式

26

天津11选5走势图分析 www.lixcgb.com.cn Checkbox復選框是一個可能每一個網站都在使用的HTML元素,但大多數人并不給它們設置樣式,所以在絕大多數網站它們看起來是一樣的。為什么不把你的網站中的Checkbox設置一個與眾不同的樣式,甚至可以讓它看起來一點也不像復選框。

在本教程中,我們將創建5個不同的選擇框,你可以在你的網站上使用它。

css-style-checkboxes

查看演示,可以看到我們將要創建的復選框樣式。

演示地址

首先,需要添加一段CSS隱藏所有的Checkbox復選框,下面我們會改變它的外觀。要做到點需要添加一段代碼到你的CSS文件中。

/**
 * 隱藏默認的checkbox
 */
input[type=checkbox] {
	visibility: hidden;
}

隱藏掉所有的Checkbox復選框后,我們需要添加一個label HTML元素,我們都知道,當點擊的有for屬性的label標簽時,對應的Checkbox復選框會被選中。這意味著,我們可以通過label的點擊事件來處理我們的Checkbox復選框。

樣式一

checkbox-one

此復選框風格就像一個解鎖滑塊,滑塊選中和未選中狀態會顯示在的不同位置。當單擊滑塊按鈕(label標簽),將會選中復選框,然后滑塊移動到ON位置。

我們開始創建復選框區的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>

因為這個樣式的復選框,一個label不足以完成任務,我們用一個DIV元素包含checkbox,我們需要使用它們來做黑色條帶和圓角。

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

現在,我們可以把label作為條帶上的滑塊,我們希望按鈕效果是從條帶的一側移動到另一側,我們可以添加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;
}

現在這個滑塊在選中(關閉)位置,當我們選中復選框,我們希望有一個反應發生,所以我們可以移動滑塊到另一端。我們需要知道,判斷復選框被選中,如果是則改變label元素的left屬性。

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

這就是你需要的第一個Checkbox復選框的CSS。

樣式二

checkbox-two

此復選框風格像樣式一樣,但不同的是,這個滑塊按鈕會改變顏色。當您單擊滑塊按鈕,它移動到條帶的另一邊,并改變按鈕的顏色。

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>

這個DIV會變成比樣式一大一些的條帶,label依然是作為滑塊,使用下面的CSS來定義它。

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

這個樣式中間有一個黑色的條,滑塊會沿著它左右滑動,但是DIV元素已經使用了,所以我們需要用:before偽類創建一個新的元素。

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

和樣式一一樣,接下來我們為label寫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;
}

我要實現和樣式一差不多的選中狀態,當選中時改變label的left和background屬性。

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

樣式三

checkbox-three

這個復選框的樣式比樣式二更復雜一些,它和前面的例子一樣會左右滑動,并且當改變選中和未選中的狀態時,滑塊滑動到另一側并且在原位置顯示對應的文本。

首先,我們寫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作為滑塊,下面的代碼會創建一個黑色圓角的條帶,我們可以把滑塊和文本放到里面。

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

當滑塊處于未選中狀態時,滑塊會在左側,并且右邊顯示”OFF”,當點擊的時候,滑塊移動到右側,左側顯示”ON”。
但是元素數量不足以讓我們實現這些功能,所以我們要用:before:after兩個偽類創建兩個元素,分別放置”ON”和”OFF”。

/**
 * 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;
}

和前面一樣,我們來添加滑塊的樣式,當被點擊時它會移動到另一側,并且改變顏色。

/**
 * 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

在這個樣式中,我們會創建兩個圓形,當點擊時改變里面的圓形的顏色表示選中與未選中的狀態。
和前面一樣的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創建外面的圓形,使用CSS的border-radius屬性,并且設置為100%就可以創建一個正圓形。

/**
 * 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元素來創建一個小一點的圓形,它會根據checkbox狀態來改變顏色。

/**
 * 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);
}

當復選框被選中的時候,我們要改變內圈的背景顏色來表示選中狀態。

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

樣式五

checkbox-five

這個復選框的樣式有些不同,它看起來只是比瀏覽器默認的checkbox樣式稍微好了些,但是不同的是我們可以根據自己的需要來定義它的樣式了。
首先還是一樣的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的滑動條帶或者外部的圓圈,但是這一次我們不需要了,可以使用div元素來設置復選框的區域。

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

label標簽用于Click事件和我們要定義的復選框的方框樣式。

/**
 * 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;
}

接下來,我們要創建方框中的對勾,對于這一點,我們可以使用:after偽類創建一個新的元素,為了實現這個樣式,我們可以創建一個5px x 9px的長方形并給他加上邊框。這時候我們去掉上面和右邊的邊框之后,它會看起來像一個字母L。然后我們可以使用CSS的transform屬性讓它旋轉一下,這樣看起來就像是一個對勾。

/**
 * 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中,我們已經設置它的透明度為0.2,所以你會看到的復選框有一個半透明的對勾。你可以在懸停的時候加深一點,在選中時,可以把設置為不透明。

/**
 * 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;
}

這將會為你創建全新的checkbox復選框樣式。
觀看演示,看看這些復選框是如何工作的。

演示地址

本文翻譯自 How To Style A Checkbox With CSS
自定義select樣式 Selectyze jquery plugin – Skin your own selects lists with jQuery & CSS
拓展閱讀 CSS3 Checkbox Styles

共 26 條評論

  1. 回復

    超牛逼

  2. 回復

    checkboxFour input忘記寫 display:none;了!

  3. 回復

    文字無法與復選框同行,怎么解決,求教??!

  4. 回復

    如何可以讓這些按鈕默認是選中狀態呢 博主求告知下

    • 回復

      直接在input中加checked就會默認選中了

  5. 回復

    東西蠻好用的,改了改,達到了想要的效果,但是公司任務要求兼容到IE8,本人初入門,想問下解決方案,是javascript還是單獨編寫IE8的 css樣式,或者其他的什么解決方案,求教

  6. 回復

    這個樣式只對第一個有效果,后面的都沒有效果為什么。求幫助

    • 回復

      我也是相同的問題,這種效果只能針對一個checkbox,但是checkbox一般都不止一個,怎樣達到效果呢?求幫助

  7. 回復

    為什么復選框用了只有第一個可以點擊,其他的點擊都只對第一個起作用????

    • 回復

      因為你沒有改ID

      • 回復

        id? 難道每個復制的都要一個新的ID嗎

        • 回復

          .unit-button {
          float: left;
          width: 21px;
          height: 21px;
          position: relative;
          display: inline-block;
          input[type=checkbox],
          input[type=radio] {
          // visibility: hidden;
          opacity: 0.1;// 核心
          }
          label {
          display: block;
          width: 16px;
          height: 16px;
          -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: 0;
          z-index: -1; // 核心
          background: url(../../img/commme/checkbox.png) no-repeat;
          background-size: cover;
          }
          input[type=checkbox]:checked+label,
          input[type=radio]:checked+label {
          background: url(../../img/commme/checkbox_active.png) no-repeat;
          background-size: cover;
          }
          }

          這段代碼可以實現你的,不過具體你要修改下,你的問題應該也是我遇到的,吧label設置z-index: -1;然后把控件設置成opacity,這樣復選框 單選框都可以點擊,不然單選框是有問題的!

          • 這個會變回原來的樣式啊

          • 我改了還是這樣 ,感覺好懵

  8. 回復

    很好用,但是ie7和ie8都用不了啊,如果這兩個也能用就更好了

  9. 回復

    很有用,點個贊

  10. 回復

    很有用。謝謝

  11. 回復

    IE8不支持

  12. 回復

    謝謝博主了

  13. 回復

    (☆_☆)看著眼熟,果然是wordpress

  14. 回復

    無意中發現,以后會用到,謝謝分享

  15. 回復

    看了下,很有用,點個贊!

  16. 回復

    現在朽木開始搞學術了?哈哈

  17. 回復

    學習一下,看到博主好多php技術文章,以后要常來看看了,我現在的站也是用php架構的

  18. 回復

    博主的qq多少呢,有問題請教

發表評論

您的郵箱不會公開,當您的評論有新的回復時,會通過您填寫的郵箱向您發送評論內容。 必填字段 *

為何看不到我發布的評論?

正在提交, 請稍候...