本文章的內(nèi)容來自極客學(xué)院 HTML5
系列課程竖般,有興趣的同學(xué)可以去觀看視屏,個(gè)人感覺極客學(xué)院的視屏質(zhì)量還是比較高的冒嫡。好了,廢話不多說了四苇,下面來介紹主要內(nèi)容孝凌。
Action one
首先,來看一下我們的第一個(gè)特效
注意月腋,這個(gè)地方的黃點(diǎn)不是我們特效的一部分蟀架,這個(gè)黃點(diǎn)之所以存在是我使用的屏幕錄制軟件自帶的瓣赂。可以很清楚的看到這個(gè)特效就是當(dāng)我們點(diǎn)擊的時(shí)候片拍,黑點(diǎn)會(huì)以一種縮放的動(dòng)畫顯示出來煌集,下面來看看具體如何實(shí)現(xiàn)。
HTML
代碼
<div class="radio-1">
<input type="radio" name="radio-1" id="radio-1-1" checked="checked">
<label for="radio-1-1"></label>
<input type="radio" name="radio-1" id="radio-1-2">
<label for="radio-1-2"></label>
<input type="radio" name="radio-1" id="radio-1-3">
<label for="radio-1-3"></label>
</div>
這里捌省,我們指定 input
標(biāo)簽的 type
值為 radio
苫纤,并且一下所有的 radio
的 name
值都相同,這樣才可以實(shí)現(xiàn)單選效果纲缓。對(duì)于這里的 label
中的 for
屬性卷拘,為什么這么設(shè)置一開始我也不明白,后來搜索了一下這個(gè)屬性的定義祝高,反正大概的意思就是說栗弟,只要設(shè)置了這個(gè)屬性,當(dāng)我們點(diǎn)擊label
元素的時(shí)候工闺,瀏覽器會(huì)自動(dòng)把焦點(diǎn)轉(zhuǎn)移到 radio
上去乍赫。下面用 CSS
對(duì)HTML
設(shè)置效果。
.radio-1 {
width: 900px;
padding: 3% 0%;
margin: 10px auto;
background-color: darkseagreen;
text-align: center;
}
.radio-1 label {
display: inline-block;
position: relative;
width: 28px;
height: 28px;
border: 1px solid #cccccc;
border-radius: 100%;
cursor: pointer;
background-color: #ffffff;
margin-right: 10px;
}
這里我們首先看一下對(duì) label
元素的設(shè)定斤寂,其中大部分屬性我都在以前的文章中介紹過了耿焊,唯一一個(gè)陌生的屬性就是 cursor
,這個(gè)屬性是設(shè)定鼠標(biāo)樣式的遍搞,設(shè)置成 pointer
之后罗侯,當(dāng)我們的鼠標(biāo)放到 label
元素上時(shí),鼠標(biāo)樣式就變成了一只手(在我電腦上是這樣)溪猿。好了钩杰,下面繼續(xù)來看
.radio-1 label:after {
content: "";
position: absolute;
width: 20px;
height: 20px;
top: 4px;
left: 4px;
background-color: #666;
border-radius: 50%;
transform: scale(0);
transition: transform .2s ease-out;
}
這里我們用到了 after
選擇器,為什么設(shè)置這個(gè)屬性诊县?就是為了設(shè)置如上圖所示的小黑點(diǎn)讲弄。首先我們?cè)O(shè)置 content
屬性為空,意思就是我們不需要填充任何內(nèi)容依痊,因?yàn)槲覀冎皇窍朐O(shè)置背景色為黑色避除,僅此而已。還有胸嘁,剛開始的時(shí)候我們?cè)O(shè)置 transform
的 scale
值為 0
瓶摆,其達(dá)到的效果就是將小黑點(diǎn)隱藏。
.radio-1 [type="radio"]:checked + label {
background-color: #eeeeee;
transition: background-color .2s ease-in;
}
.radio-1 [type="radio"]:checked + label:after {
transform: scale(1);
transition: transform .2s ease-in;
}
注意這里使用了 +
符號(hào)性宏,是什么意思呢群井?它的學(xué)名叫做 相鄰?fù)x擇器
,意思就是選擇緊接在另一個(gè)元素后的元素毫胜,而且二者有相同的父元素书斜,在這里的意思就是選中在radio
后出現(xiàn)的 label
诬辈,有人要問了,這么設(shè)置干嘛荐吉,直接設(shè)置 label
就是了焙糟。想象一下,在一個(gè) 非常龐大的系統(tǒng)中样屠,我們可能多次使用到 label
元素酬荞,為了避免混淆,這樣設(shè)置將更加準(zhǔn)確瞧哟。這里我們看到了 transition
屬性,這個(gè)屬性是用于設(shè)置過渡效果的枪向。最后勤揩,將我們的 radio
隱藏掉,就大功告成了秘蛔。
.radio-1 [type="radio"]{
display: none;
}
Action two
這是我們的第二個(gè)特效
其實(shí)看到這個(gè)動(dòng)畫的第一感覺就是陨亡,和上一個(gè)一模一樣,除了將 transform
屬性設(shè)置成 rotate
深员,下面我就不再解釋了负蠕,只要你結(jié)合上一個(gè)例子,就可以很容易做出這么一個(gè)效果倦畅,我們直接上代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Radio</title>
<style>
.radio-2 {
width: 900px;
padding: 3% 0;
margin: 50px auto;
background-color: darkseagreen;
text-align: center;
}
.radio-2 label {
display: inline-block;
width: 28px;
height: 28px;
overflow: hidden;
border: 1px solid #eeeeee;
border-radius: 100%;
margin-right: 10px;
background-color: #ffffff;
position: relative;
cursor: pointer;
}
.radio-2 label:after {
content: "";
position: absolute;
top: 4px;
left: 4px;
width: 20px;
height: 20px;
background-color: #666666;
border-radius: 50%;
transform: rotate(-180deg);
transform-origin: -2px 50%;
transition: transform .2s ease-in;
}
.radio-2 [type="radio"] {
display: none;
}
.radio-2 [type="radio"]:checked + label:after{
transform: rotate(0deg);
transition: transform .2s ease-out;
}
</style>
</head>
<body>
<div class="radio-2">
<input type="radio" name="radio-2" id="radio-2-1" checked="checked">
<label for="radio-2-1"></label>
<input type="radio" name="radio-2" id="radio-2-2">
<label for="radio-2-2"></label>
<input type="radio" name="radio-2" id="radio-2-3">
<label for="radio-2-3"></label>
</div>
</body>
</html>