按钮,对开发者而言,是非常常见的一个功能。前端通常会对按钮加入一些操作交互样式,增加一些用户体验。
比如:hover样式、点击样式、loading样式等。下面我们通过简单示例在学习一下css3动画和css伪类。
<button class="btn-1">按钮一</button> <style> button{ position: relative; width: 100px; height: 40px; border: 1px solid #46b0ff; background: none; cursor: pointer; } button:after{ position: absolute; content: ''; width: 100%; height: 100%; top: 0; left: 0; } .btn-1:after{ opacity: 0; background: #46b0ff; transition: all .3s; z-index: -1; } .btn-1:hover:after{ opacity: 1; } </style>
解析:
1、利用伪类作为鼠标:hover
事件后,按钮的背景,这里用到了相对定位(relative)和绝对定位(absolute)
切记:使用绝对定位的元素,父元素一定要用相对定位,否则元素会一直向上找相对定位的元素,直至根节点。
2、这里用transition
对:hover
事件动画进行描述,0.3s完成动画,改变:after
的透明度。all
是所有行为。
当然,这里我们还有更简单是实现方式,不用类型,直接改变背景也是ok的,请看代码:
<button class="btn-1">按钮一</button> <style> button{ position: relative; width: 100px; height: 40px; border: 1px solid #46b0ff; background: none; cursor: pointer; background: rgba(70, 176, 255, 0); transition: all 1s; } .btn-1:hover{ background: rgba(70, 176, 255, 1); } </style>
ok,我们在示例一的基础上,更进一步,请看示例二
<button class="btn-2">按钮二</button> <style> ... /* 这里省略上方的公共样式 */ .btn-2:after{ width: 0; background: #f13f84; transition: all .3s; z-index: -1; } .btn-2:hover:after{ width: 100%; } </style>
解析:
1、这里和示例一其实类似,不过这里是改变伪类的宽度。
2、以此类推,我们可以改变伪类的高度,就可以看到向下扩展的动画了。
<button class="btn-3">按钮三</button> <style> ... /* 这里省略上方的公共样式 */ .btn-2:after{ width: 0; background: #f13f84; transition: all .3s; z-index: -1; } .btn-2:hover:after{ width: 100%; } </style>
这样就有一个疑问,如何让伪类从右至左,或者从下至上呢?
<button class="btn-4">按钮四</button> <button class="btn-5">按钮五</button> <style> ... /* 这里省略上方的公共样式 */ button:after{ position: absolute; content: ''; width: 100%; height: 100%; top: 0; left: 0; } .btn-4:after{ height: 0; background: #00b7a3; transition: all .3s; z-index: -1; bottom: 0; top: initial } .btn-4:hover:after{ height: 100%; } .btn-5:after{ width: 0; background: #00b7a3; transition: all .3s; z-index: -1; right: 0; left: initial } .btn-5:hover:after{ width: 100%; } </style>
其实也是非常简单,我们改变伪类的初始位置,比如从下至上,那么我们就让元素最开始就在最下方bottom: 0
,然后改变高度,就可以看到效果是从下向上延时了,同理从右至左也是如此。
有没有从中学到呢?
其实还有其他办法可以实现,比如从左至右,我们可以让伪类最开始就100%宽度,但是,left刚刚是按钮的反方向,然后动画让left:0
请看代码:
<button class="btn-2">按钮二</button> <style> ... /* 这里省略上方的公共样式 */ .btn-2:after{ left: -100px; background: #f13f84; transition: all .3s; z-index: -1; } .btn-2:hover:after{ left: 0; }
这样的效果肯定是不尽人意的,鼠标没有指上去时,居然在左边可以看到伪类,其实在button上面添加超出隐藏即可
button{ ... overflow: hidden; }
下面我们对其进行拓展,展示更高阶的示例
<button class="btn-6">按钮六</button> <button class="btn-7">按钮七</button> <style> ... /* 这里省略上方的公共样式 */ .btn-6:after{ width: 0; background: #ff9900; transition: all .3s; z-index: -1; left: 50%; transform: translateX(-50%); } .btn-6:hover:after{ width: 100%; } .btn-7:after{ height: 0; background: #00b7a3; transition: all .3s; z-index: -1; top: 50%; transform: translateY(-50%); } .btn-7:hover:after{ height: 100%; }
解析:
1、这里先让伪类:after
,水平居中或垂直居中
/* 水平居中 */ left: 50%; transform: translateX(-50%); /* 垂直居中 */ top: 50%; transform: translateY(-50%);
2、在通过:hover
改变宽度或者高度,即可形成上图的动画效果
通过上面的效果,我们可以更进一步,请看下列代码
<button class="btn-8">按钮八</button> <style> ... /* 这里省略上方的公共样式 */ .btn-8:after{ height: 0; width: 0; background: #f13f84; transition: all .3s; z-index: -1; top: 50%; left: 50%; border-radius: 100%; transform: translate(-50%, -50%); overflow: hidden; opacity: .3; } .btn-8:hover:after{ height: 300px; width: 300px; opacity: 1; }
解析:
1、伪类元素:after
水平垂直居中
top: 50%; left: 50%; transform: translate(-50%, -50%);
2、动画改变宽度高度(和之前示例不一样的是,宽高必须大于按钮的宽度,并且是圆形)
3、超出button
部分隐藏即可
本小节到此就结束了,是不是觉得很简单呢?有兴趣爱钻研的小伙伴是不是发现还可以拓展呢?比如:上下左右同时延时效果,可以加入倾斜,效果又不一样了。
通过本小节,你学到了什么?
1、伪类元素灵活运用
2、transition
的作用
3、:hover
鼠标移入动画
4、元素如何水平垂直居中
小伙伴们,有问题可以评论区留言哦,欢迎大家点评。