一、思路:
將偽元素:before和:after定位到元素底部中間,設置寬度從0變成100%達到目的。
二、實現:
1、首先定義一個塊狀元素(行內元素沒有寬高)並修改樣式為一個背景色為淺灰色的矩形,設置相對定位。
html代碼
<div id="underline"></div>
css樣式
#underline{
width: 200px;
height: 50px;
background: #ddd;
margin: 20px;
position: relative;
}
2、設置:before和:after兩個偽元素,將其設置為背景色為藍色(也就是下划線的顏色),利用絕對定位將兩個元素固定到#underline底部中間位置。
css樣式
#underline:before,
#underline:after{
content: "";/*單引號雙引號都可以,但必須是英文*/
width: 0;
height: 3px; /*下划線高度*/
background: blue; /*下划線顏色*/
position: absolute;
top: 100%;
left: 50%;
transition: all .8s ; /*css動畫效果,0.8秒完成*/
}
3、設置鼠標移入效果。
css樣式
#underline:hover:before{/*動畫效果是從中間向左延伸至50%的寬度*/
left:0%;
width:50%;
}
#underline:hover:after{/*動畫效果是從中間向右延伸至50%的寬度*/
left: 50%; /*這句多余,主要是為了對照*/
width: 50%;
}
三:優化
1、雖然目的達到了,但是用了兩個偽元素,一個向左延伸50%,一個向右延伸50%,只用一個延伸至100%能否達到目的呢?
css代碼
#underline:after{
content: "";
width: 0;
height: 5px;
background: blue;
position: absolute;
top: 100%;
left: 50%;
transition: all .8s;
}
#underline:hover:after{/*原理是left:50%變成0%的同時,寬度從0%變成100%*/
left: 0%;
width: 100%;
}
2、只定義:after偽元素,將其從距離左邊50%寬度為0的同時改變成距離左邊0%寬度為100%就可以實現,從而達到了精簡代碼的目的,而且還多余出了:before方便進行別的操作。
四、完整代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>鼠標移入下划線展開</title>
<style type="text/css">
#underline{
width: 200px;
height: 50px;
background: #ddd;
margin: 20px;
position: relative;
}
#underline:after{
content: "";
width: 0;
height: 5px;
background: blue;
position: absolute;
top: 100%;
left: 50%;
transition: all .8s;
}
#underline:hover:after{
left: 0%;
width: 100%;
}
</style>
</head>
<body>
<div id="underline"></div>
</body>
</html>
五、兼容性問題
才疏學淺,以后遇到了再補充。
