gpt4 book ai didi

CSS 动画缩放变换在 Firefox 中开始模糊

转载 作者:行者123 更新时间:2023-12-04 11:27:02 24 4
gpt4 key购买 nike

( 注意 :这是 [确切地] 1½ 年 之前被问到的,并且 [确切地] 零事件......我显然有同样的问题,所以希望 OP @Jaffa 获胜不介意我捎带它,然后悬赏以 [希望] 产生一些兴趣!)
OP 的原始问题是 下面 ,我添加的问题和示例是 低于此 .

[原问题:]
我正在尝试为 SVG 制作缩小效果的动画。我已经让它工作了,但是缩放到 30 的第一帧在 Firefox 中模糊/像素化。
火狐 :
Chrome :

我在 Chrome 或 Edge 中没有看到相同的问题。初始帧很清晰,就像我期望的 SVG 一样。

html,
body {
margin: 0px;
padding: 0px;
}
.wrapper {
padding: 50px 50px;
max-width: 1200px;
margin-left: auto;
margin-right: auto;
margin-top: 80px;
}
.img_zoom {
width: 400px;
height: 500px;
margin: 2em auto 2em auto;
overflow: hidden;
}
.zoom {
width: 100%;
height: 100%;
background-position: center;
background-size: cover;
animation: zoom 5s ease-in-out 4s 1 normal forwards;
transform: translate(3400px, -3600px) scale(30);
}
@keyframes zoom {
to {
margin-left: 0;
transform: translate(0px, 0px) scale(0.7);
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="wrapper">
<div class="img_zoom">
<div class="zoom"><img src="https://flexion.tech/images/box-con.svg"></div>
</div>
</div>
</body>
</html>

代码笔在这里进行审查:
https://codepen.io/jaffa80/pen/KKpxgeQ
有什么想法可以解决 Firefox 中的模糊问题吗?
我遇到的另一个问题是,如果我从 @keyframe 中删除 margin-left:0 ,事情就会停止工作。对此的任何指示也将不胜感激。

编辑:
我有一个包含多个元素的圆形 div 容器,用于在圆圈内定位文本。当用户到达时,我需要圆圈“增长”,所以我想我会使用 transform:scale()带有过渡或动画。
然而, 仅适用于 Firefox ,直到过渡(或动画)完成,文本才会模糊。奇怪的是,圆圈的边界仍然非常清晰(我认为?)。

想着可能需要一点时间来预渲染,我试过延迟 setTimeout单独,以及与事件( openDOMContentLoaded )和 requestAnimationFrame 结合使用.我也尝试使用 css animation而不是 transition .
在 Firefox 中似乎没有什么不同,但 Chrome 和 Edge 似乎很好。有没有 前缀 我不知道,或者这可能是渲染 错误 在 Firefox 中?
我的 MCSE 是 下面的片段 :

setTimeout(function(){ 
circ.classList.remove('shrunk');
},500);
body{ font-family:'fira code'; font-size:20px; }
#circ{ position:relative; border:3px solid blue; border-radius:50%; text-align:center; white-space: nowrap; transition:transform 1000ms; }
#circ span{ position:absolute; left:50%; top:50%; transform:translate(-50%,-50%); }
.shrunk{ transform:scale(0.1); }
<div class='shrunk' id='circ' style='width:336px; height:336px;'>
<span>Lorem<br>Ipsum is simply<br>dummy text of the<br>printing and typesetting<br>industry. Lorem Ipsum has<br>been the industry's<br>standard dummy text ever<br>since the 1500s, when an<br>unknown printer took a<br>galley of type and<br>scrambled it to make<br>a type specimen<br>book.</span>
</div>

任何建议或解决方法?

最佳答案

我只能猜测为什么会发生这种情况。 Firefox 在开始动画/过渡之前(通过将类添加到标签)和过渡结束时拍摄快照。也许 Firefox 正在拍摄两个以上的快照。但是正如您在下面的代码段中看到的,动画标签仍然模糊,等待动画完成;模糊然后立即消失。我认为 Firefox 进行这种优化是为了获得更好的性能。
CSS 属性 will-change如果重置为初始也不能解决这个问题。

setTimeout(function() {
circ.classList.add('shrunk');
}, 2000);
body {
display: flex;
flex-flow: column;
font-family: 'fira code';
gap: 2rem;
}

.circles,
.titles {
width: 100%;
display: flex;
gap: 2rem;
}

h4 {
width: 105px;
font-size: 0.8rem;
}

#circ,
#circ2,
#circ3,
#circ4 {
width: 100px;
height: 100px;
position: relative;
border: 3px solid blue;
border-radius: 50%;
text-align: center;
word-break: break-all;
}

#circ {
transition: transform 1000ms;
transform: scale(0.1);
}

