加入收藏 | 设为首页 | 会员中心 | 我要投稿 聊城站长网 (https://www.0635zz.com/)- 智能语音交互、行业智能、AI应用、云计算、5G!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

探讨CSS中针对阴影效果的最佳实践以及优化的技巧

发布时间:2023-09-02 13:28:48 所属栏目:语言 来源:
导读:在实际应用中,我们有时候会遇到“CSS如何对阴影动画优化,有什么方法”这样的问题,我们该怎样来处理呢?下文给大家介绍了解决方法,希望这篇“CSS如何对阴影动画优化,有什么方法”文章能帮助
在实际应用中,我们有时候会遇到“CSS如何对阴影动画优化,有什么方法”这样的问题,我们该怎样来处理呢?下文给大家介绍了解决方法,希望这篇“CSS如何对阴影动画优化,有什么方法”文章能帮助大家解决问题。
 
本技巧来自这篇文章 --How to animate box-shadow with silky smooth performance
 
本文不是直译,因为觉得这个技巧很有意思很有用,遂起一文。
 
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进行动画性能更好呢?可以看看这里这张表格,列举了不同属性变换对页面重排、重绘的影响:
 
very few CSS properties
 
最后,Demo 可以看看:
 
CodePen Demo -- 优化box-shadow动画
 
存在的问题,另外一种方案
 
原文中上述这个方案其实并不算太完美,因为最终的效果是两个阴影的叠加效果,可能会在整体的感觉上阴影颜色更深了一点。
 
所以需要对最终状态的阴影进行微调一下,削弱一点效果,尽量让两个阴影的叠加效果与单一一个阴影效果相近。
 
当然,我们可以再对上述方案进行优化,我们再使用一个::after伪元素,::after伪元素设置为初始状态且透明度为1,::before伪元素设置为末尾状态且透明度为0:
 
实际 hover 的时候,对两个伪元素进行一显一隐,这样最终的效果只有一个阴影效果,没有阴影的叠加,与直接对阴影进行过渡变化效果一致
 
 

(编辑:聊城站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章