【发布时间】:2017-03-04 23:06:16
【问题描述】:
我正在尝试在我正在制作的响应式网站上开始使用一些 CSS3 过渡,并且在桌面 Chrome 和 Android 上的 Chrome 上一切正常,但它在 Chrome 和 Safari 的 ios 设备上无法正常工作。
例如,我用于菜单的 CSS sn-p 如下:
#menu {
width: 180px;
height: 100%;
position: fixed;
top: 0;
left: -180px;
z-index: 9;
transition: left 1s;
-webkit-transition: left 1s;
}
我有一个菜单按钮,单击该按钮时,会调用一个 javascript 函数,该函数将“左”样式更改为 0,使其从屏幕左侧外部过渡到位置。
在桌面和 Chrome Android 上一切正常,但在 ios Chrome 和 Safari 上,它要么非常不稳定,要么只是延迟一秒钟然后立即弹出。它在我所有的过渡中都这样做,但为了简单起见,我显示了菜单之一。
我已经通过 Stack 进行了大量的谷歌搜索和搜索,但我真正发现的唯一内容是添加以下内容:
-webkit-backface-visibility: hidden;
-webkit-perspective: 1000;
-webkit-transform: translate3d(0, 0, 0);
强制硬件加速的样式,但它也不起作用。我看完全没有变化。任何帮助将不胜感激。
【问题讨论】:
-
避免使用绝对定位过渡会占用大量资源,而是尝试使用
transform: translateX(0)进行水平调整 -
@Swordys 我会检查一下。我之前并没有真正搞砸过“转换”,因为直到最近我才真正尝试过转换,尤其是在移动设备上。对于不改变定位但在最大高度和不透明度上有过渡的元素,我也遇到了同样的问题。最好只对所有这些都使用转换吗?
-
是的,如果您在绝对元素上使用大量过渡,则会对性能产生很大影响。使用过渡是获得流畅体验的最佳实践。您也可以尝试使用
will-change: transform强制硬件加速,但目前 safari 浏览器不支持。 -
@Swordys 更改为
transform: translateX(0)方法有很大帮助。菜单现在完全流畅了。如果您想让这个问题成为一个很好的实际答案,那么我可以将其标记为正确答案并给予您信任。谢谢。 -
当然,很高兴我能帮上忙。
标签: ios css css-transitions transitions