#circ2 {
animation: forwardAnim 5s linear forwards;
}

#circ3 {
animation: forwardAnim 5s linear forwards;
backface-visibility: hidden;
}

#circ4 {
animation: forwardAnim 5s linear forwards;
transform-style: preserve-3d;
}

#circ span,
#circ2 span,
#circ3 span,
#circ4 span {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}

#circ.shrunk {
transform: scale(1);
}

@keyframes forwardAnim {
0% {
transform: scale(0.1);
}
45% {
transform: scale(0.1);
}
50% {
transform: scale(1);
}
100% {
transform: scale(1);
}
}
<div class="circles">
<div id="circ">
<span>This is my text!</span>
</div>
<div id="circ2">
<span>This is my text!</span>
</div>

<div id="circ3">
<span>This is my text!</span>
</div>
<div id="circ4">
<span>This is my text!</span>
</div>
</div>
<div class="titles">
<h4>Add class with transition</h4>
<h4>Animation</h4>
<h4>Animation with backface-visibility: hidden</h4>
<h4>Animation with transform-style: preserve-3d</h4>
</div>

为避免这种情况,您可以使用 backface-visibility: hidden;@nullptr上面提到的,或 transform-style: preserve-3d; * 实现更平滑的过渡。

setTimeout(function() {
circ.classList.remove('shrunk');
}, 500);
setTimeout(function() {
circ2.classList.remove('shrunk');
}, 500);
body {
display: flex;
flex-flow: column;
font-family: 'fira code';
gap: 2rem;
font-size: 0.9rem;
}

.circles,
.titles {
width: 100%;
display: flex;
gap: 2rem;
}

h4 {
width: 255px;
font-size: 0.8rem;
text-align: center;
}

#circ,
#circ2 {
width: 250px;
height: 250px;
position: relative;
border: 3px solid blue;
border-radius: 50%;
text-align: center;
white-space: nowrap;
transition: transform 1000ms;
}

#circ {
backface-visibility: hidden;
}

#circ2 {
transform-style: preserve-3d;
}

#circ span,
#circ2 span {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}

.shrunk {
transform: scale(0.1);
}
<div class="circles">
<div class="shrunk" id="circ">
<span>Lorem<br />Ipsum is simply<br />dummy text of the<br />printing and
typesetting<br />industry. Lorem Ipsum has<br />been the industry's<br />standard
dummy text ever<br />since the 1500s, when an<br />unknown printer
took a<br />galley of type and<br />scrambled it to make<br />a type
specimen<br />book.</span
>
</div>
<div class="shrunk" id="circ2">
<span
>Lorem<br />Ipsum is simply<br />dummy text of the<br />printing and
typesetting<br />industry. Lorem Ipsum has<br />been the industry's<br />standard
dummy text ever<br />since the 1500s, when an<br />unknown printer
took a<br />galley of type and<br />scrambled it to make<br />a type
specimen<br />book.</span
>
</div>
</div>
<div class="titles">
<h4>backface-visibility: hidden;</h4>
<h4>transform-style: preserve-3d;</h4>
</div>

另一种避免圆圈内内容模糊的方法是删除 position: absolute如果不重要,则将内容与 display: flex 对齐在父元素上。

setTimeout(function() {
circ.classList.remove('shrunk');
}, 500);
body {
font-family: 'fira code';
font-size: 20px;
}

#circ {
display: flex;
justify-content: center;
align-items: center;
position: relative;
border: 3px solid blue;
border-radius: 50%;
text-align: center;
white-space: nowrap;
transition: transform 1000ms;
}

.shrunk {
transform: scale(0.1);
}
<div class="shrunk" id="circ" style="width: 336px; height: 336px">
<span>Lorem<br />Ipsum is simply<br />dummy text of the<br />printing and
typesetting<br />industry. Lorem Ipsum has<br />been the industry's<br />standard
dummy text ever<br />since the 1500s, when an<br />unknown printer took
a<br />galley of type and<br />scrambled it to make<br />a type
specimen<br />book.</span
>
</div>

关于CSS 动画缩放变换在 Firefox 中开始模糊,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60796102/

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