【问题标题】:CSS3 Animation Cause Poor Text RenderingCSS3 动画导致文本渲染不佳
【发布时间】:2014-12-10 21:32:10
【问题描述】:

我正在尝试在背景图像上使用 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;
}

阅读 cmets 中发布的问题和答案后,我尝试将 -webkit-font-smoothing: subpixel-antialiased; 添加到 .bg-div,但这并没有任何区别。

编辑 2

好吧,这有点奇怪,在动画过程中,position: fixed 显然使文本变得模糊。我不知道这是怎么可能的,无论如何,一旦我删除了position: fixed 并且背景是动画,文本就会正确显示。这仍然不是我想要的,因为我需要修复背景。

【问题讨论】:

  • 感谢您的回复,我确实尝试了发布链接中提供的解决方案,但没有运气。我将发布我所拥有的 CSS,以使事情更清楚。
  • 您是否尝试过该线程的其他建议? -webkit-transform: translate3d(0,0,0);
  • 是的,我做到了,但也没有运气。这是一个奇怪的问题,我发现的大多数问题都是由于translate3d 而导致的问题
  • position:fixed 在许多不同的方面都相当糟糕。尽可能避免它是最佳的。您甚至可以尝试在 JS 中使用绝对定位,但不知道如何比较性能。不会更糟

标签: css css-animations text-rendering


【解决方案1】:

在我的测试中,如果transform 未在.content 上使用,则问题已得到解决。幸运的是,您不需要使用转换来定位您的内容 div。

使用这个边距:自动定位来代替

  • 使用此方法,无需使用transform: translate(-50%, -50%)

  • 内容居中,由上、右、下、左、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>

【讨论】:

  • 非常感谢您成功了。所以我猜transform 是问题而不是position: fixed
  • 是的,我认为错误发生在两种转换的组合中。我以前见过这种行为,尤其是在 Chrome 中,这通常是由于某种组合造成的。很幸运,您可以使用不同的方法获得相同的外观 :) 虽然这是一个错误,所以希望将来不会出现问题!
  • 是的,幸好它可以解决 :) 我注意到 transform 似乎确实会引起一些小但值得注意的问题,希望它们会很快得到解决。
  • 顺便说一句,不需要@-ms-keyframes,只需使用@keyframesanimation。 IE 支持原生规范 - browser support is here
猜你喜欢
  • 2012-07-08
  • 2012-08-07
  • 1970-01-01
  • 2012-11-16
  • 2012-08-15
  • 2016-06-04
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
相关资源
最近更新 更多