我使用以下代码实现了过渡:
h1 {
position: absolute;
z-index: 2;
line-height: 1;
font-size: 8em;
transition: all 10s;
pointer-events: none;
font-weight: 600;
width: 800px;
font-family: 'Crimson Text', serif;
margin: 0;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
&.top-left {
top: 0%;
left: 0%;
transform: translate(0%, 0%);
width: 300px;
font-size: 3em;
}
它在Safari上无法按需运行。我尝试做缩放动画,但效果相同。 知道如何解决这个问题吗?
答案 0 :(得分:1)
问题是您正在导致属性转换,迫使浏览器计算布局更改(width
和font-size
)。
问题的原因与浏览器计算在屏幕上呈现的内容的顺序有关。通常按此顺序:
动画#3和#4非常有效。其他的东西不是很多,所以最好尝试避免这些。
您可以采取许多措施来全面提高性能
首先强制计算机使用其GPU进行渲染。最简单的方法是使用3d transform
。
h1 {
transform: translate3d(-50%, -50%, 0);
}
&.top-left {
transform: translate(0, 0, 0);
}
下一步,让我们tell the browser弄乱这个元素,以便可以提高效率。
h1 {
will-change: transform;
}
最后,我们需要重新考虑transform
本身,以避免更改布局。
通过删除font-size
和width
属性并替换为transform: scale
来实现。在理想的情况下,我们将删除顶部/左侧位置之间的过渡,但在这里可能还可以。< / p>
h1 {
position: absolute;
z-index: 2;
line-height: 1;
font-size: 8em;
transition: all 10s;
pointer-events: none;
font-weight: 600;
/* width: 800px; */
font-family: 'Crimson Text', serif;
margin: 0;
top: 50%;
left: 50%;
transform: translate(-50%, -50%, 0) scale(1);
will-change: transform;
}
&.top-left {
top: 0%;
left: 0%;
transform: translate(0, 0, 0) scale(0.25);
/* width: 300px; */
/* font-size: 3em; */
}