专栏首页web秀CSS伪类:CSS3鼠标滑过按钮动画第二节

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

前言

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

小伙伴们,有问题可以评论区留言哦,欢迎大家点评。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CSS中Flex布局的可伸缩性(Flexibility)

    Flex伸缩布局决定性的特性是让伸缩项目可伸缩,也就是让伸缩项目的宽度或高度自动填充剩余的空间。这可以以flex属性完成。一个伸缩容器会等比地按照各伸缩项目的 ...

    Javanx
  • CSS伪类:CSS3鼠标滑过按钮动画第三节

    前面两章主要是从背景着手,而本章主要是围绕边框动画做效果。并且,本章节(按钮组:有趣的CSS按钮动画,带你进入CSS世界)也就到此结束了,本章结尾会对前3小节进...

    Javanx
  • 纯CSS3绘制腾讯QQ的企鹅Logo

    经常能够看到一些用CSS3绘制的精致图形,它们通常由矩形,圆形,椭圆,三角形,梯形等组合而成。要想绘制我们自己的图形,就要先了解下基本图形的绘制方法了。

    Javanx
  • 走进腾讯,聊运维干货--DevOps技术实践沙龙深圳站

    ? ↙↙↙点击“阅读原文” ,立即报名

    织云平台团队
  • 【免费报名倒计时1天】2019Techo开发者大会—视频及通讯专场等你来

    ? ? ? 点击“阅读原文”立即报名

    腾讯云视频
  • 2019Techo开发者大会—视频通话动手实验室邀您体验

    ? ? ? 点击“阅读原文”立即报名

    腾讯云视频
  • 5G网络即服务(NaaS):5G如何让电信运营商实现网络货币化

    SDNLAB
  • How to use Chrome HAR save HTTP performance

    For performance analysis we would like to archive the detail performance for eac...

    Jerry Wang
  • 网络体系结构

    1.通信协议就是在网络信息传输过程中,数据通信格式的约定,是在网络中规定信息怎样流动的一组规则。它包括控制格式、分时和纠错的有关内容,它的基本功能是对外来信息进...

    用户1173509
  • 如何使用Chrome HAR保存和显示HTTP性能分析结果

    For performance analysis we would like to archive the detail performance for eac...

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券