CSS3动画导致文本渲染不良

时间:2014-10-15 17:43:08

标签: css3 css-animations text-rendering

我在背景图片上尝试CSS3动画。一切运作良好,问题是在Chrome上,当动画进行时,文字最终会模糊:

动画期间:

enter image description here

关闭动画:

enter image description here

正如您所看到的那样,当关闭动画时文本渲染很好,我知道文本渲染的常见问题但我无法理解为什么动画时Chrome的渲染效果不佳正在处理。我不确定我能做些什么呢。我已经在Firefox和IE上测试了动画,没关系。顺便说一句,我在Windows上工作。

火狐:

enter image description here

IE:

enter image description here

修改

.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并且背景是动画的,文本就会正确显示。它仍然不是我想要的,因为我需要修复背景。

1 个答案:

答案 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>