在我们制作box-shadow属性的动画的时候,每一帧动画都会引起浏览器的重绘操作,严重影响页面的性能。我们有什么办法可以解决动画box-shadow属性时页面的性能问题呢?答案是:没有!但是我们可以使用其它方法来模拟box-shadow动画:通过动画伪元素的opacity属性来达到动画元素阴影的效果。通过这种方法只需要进行少量的重绘,就可以达到和动画box-shadow属性一样的效果。

使用box-shadow属性来制作元素的阴影动画效果。

动画box-shadow属性

使用鼠标滑过卡片看看效果

使用动画来改变box-shadow (在这个例子中从 box-shadow: 0 1px 2px rgba(0,0,0,0.15) 到 box-shadow: 0 5px 15px rgba(0,0,0,0.3)的过程中会一起每一帧都进行重绘操作。

也许在你的桌面电脑浏览器中不会看出有什么问题,但是在移动手机上就有可能会出现问题。也许在更为复杂的布局中,你的桌面电脑浏览器也会出现问题。

使用伪元素来制作元素的阴影动画效果。

使用伪元素动画进行模拟

使用鼠标滑过卡片看看效果

我们可以通过插入一个:after来减少重绘的数量,同时为它添加一个阴影,然后在鼠标滑过时动画伪元素的opacity属性。

transform和opacity属性的修改都是被硬件加速的,所以我们可以达到更好的性能效果。

在执行上面的两个例子的时候,打开你的浏览器开发人员工具,你可以看到类似下面的结果:

从上图可以看到,直接使用box-shadow属性进行动画会进行更多的重绘操作。

opacity和transform属性是少数执行动画时不进行重绘操作的CSS属性之一。所以我们通过结合这两个属性可以达到性能优化的效果。

上面两种阴影动画效果的核心实现代码如下:

/* box-shadow动画 */

.make-it-slow {

box-shadow: 0 1px 2px rgba(0,0,0,0.15);

transition: box-shadow 0.3s ease-in-out:

}

/* 在鼠标滑过时过渡到一个较大的阴影 */

.make-it-slow:hover {

box-shadow: 0 5px 15px rgba(0,0,0,0.3);

}

/* 伪元素阴影效果 */

.make-it-fast {

box-shadow: 0 1px 2px rgba(0,0,0,0.15);

}

/* 重新渲染较大的阴影,同时将阴影隐藏 */

.make-it-fast::after {

box-shadow: 0 5px 15px rgba(0,0,0,0.3);

opacity: 0;

transition: opacity 0.3s ease-in-out:

}

/* 在鼠标滑过时显示较大的阴影 */

.make-it-fast:hover::after {

opacity: 1;

}

使用伪元素实现元素阴影动画效果

使用伪元素实现元素阴影动画效果的完整过程也非常简单。首先我们需要使用:after伪元素来制作元素鼠标滑过时的大阴影效果。例如我们需要为一个

元素制作阴影动画效果。

/* 为div元素创建简单的CSS样式,为它添加一个阴影效果 */

.box {

position: relative;

display: inline-block;

width: 100px;

height: 100px;

border-radius: 5px;

background-color: #fff;

box-shadow: 0 1px 2px rgba(0,0,0,0.15);

transition: all 0.3s ease-in-out;

}

/* 插件伪元素并隐藏它 */

/* 注意box-shadow属性的设置 */

.box::after {

content: '';

position: absolute;

z-index: -1;

width: 100%;

height: 100%;

opacity: 0;

border-radius: 5px;

box-shadow: 0 5px 15px rgba(0,0,0,0.3);

transition: opacity 0.3s ease-in-out;

}

由于我们需要同时动画div元素和它的伪元素的opacity属性,所以为这两个元素都添加了transition动画过渡效果。

通过上面的设置,我们得到了一个带阴影效果的矩形,它的大阴影开始时是隐藏的,得到的结果类似下面的样子:

接下来我们开始制作鼠标滑过时的阴影动画效果。在鼠标滑过div元素时将它放大,然后将它的伪元素的透明度从0过渡到1。

/* 放大div元素 */

.box:hover {

transform: scale(1.2, 1.2);

}

/* 将伪元素的透明度从0修改为1 */

.box:hover::after {

opacity: 1;

}

到此我们就得到了鼠标滑过时的阴影动画效果。用鼠标滑过下面的div看看效果。

下面是完整的使用伪元素实现元素阴影动画效果的CSS样式代码,包括各个浏览器厂商的前缀。

.box {

position: relative;

display: inline-block;

width: 100px;

height: 100px;

background-color: #fff;

border-radius: 5px;

box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1);

border-radius: 5px;

-webkit-transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);

transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);

}

.box::after {

content: "";

border-radius: 5px;

position: absolute;

z-index: -1;

top: 0;

left: 0;

width: 100%;

height: 100%;

box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3);

opacity: 0;

-webkit-transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);

transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);

}

.box:hover {

-webkit-transform: scale(1.25, 1.25);

transform: scale(1.25, 1.25);

}

.box:hover::after {

opacity: 1;

}

通过动画transform和opacity属性,我们可以得到更好的性能效果。所以,在你以后要制作类似的盒子阴影动画效果的时候,请不要直接动画box-shadow属性,而应该采用本文介绍的方法。

