gpt4 book ai didi

css - Safari 动画(关键帧和变换)设置错误的位置

转载 作者:技术小花猫 更新时间:2023-10-29 11:40:02 24 4
gpt4 key购买 nike

我只在 Safari 上遇到一个奇怪的问题(奇怪?哈哈)。无论您使用的是 iPhone、iPad 还是 Desktop Mac,都无所谓; Safari 使用动画关键帧和转换 计算错误定位 Logo 。

问题是 Logo 需要移到他的房间,但在 Safari 中 Logo 太靠左,当关键帧达到 100% 时, Logo 完全适合他的房间。

您可以在以下位置看到奇怪的效果:https://amonarraiz.com (在Safari上访问和在其他浏览器上访问不一样,代码是一样的)。

这是我的代码:

.intro-wrapper {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
}
.intro-logo {
background: url(https://amonarraiz.com/css/img/slider/2.png) center center no-repeat;
background-size: cover;
width: 50rem;
height: 41rem;
position: absolute;
left: 50%;
top: 50%;
-ms-transform: translate(-86%, -52%);
-webkit-transform: translate(-86%, -52%);
transform: translate(-86%, -52%);
opacity: 0;
cursor: pointer;
}

.intro-in {
-moz-animation-duration: 3.75s;
-webkit-animation-duration: 3.75s;
animation-duration: 3.75s;
-moz-animation-name: intro-in;
-webkit-animation-name: intro-in;
animation-name: intro-in;
-moz-animation-iteration-count: 1;
-webkit-animation-iteration-count: 1;
animation-iteration-count: 1;
-moz-animation-fill-mode: forwards;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
-webkit-animation-timing-function: ease-in-out;
-moz-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
}
@-moz-keyframes intro-in {
0% {
opacity: 0.6;
width: 50rem;
height: 41rem;
-ms-transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
30% {
opacity: 1;
width: 50rem;
height: 41rem;
-ms-transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}

100% {
opacity: 1;
width: 25.6rem;
height: 19.5rem;
-ms-transform: translate(-106%, -46%);
-webkit-transform: translate(-106%, -46%);
transform: translate(-106%, -46%);
}
}

@-webkit-keyframes intro-in {
0% {
opacity: 0.6;
width: 50rem;
height: 41rem;
-ms-transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
30% {
opacity: 1;
width: 50rem;
height: 41rem;
-ms-transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}

100% {
opacity: 1;
width: 25.6rem;
height: 19.5rem;
-ms-transform: translate(-106%, -46%);
-webkit-transform: translate(-106%, -46%);
transform: translate(-106%, -46%);
}
}

@keyframes intro-in {
0% {
opacity: 0.6;
width: 50rem;
height: 41rem;
-ms-transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}
30% {
opacity: 1;
width: 50rem;
height: 41rem;
-ms-transform: translate(-50%, -50%);
-webkit-transform: translate(-50%, -50%);
transform: translate(-50%, -50%);
}

100% {
opacity: 1;
width: 25.6rem;
height: 19.5rem;
-ms-transform: translate(-106%, -46%);
-webkit-transform: translate(-106%, -46%);
transform: translate(-106%, -46%);
}
}
<div class="intro-wrapper">
<div class="intro-logo intro-in"></div>
</div>

我不知道这里有什么问题。所有浏览器都能完美地呈现它(包括 Google Chrome 的模拟器),但 Safari(iOS/Mac)在动画运行时无法以正确的方式呈现它(当动画结束时, Logo 坐在他的房间里)。

如果您需要更多详细信息,请告诉我,我会尽快添加。

谢谢。

编辑

我会添加赏金,因为这个没有足够的关注度

最佳答案

您使用带有百分比值的translate,它根据元素的宽度和高度计算元素的位置。但是宽度和高度也会随着动画的变化而变化。在我看来,这可能是 Safari 的一个错误,它根据初始宽度和高度计算平移。

您有两种解决方法可供选择。在转换时使用 scale 或使用具体的距离单位。如果你想使用比例,你必须改变一些数字,但我不确定它是如何工作的。

如果您在动画中使用 rem 而不是百分比,它会起作用:

.intro-wrapper {
position: fixed;
width: 100%;
height: 100%;
top: 0;
left: 0;
}
.intro-logo {
background: url(https://amonarraiz.com/css/img/slider/2.png) center center no-repeat;
background-size: cover;
width: 50rem;
height: 41rem;
position: absolute;
left: 50%;
top: 50%;
opacity: 0;
cursor: pointer;
}
.intro-in {
-moz-animation-duration: 3.75s;
-webkit-animation-duration: 3.75s;
animation-duration: 3.75s;
-moz-animation-name: intro-in;
-webkit-animation-name: intro-in;
animation-name: intro-in;
-moz-animation-iteration-count: 1;
-webkit-animation-iteration-count: 1;
animation-iteration-count: 1;
-moz-animation-fill-mode: forwards;
-webkit-animation-fill-mode: forwards;
animation-fill-mode: forwards;
-webkit-animation-timing-function: ease-in-out;
-moz-animation-timing-function: ease-in-out;
animation-timing-function: ease-in-out;
}
@-moz-keyframes intro-in {
0% {
opacity: 0.6;
width: 50rem;
height: 41rem;
-ms-transform: translate(-25rem, -21.5rem);
-webkit-transform: translate(-25rem, -21.5rem);
transform: translate(-25rem, -21.5rem);
}
30% {
opacity: 1;
width: 50rem;
height: 41rem;
-ms-transform: translate(-25rem, -21.5rem);
-webkit-transform: translate(-25rem, -21.5rem);
transform: translate(-25rem, -21.5rem);
}
100% {
opacity: 1;
width: 25.6rem;
height: 19.5rem;
-ms-transform: translate(-27.136rem, -8.97rem);
-webkit-transform: translate(-27.136rem, -8.97rem);
transform: translate(-27.136rem, -8.97rem);
}
}
@-webkit-keyframes intro-in {
0% {
opacity: 0.6;
width: 50rem;
height: 41rem;
-ms-transform: translate(-25rem, -21.5rem);
-webkit-transform: translate(-25rem, -21.5rem);
transform: translate(-25rem, -21.5rem);
}
30% {
opacity: 1;
width: 50rem;
height: 41rem;
-ms-transform: translate(-25rem, -21.5rem);
-webkit-transform: translate(-25rem, -21.5rem);
transform: translate(-25rem, -21.5rem);
}
100% {
opacity: 1;
width: 25.6rem;
height: 19.5rem;
-ms-transform: translate(-27.136rem, -8.97rem);
-webkit-transform: translate(-27.136rem, -8.97rem);
transform: translate(-27.136rem, -8.97rem);
}
}
@keyframes intro-in {
0% {
opacity: 0.6;
width: 50rem;
height: 41rem;
-ms-transform: translate(-25rem, -21.5rem);
-webkit-transform: translate(-25rem, -21.5rem);
transform: translate(-25rem, -21.5rem);
}
30% {
opacity: 1;
width: 50rem;
height: 41rem;
-ms-transform: translate(-25rem, -21.5rem);
-webkit-transform: translate(-25rem, -21.5rem);
transform: translate(-25rem, -21.5rem);
}
100% {
opacity: 1;
width: 25.6rem;
height: 19.5rem;
-ms-transform: translate(-27.136rem, -8.97rem);
-webkit-transform: translate(-27.136rem, -8.97rem);
transform: translate(-27.136rem, -8.97rem);
}
}
<div class="intro-wrapper">
<div class="intro-logo intro-in"></div>
</div>

关于css - Safari 动画(关键帧和变换)设置错误的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40284079/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com