我在背景图片上尝试CSS3动画。一切运作良好,问题是在Chrome上,当动画进行时,文字最终会模糊:
动画期间:
关闭动画:
正如您所看到的那样,当关闭动画时文本渲染很好,我知道文本渲染的常见问题但我无法理解为什么动画时Chrome的渲染效果不佳正在处理。我不确定我能做些什么呢。我已经在Firefox和IE上测试了动画,没关系。顺便说一句,我在Windows上工作。
火狐:
IE:
修改
.bg-div {
position: fixed;
width: 110%;
height: 110%;
transform: translate(-5%, -5%);
-moz-transform: translate(-5%, -5%) rotate(0.02deg); /* rotation to solve choppy animation on Firefox */
-ms-transform: translate(-5%, -5%);
background-image: url('images/colour-test.jpg');
background-size: cover;
-webkit-animation: bg-animation 10s linear infinite;
-moz-animation: bg-animation 10s linear infinite;
-ms-animation: bg-animation 10s linear infinite;
}
@-webkit-keyframes bg-animation {
25% { transform: translate(-5.5%, -5.5%); }
50% { transform: translate(-5.3%, -4.9%); }
75% { transform: translate(-4.8%, -4.3%); }
}
@-moz-keyframes bg-animation {
25% { -moz-transform: translate(-5.5%, -5.5%) rotate(0.02deg); }
50% { -moz-transform: translate(-5.3%, -4.9%) rotate(0.02deg); }
75% { -moz-transform: translate(-4.8%, -4.3%) rotate(0.02deg); }
}
@-ms-keyframes bg-animation {
25% { -ms-transform: translate(-5.5%, -5.5%); }
50% { -ms-transform: translate(-5.3%, -4.9%); }
75% { -ms-transform: translate(-4.8%, -4.3%); }
}
.content {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 50%;
height: 65%;
text-align: center;
}
在阅读评论中发布的问题后,我尝试将-webkit-font-smoothing: subpixel-antialiased;
添加到.bg-div
,但这并没有任何区别。
编辑2
好的,所以这有点奇怪,在动画期间position: fixed
显然使文字变得模糊。我不知道这是怎么可能的,无论如何,一旦我删除position: fixed
并且背景是动画的,文本就会正确显示。它仍然不是我想要的,因为我需要修复背景。
答案 0 :(得分:1)
在我的测试中,如果transform
上没有使用.content
,问题就解决了。幸运的是,您不需要使用transform来定位内容div。
使用此方法,您无需使用transform: translate(-50%, -50%)
内容以top,right,bottom,left,margin: auto
和百分比宽度和高度的组合为中心。
.content {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
width: 50%;
height: 65%;
text-align: center;
}
body { margin: 0 auto; width: 500px }
.bg-div {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
width: 800px;
height: 800px;
transform: translate(-5%, -5%);
background: url('http://www.placehold.it/800') no-repeat;
-webkit-animation: bg-animation 2s linear infinite;
animation: bg-animation 2s linear infinite;
}
@-webkit-keyframes bg-animation {
0% {
transform: translate(-5.5%, -5.5%);
}
50% {
transform: translate(-5%, -5%);
}
100% {
transform: translate(-5.5%, -5.5%);
}
}
@keyframes bg-animation {
0% {
transform: translate(-5.5%, -5.5%);
}
50% {
transform: translate(-5%, -5%);
}
100% {
transform: translate(-5.5%, -5.5%);
}
}
.content {
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
width: 50%;
height: 65%;
text-align: center;
}
<div class="bg-div"></div>
<div class="content">
<h1>This looks better</h1>
<input value="Text" />
</div>