html5 盒子阴影效果,如何制作平滑的“box-shadow”盒子阴影动画效果相关推荐

  1. 【web前端特效源码】使用HTML5+CSS3+JavaScript制作一个可拖动的拼图游戏动画效果~适合初学者~超简单~ |it前端开发

    b站视频演示效果: [web前端特效源码]使用HTML5+CSS3+JavaScript制作一个可拖动的拼图游戏动画效果~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: <!D ...

  2. 【web前端特效源码】使用HTML5+CSS3制作一个会促销广告滚动字幕3D动画效果~~适合初学者~超简单~ |前端开发|IT软件

    b站视频演示效果: [web前端特效源码]使用HTML5+CSS3制作一个会促销广告滚动字幕3D动画效果~~适合初学者~超简单~ |前端开发|IT软件 效果图: 完整代码: <!DOCTYPE ...

  3. HTML制作色带,PS简单制作一个漂亮的混合色带gif动画效果

    今天为大家介绍PS简单制作一个漂亮的混合色带gif动画效果方法,方法很简单的,教程介绍的很详细,好了,下面我们来看看吧! 先来看看案例的最终效果: 混合颜色带是一种特殊的高级蒙版,它可以快速隐藏像素. ...

  4. HTML5+CSS3小实例:简单又好看的加载动画效果

    HTML5+CSS3做一个简单又好看的加载动画效果,一个三色圆环转动,再加圆环内部文字转动,效果虽然简单,但第一次看到还是很惊艳的,最主要一点,代码真的超简单的. 效果: 源码: <!DOCTY ...

  5. html5 div 拱桥形状制作,纯CSS3+DIV实现小三角形边框效果的示例代码

    具体代码如下所示: html代码是这样的 下面用CSS3分别实现向上.下.左.右的三角形 /*箭头向上*/ .arrow-up { width:0; height:0; border-left:30p ...

  6. 【幻灯片动画制作教程】Focusky教程 | 如何删除动画效果?

    (Focusky动画演示大师简称"FS软件")在动画编辑器中,可选择删除物体的某个动画,或者删除该帧的所有动画. 详情请看下图: 1.删除某个动画: 选择该动画,然后点击动画右上角 ...

  7. svg android动画制作,使用 SVG 来制作 Morphing 动画效果

    何为Morphing动画 开始之前,先来了解下什么是Morphing动画.所谓Morphing动画是表示,同一个模型,从一个形状变到另一个形状.如下图所示,从形状1渐变到形状2,再从形状2渐变到形状3 ...

  8. 黑马程序员pink老师前端入门教程,零基础必看的h5(html5)+css3+移动端前端视频教程(权重,盒子模型)

    一.基础班学习路线 三.CSS3基础 1.CSS的三大特性 CSS三大特性之层叠性 CSS三大特性之继承性 行高的继承 CSS三大特性之优先级 CSS权重的叠加 十个在最后累加会变成0,0,0,10: ...

  9. 仿ipad页面html5,用HTML5实现iPad应用无限平滑滚动

    目录 前言: linkedin 5月2日发布了新的ipad版本,它基于html5制作,在体验和界面上非常出色,在使用中可以发现它和原生应用基本没有任何差别. 关于这个版本,有两篇文章非常有价值,深入的 ...

最新文章

  1. 视频数据处理方法!关于开源软件FFmpeg视频抽帧的学习
  2. webservice 测试窗体只能用于来自本地计算机的请求
  3. android+模拟器皮肤,自定义android模拟器皮肤和键盘映射
  4. 动态规划 HDOJ2602-Bone Collector-01背包
  5. BlockingQueue阻塞队列
  6. html5监听动画结束,js判断css动画是否完成 animation,transition
  7. Blockquotes,引用,html里面,经常用到的一个!
  8. 小学计算机技术指导纲要,《中小学信息技术课程指导纲要(试行)》
  9. 二叉树总结(二)树的遍历
  10. 游戏外挂设计技术探讨(上)
  11. 引领架构创新之路第八届系统架构师大会撼世来袭
  12. SAP 是不是很烂的一个ERP软件
  13. 【POJ 3281】Dining【最大匹配、拆点】
  14. 计算机英语词汇解释,常见计算机英语词汇解释
  15. ev加密视频转换成MP4格式,亲测可用
  16. lua+libuv的一些开发心得
  17. 大数据开发面试题总结-超详细
  18. Jenkins流水线极速打包
  19. 计算机应用基础模块三项目二,计算机应用基础 高职计算机大类专业 刁爱军模块三 项目二 海报的制作.pptx...
  20. 【2073】三角形面积

热门文章

  1. codeforces 1153D Serval and Rooted Tree
  2. ASO关键词优化技巧:如何充分利用热搜榜与相关热点?
  3. 华硕电脑改光驱启动计算机,华硕笔记本win7系统如何设置光驱为第一启动项
  4. Ambarella S6L55M 性能测试之内存篇
  5. 对计算机系美好期望,计算机系举行新生入学教育大会——学生讲堂
  6. 笔记本计算机屏幕亮度暗,笔记本屏幕100%还是暗,win10电脑亮度调节失灵
  7. 手动配置网络设置静态IP地址
  8. 1-4 CAD 圆弧(arc)
  9. python有什么颜色_Python中常见颜色记录
  10. Mars3d开发:飞行漫游