pc端hover阴影改变
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pc端hover阴影改变相关的知识,希望对你有一定的参考价值。
参考技术A pc端hover阴影改变box-shaodw 在我们的工作中使用以及越来越多,伴随阴影的动画或多或少都有一点。假设,我们有下面这样一个盒子:
div
width: 100px;
height: 100px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
希望 hover 的时候,盒阴影从 box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3) 过渡到 box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3)。
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3) --> box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3)
OK,最简单的方法当然是:
div:hover
width: 100px;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
因为过渡动画是在两个不同的盒阴影状态在发生,所以在过渡动画的时间内,浏览器会不断的重绘盒阴影。而又由于阴影属于耗性能样式,所以这种动画给人的感觉多少有些卡顿。
这里有一个小技巧可以优化这种情况下的阴影动画。
使用伪元素及透明度进行优化
使用伪元素及透明度进行优化,我们给上述元素添加一个 before 伪元素,大小与父 div 一致,并且提前给这个元素添加好所需要的最终的盒阴影状态,但是元素的透明度为 0。
div
position: relative;
width: 100px;
height: 100px;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
div::before
content: "";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
opacity: 0;
然后,在 hover 的时候,我们只需要将伪元素的透明度从 0 设置为 1 即可。
div:hover::before
opacity: 1;
这样做的好处是,实际在进行的阴影变化,其实只是透明度的变化,而没有对阴影进行不断的重绘,有效的提升了阴影动画的流畅程度,让它看起来更加丝滑。
为什么对透明度 opacity 进行动画要比对 box-shadow 进行动画性能更好呢?可以看看这里这张表格,列举了不同属性变换对页面重排、重绘的影响:
存在的问题,另外一种方案
原文中上述这个方案其实并不算太完美,因为最终的效果是两个阴影的叠加效果,可能会在整体的感觉上阴影颜色更深了一点。
所以需要对最终状态的阴影进行微调一下,削弱一点效果,尽量让两个阴影的叠加效果与单一一个阴影效果相近。
当然,我们可以再对上述方案进行优化,我们再使用一个 ::after 伪元素,::after 伪元素设置为初始状态且透明度为1,::before 伪元素设置为末尾状态且透明度为0:
div
position: relative;
width: 100px;
height: 100px;
div::before
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);
opacity: 0;
div::after
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.3);
实际 hover 的时候,对两个伪元素进行一显一隐,这样最终的效果只有一个阴影效果,没有阴影的叠加,与直接对阴影进行过渡变化效果一致:
div:hover::before
opacity: 1;
div:hover::after
opacity: 0;
移动端和PC端有什么区别
1.PC考虑的是浏览器的兼容性,而移动端开发考虑的更多的是手机兼容性,因为目前不管是android手机还是ios手机,一般浏览器使用的都是webkit内核,所以说做移动端开发,更多考虑的应该是手机分辨率的适配,和不同操作系统的略微差异化。
2.在部分事件的处理上,移动端多出来的事件是触屏事件,而缺少的是hover事件。 另外包括移动端弹出的手机键盘的处理,这样的问题在PC端都是遇不到的。
3.在布局上,移动端开发一般是要做到布局自适应的,需要熟练使用rem布局
4.在动画处理上,PC端由于要考虑IE的兼容性,所以通常使用JS做动画的通用性会更好一些,但是CSS3做了很大的牺牲,而在手机端,如果要做一些动画、特效等,第一选择肯定是CSS3, 既简单、效率又高。
5.微信的一些接口组好能去实现一遍,熟悉一下肯定是有好处的,比如通过微信分享文章,title、description、icon等图标的配置,这些还是要会的。
6.百度地图的一些API接口对于移动端来说,LBS是一个非常重要的特性,所以地图这块肯定是要了解的,在加上百度地图这块已经是一个比较成熟的平台了,所以学起来也比较容易。
7.CSS3的动画在移动端用的还是比较多的,但同时也要注意性能。
8.一般PC端用jquery,移动端用zepto,因为移动端的流量还是比较重要的,所以引入的资源或者插件,能小则小,一个30k的资源和一个80k的资源,在移动端的差别还是挺大的。未压缩的jquery是262kb,压缩的jquey是83kb。未压缩的zepto是54kb,压缩的zepto只有9kb。
9.最好能掌握一套完整的前端开发架构,比如模块化、打包、压缩、缓存有条件的还可以做一下自动化测试等等。
10.性能优化,包括首屏的打开速度、用户响应延迟、渲染性能、动画帧率等在手机上都需要特别注意。
以上是关于pc端hover阴影改变的主要内容,如果未能解决你的问题,请参考以下文章