电脑设备通过GPU来支持CSS 3D的转换线程。GPU是一个专门用于像素操作的电子设备。GPU通常用于处理游戏、本地应用程序和3D动画,而不是用于页面的2D transforms。当前的浏览器依靠CPU来支持2D动画,这会影响在所有平台下CSS动画的平滑性和流畅性,尤其是在移动设备上。
我们可以通过一些小技巧来使用将GPU使用在2D动画上。下面是一个例子,试试用鼠标移动到下面的图片上看看。
div#vintage-racers { width: 33%; position: relative; overflow: hidden; border: 2px solid #000; font-size: 0; height: 300px; } div#vintage-racers img { position: absolute; left: 0; transition: 1s all ease-in-out; } div#vintage-racers:hover img { left: -100%; }
当鼠标滑过div
时图片开始移动,你会看到结果有一些延迟和画面抖动。为了制作平滑的动画效果,我们可以添加一个CSS 3D transform。这里的诀窍是在transform不会改变元素的外观,我们只是需要简单的包含3d transform来打开GPU功能,这将使得2D transition 也会被GPU影响。
div#vintage-racers img { position: absolute; left: 0; transition: 1s left ease-in-out; transform: translate3d(0,0,0); }
注意:你需要为各个厂商的浏览器添加上前缀,还有这里我们将transition 的素材从
all
该为ileft
来提高动画的性能。使用2D translate函数要比使用相对定位来移动图片的效果要好得多。效果如右边的图像所示:
如果你的电脑足够好,你会看到第二种动画效果要比第一种动画效果要平滑顺畅得多。如果你想知道GPU是否在工作,Chrome有一个实验性的工具可以检测你的动画的性能,使用方法如下:
- 在Chrome的URL栏键入:about:flags。
- 找到FPS Counter,点击enable来启用它。
- 重启Chrome浏览器。
在页面渲染时如果GPU被启用,浏览器上将会出现FPS计数器。你可以将代码中的3D transform移除掉看看FPS计数器是否还会出现。
这个技术的可能有利于移动设备上的小CSS动画。但是使用这个技术要注意,智能手机和平板电脑的显存都相对比较小,所以测试非常重要,如果你发现这个技术可以在桌面设备上很好的运行,而在移动设备上不行,你可以通过@media query来在移动设备上关闭它。
@media only screen and (max-device-width: 1024px) { div#vintage-racers img { transform: none; } }