CSS伪类:CSS3鼠标滑过按钮动画第二节

筅森魡賤 提交于 2020-02-26 13:31:33

前言

有了第一小节的经验,我们可以对直接的动画效果做一些升级效果,如果组合: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:afterborder画出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/

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!