今天开始学习CSS效果,记录一下,成品如下

实现的思路很简单,使用到了::before::after两个伪元素,默认两个伪元素的width0height与父元素的高度相同,当鼠标放上去时,伪元素的width变为100%,注意到两个伪元素变化的方向不一样,因为::before被设置为了

top: 0;
left: 0;

::after被设置为

bottom: 0;
right: 0;

talk is cheap, show me the code,直接上代码吧

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
html,
body {
width: 100%;
height: 100%;
background-color: #fff;
}

a {
font-size: 50px;
display: block;
width: 300px;
height: 100px;
line-height: 100px;
margin: auto;
text-decoration: none;
text-align: center;
text-transform: uppercase;
color: #666;
border: 1px solid black;
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
font-family: Arial, Helvetica, sans-serif;
transition: all 0.5s;
z-index: 1;
}

a::before,
a::after {
content: "";
display: block;
width: 0;
height: 100px;
position: absolute;
background: #333;
transition: all 0.5s;
z-index: -1;
}

a::before {
top: 0;
left: 0;
}

a::after {
bottom: 0;
right: 0;
}

a:hover::before,
a:hover::after {
width: 100%;
}
</style>
</head>
<body>
<a href="#">Move</a>
</body>
</html>

上面的代码不难理解,就一个地方需要注意的是,在a标签中设置了

margin: auto;

position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;

这样的写法,这样做的目的是使得a标签在body中居中显示,因为设置了定位的属性

top: 0;
left: 0;
bottom: 0;
right: 0;

四个都为0,要达到这样的效果,设置marginauto会为a元素四周充满外边距,如下

这样就可以到居中的效果。