在之前的一篇文章《默認的input標簽太丑?教你如何使用CSS寫出帶動畫的樣式》中有講過如何實現一個漂亮的input標簽樣式。
既然已經折騰了,今天這篇文章我們就繼續折騰,看看如何通過CSS3實現一個帶動畫的checkbox樣式?
CSS3
感興趣的可以自行去github上看源文件,地址如下:
https://github.com/zhouxiongking/article-pages/blob/master/articles/beautifulCheckbox/beautifulCheckbox.html
checkbox作為多選框,在form表單中的使用頻率是非常高的,例如問卷調查的多選題,個人興趣愛好的選擇時都會用到多選框。
而瀏覽器默認的checkbox樣式都很丑,看起來就是一個小小的方框,雖然Bootstrap已經有好看的checkbox樣式,但是它不支持動畫,在交互上仍然存在缺陷,所以我們就試圖自己寫出一個帶動畫的checkbox效果。
首先我們來看看checkbox的動態效果圖(中間的黑色圓圈實際為錄制GIF圖時產生的,請忽略)
checkbox效果圖
接下來我們具體分析下頁面的元素組成,主要包括以下部分。
默認的checkbox標簽,將其display設置為none,隱藏起來。
label標簽,表現為實際顯示的動態選中和未選中效果。
我們需要達到的效果是,在未選中checkbox時,默認為灰色的邊框,白色的背景;在選中checkbox時,改變背景色,出現白色的打勾動畫效果。
在這部分,我們來具體分析下頁面的代碼組成。
HTML
首先是頁面的HTML部分代碼,如上一部分所示,頁面其實只有兩個元素組成,這兩個元素放在一個容器下,故HTML代碼如下所示。
HTML部分代碼
CSS
我們來看看CSS部分的代碼,因為CSS部分代碼比較多,我們一一來分析。
首先是外層container的樣式,同時對頁面的html和body也做一些簡單處理,代碼如下所示。
container樣式
其次是checkbox標簽的樣式,因為原生的checkbox除了在傳輸數據時有用處,在頁面呈現上并沒有作用,故設置display:none;將其隱藏。
checkbox樣式
然后是最重要的label部分,在未點擊之前label呈現一個正方形,有基本的樣式。
基本樣式
在點擊方形框后,出現的對勾是通過偽元素::before和::after實現的,對勾實際為兩個矩形拼接而成,左側的矩形用::after元素表示,右側的矩形用::before元素表示。兩者的通用樣式通過如下代碼實現。
偽元素實現
然后是針對::before和::after所特有的樣式,因為兩者的位置和旋轉的角度不同,代碼也會出現差異。
特有樣式
然后是定義的打鉤的動畫效果,這里使用keyframes關鍵字定義,考慮到瀏覽器兼容性,定義的動畫具有不同的前綴。定義的動畫也包括兩部分,首先是右側的矩形動畫效果。
右側矩形動畫效果
然后是左側矩形的動畫效果,同樣考慮到瀏覽器的兼容性,樣式代碼如下。
左側矩形動畫
至此,所有代碼都已講解完畢,如果運行之后就會看到文章開始的動畫效果。
本篇文章主要講的是如何使用自定義的動畫完成checkbox效果,感興趣的可以直接去github上看源文件代碼,后續會寫一個跟開關switch有關的文章,敬請期待~
在之前的一篇文章《默認的input標簽太丑?教你如何使用CSS寫出帶動畫的樣式》中有講過如何實現一個漂亮的input標簽樣式。
既然已經折騰了,今天這篇文章我們就繼續折騰,看看如何通過CSS3實現一個帶動畫的checkbox樣式?
CSS3
感興趣的可以自行去github上看源文件,地址如下:
https://github.com/zhouxiongking/article-pages/blob/master/articles/beautifulCheckbox/beautifulCheckbox.html
checkbox作為多選框,在form表單中的使用頻率是非常高的,例如問卷調查的多選題,個人興趣愛好的選擇時都會用到多選框。
而瀏覽器默認的checkbox樣式都很丑,看起來就是一個小小的方框,雖然Bootstrap已經有好看的checkbox樣式,但是它不支持動畫,在交互上仍然存在缺陷,所以我們就試圖自己寫出一個帶動畫的checkbox效果。
首先我們來看看checkbox的動態效果圖(中間的黑色圓圈實際為錄制GIF圖時產生的,請忽略)
checkbox效果圖
接下來我們具體分析下頁面的元素組成,主要包括以下部分。
默認的checkbox標簽,將其display設置為none,隱藏起來。
label標簽,表現為實際顯示的動態選中和未選中效果。
我們需要達到的效果是,在未選中checkbox時,默認為灰色的邊框,白色的背景;在選中checkbox時,改變背景色,出現白色的打勾動畫效果。
在這部分,我們來具體分析下頁面的代碼組成。
HTML
首先是頁面的HTML部分代碼,如上一部分所示,頁面其實只有兩個元素組成,這兩個元素放在一個容器下,故HTML代碼如下所示。
HTML部分代碼
CSS
我們來看看CSS部分的代碼,因為CSS部分代碼比較多,我們一一來分析。
首先是外層container的樣式,同時對頁面的html和body也做一些簡單處理,代碼如下所示。
container樣式
其次是checkbox標簽的樣式,因為原生的checkbox除了在傳輸數據時有用處,在頁面呈現上并沒有作用,故設置display:none;將其隱藏。
checkbox樣式
然后是最重要的label部分,在未點擊之前label呈現一個正方形,有基本的樣式。
基本樣式
在點擊方形框后,出現的對勾是通過偽元素::before和::after實現的,對勾實際為兩個矩形拼接而成,左側的矩形用::after元素表示,右側的矩形用::before元素表示。兩者的通用樣式通過如下代碼實現。
偽元素實現
然后是針對::before和::after所特有的樣式,因為兩者的位置和旋轉的角度不同,代碼也會出現差異。
特有樣式
然后是定義的打鉤的動畫效果,這里使用keyframes關鍵字定義,考慮到瀏覽器兼容性,定義的動畫具有不同的前綴。定義的動畫也包括兩部分,首先是右側的矩形動畫效果。
右側矩形動畫效果
然后是左側矩形的動畫效果,同樣考慮到瀏覽器的兼容性,樣式代碼如下。
左側矩形動畫
至此,所有代碼都已講解完畢,如果運行之后就會看到文章開始的動畫效果。
本篇文章主要講的是如何使用自定義的動畫完成checkbox效果,感興趣的可以直接去github上看源文件代碼,后續會寫一個跟開關switch有關的文章,敬請期待~
果您覺得該文章對您有幫助,讓更多人受用,請關注“鍵盤碼農”,轉發該文章。謝謝您的支持!
今天跟大家寫了一份js的聯動全選的源碼,代碼少,清晰易懂。
效果是這樣的:
點擊全選下面的就會被全部全選,或者下面的被一一選擇,全選按鈕也會被選中。運用復選框來實現的聯動全選的功能。
點擊上面的復選框就會被全選
Javascript:聯動全選
當下放的復選框沒有被全選,最上面的全選按鈕未被選中
復選框聯動全選js代碼實現:
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<script type="text/javascript">
window.onload = function ()
{
var oBtn1 = document.getElementById('btn1');
var oBox = document.getElementById('box');
var oInputs = oBox.getElementsByTagName('input');
oBtn1.onclick = function ()
{
if (oBtn1.checked == true) {
for (var i = 0; i < oInputs.length; i++) {
oInputs[i].checked = true;
}
} else {
for (var i = 0; i < oInputs.length; i++) {
oInputs[i].checked = false;
}
}
}
//點擊每一個input框
for (var i = 0; i < oInputs.length; i++) {
oInputs[i].onclick = function ()
{
var n = 0;
for (var i = 0; i < oInputs.length; i++) {
if (oInputs[i].checked == true) {
n++;
}
}
if (n == oInputs.length) {
oBtn1.checked = true;
} else {
oBtn1.checked = false;
}
}
}
}
</script>
</head>
<body>
<h1>全選/全不選</h1>
<input type="checkbox" id="btn1">
<div id="box">
<input type="checkbox" name="">
<input type="checkbox" name="">
<input type="checkbox" name="">
<input type="checkbox" name="">
</div>
</body>
</html>
相對比較簡單,對于初學者應該有很好的幫助!請關注鍵盤碼農。后期繼續更新,如有什么看法請在下方評論。第一時間為您解答哦!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。