前言
有了第一小节的经验,我们可以对直接的动画效果做一些升级效果,如果组合:before
、:after
,效果有更酷。
请先看一下效果示例吧:
下面一个一个示例讲解
示例一
<button class="btn-1">按钮一</button>
<style>
button{
position: relative;
width: 100px;
height: 40px;
border: 1px solid #46b0ff;
background: none;
cursor: pointer;
overflow: hidden;
}
button:before,
button:after{
position: absolute;
content: '';
width: 100%;
height: 100%;
z-index: -1;
transition: all .5s;
}
/* 按钮一 */
.btn-1:before{
top: 0;
height: 0;
left: 0;
}
.btn-1:after{
bottom: 0;
height: 0;
left: 0;
background: rgba(70, 176, 255, 1);
}
.btn-1:hover:before, .btn-1:hover:after{
height: 50%;
background: rgba(70, 176, 255, 1);
}
</style>
解析:
1、:before
top为0,:after
bottom为0
2、在绝对定位的作用下,:hover
改变:before
、:after
的高度,:before
就会向下延伸,而:after
就会向上延伸。
3、同时我们是在:hover
时,才赋予:before
、:after
背景色,所以还有背景色过渡效果。
这里我们还可以换成左右合并的样式,小伙伴们可以自行研究。
示例二
<button class="btn-2">按钮二</button>
<style>
...
/* 这里省略上方的公共样式 */
.btn-2:before, .btn-2:after{
width: 0;
height: 0;
border-width: 0 0 0 0;
border-style: solid;
bottom: 0;
}
.btn-2:before{
border-color: transparent transparent transparent #f13f84;
left: 0;
}
.btn-2:after{
border-color: transparent transparent #f13f84 transparent;
right: 0;
}
.btn-2:hover:before {
border-width: 100px 0 0 100px;
}
.btn-2:hover:after {
border-width: 0 0 100px 100px;
}
</style>
解析:
1、:before
、:after
的border
画出2个三角形,且他们的 bottom 为 0,而:before
的left=0,:after
的right=0
请看下方示例:
.triangle{
width: 0;
height: 0;
border-style: solid;
border-color: transparent transparent transparent #f13f84;
border-width: 100px 0 0 100px;
}
2、然后改变border-width
,就会形成向上合并的效果
示例三
<button class="btn-3">按钮三</button>
<style>
...
/* 这里省略上方的公共样式 */
.btn-3:before, .btn-3:after{
width: 0;
height: 0;
border-style: solid;
border-width: 0 0 0 0;
}
.btn-3:before{
border-color: transparent transparent transparent #00b7a3;
bottom: 0;
left: 0;
}
.btn-3:after{
border-color: transparent #00b7a3 transparent transparent;
top: 0;
right: 0;
}
.btn-3:hover:before, .btn-3:hover:after {
border-width: 80px 210px;
}
解析:
1、有了示例二的经验,这里我们稍作变通即可,改变top,bottom,left,right即可
示例四
<button class="btn-4">按钮四</button>
<style>
...
/* 这里省略上方的公共样式 */
.btn-4:before, .btn-4:after{
top: 50%;
width: 20px;
height: 20px;
background: #8865ae;
border-radius: 50%;
}
.btn-4:before{
left: -20px;
transform: translate(-50%, -50%);
}
.btn-4:after{
right: -20px;
transform: translate(50%, -50%);
}
.btn-4:hover:before{
animation: criss-cross-left 0.8s both;
}
.btn-4:hover:after{
animation: criss-cross-right 0.8s both;
}
@keyframes criss-cross-left {
0% {
left: -20px;
}
50% {
left: 50%;
width: 20px;
height: 20px;
}
100% {
left: 50%;
width: 150px;
height: 150px;
}
}
@keyframes criss-cross-right {
0% {
right: -20px;
}
50% {
right: 50%;
width: 20px;
height: 20px;
}
100% {
right: 50%;
width: 150px;
height: 150px;
}
}
解析:
1、:before
、:after
画出2个圆形,并且垂直居中,开始并不在可视范围,:before
居左,:after
居右
top: 50%;
transform: translateY(-50%);
2、:hover
时,动画前半部分50%前,改变:before
、:after
left和right的大小,使其向中间运动
3、动画后半部分50%后,left和right保持住,同时改变圆形大小,就会看到两颗小球碰撞后展开的效果
示例五
<button class="btn-5">
<span>按钮五</span>
</button>
<style>
...
/* 这里省略上方的公共样式 */
button span:before,
button span:after{
position: absolute;
content: '';
width: 100%;
height: 100%;
z-index: -1;
transition: all .5s;
}
.btn-5:before, .btn-5:after, .btn-5 span:before, .btn-5 span:after{
top: 0;
width: 25px;
height: 0;
background: #1199ff;
}
.btn-5:before {
left: 0;
}
.btn-5:after {
right: 0;
bottom: 0;
top: initial;
}
.btn-5 span:before {
left: 25px;
bottom: 0;
top: initial;
}
.btn-5 span:after {
left: 50px;
top: 0;
bottom: initial;
}
.btn-5:hover:before,
.btn-5:hover:after,
.btn-5:hover span:before,
.btn-5:hover span:after {
height: 100%;
}
解析:
1、根据示例一,对其进行拓展,我们添加span元素,并且多出2个伪类,水平布局
2、错落上下位置,:hover
时,改变高度height即可形成动画效果
示例六
<button class="btn-6">
<span>按钮六</span>
</button>
<style>
...
/* 这里省略上方的公共样式 */
.btn-6:before,
.btn-6:after,
.btn-6 span:before,
.btn-6 span:after{
width: 0;
height: 0;
background: #f13f84;
}
.btn-6:before {
left: 0;
top: 0;
}
.btn-6:after {
right: 0;
top: 0;
}
.btn-6 span:before {
left: 0;
bottom: 0;
}
.btn-6 span:after {
right: 0;
bottom: 0;
}
.btn-6:hover:before,
.btn-6:hover:after,
.btn-6:hover span:before,
.btn-6:hover span:after {
height: 50%;
width: 50%;
}
解析:
1、根据示例五,我们对4个伪类,重新布局,他们的开始位置坐落button四只角
2、:hover
时,改变宽高,皆为50%,即可形成动画
示例七
<button class="btn-7">
<span>按钮七</span>
</button>
<style>
...
/* 这里省略上方的公共样式 */
.btn-7:before,
.btn-7:after{
width: 0;
height: 0;
border-style: solid;
border-width: 0 0 0 0;
}
.btn-7:before{
border-color: transparent transparent transparent #3da83d;
bottom: 0;
left: 0;
}
.btn-7:after{
border-color: transparent #3da83d transparent transparent;
top: 0;
right: 0;
}
.btn-7 span:before, .btn-7 span:after {
content: '';
width: 0;
height: 0;
border-style: solid;
border-width: 0 0 0 0;
}
.btn-7 span:before {
border-color: transparent transparent #3da83d transparent;
right: 0;
bottom: 0;
}
.btn-7 span:after {
border-color: #3da83d transparent transparent transparent;
top: 0;
left: 0;
}
.btn-7:hover:before {
border-width: 100px 0 0 100px;
}
.btn-7:hover:after {
border-width: 0 100px 100px 0;
}
.btn-7:hover span:before {
border-width: 0 0 100px 100px;
}
.btn-7:hover span:after {
border-width: 100px 100px 0 0;
}
解析:
1、根据示例二、五,4个伪类都是三角形,并坐落button四只角
2、:hover
时,改变border-width
即可形成动画效果
总结
通过本小节,你学到了什么?
1、伪类元素运用加深滚固
2、元素三角形绘制
3、:hover
鼠标移入动画滚固
小伙伴们,有问题可以评论区留言哦,欢迎大家点评。
原文地址:http://www.javanx.cn/20191225/buttonhover-2/
来源:oschina
链接:https://my.oschina.net/javanx/blog/3157802