Анимация CSS3 вызывает плохую визуализацию текста

Я пробую анимацию CSS3 на фоновом изображении. Все работает хорошо, проблема в том, что в Chrome текст размывается, когда идет анимация:

Во время анимации:

введите здесь описание изображения

Отключение анимации:

введите здесь описание изображения

Как вы можете видеть, рендеринг текста в порядке, когда анимация отключена, я знаю, что есть обычная проблема с рендерингом текста, но я не могу понять, почему рендеринг в Chrome плохой, когда анимация выполняется. Я не уверен, что могу что-то с этим поделать. Я протестировал анимацию в Firefox и IE, и все в порядке. Кстати, я работаю на Windows.

Fire Fox:

введите здесь описание изображения

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, и фон анимировался, текст отображался правильно. Это все еще не то, что я хочу, потому что мне нужно исправить фон.


person Daniel Grima    schedule 15.10.2014    source источник
comment
comment
Спасибо за ваш ответ, я попробовал решение, представленное в опубликованной ссылке, но не повезло. Я опубликую CSS, который у меня есть, чтобы прояснить ситуацию.   -  person Daniel Grima    schedule 16.10.2014
comment
Вы пробовали другое предложение из этой темы? -webkit-transform: translate3d(0,0,0);   -  person APAD1    schedule 16.10.2014
comment
Ага, тоже не повезло. Это странная проблема, большинство вопросов, которые я обнаружил, имели проблемы из-за translate3d, которые я не использую, плюс, как я уже упоминал, когда я удаляю position: fixed, все возвращается к норме.   -  person Daniel Grima    schedule 16.10.2014
comment
position:fixed довольно сильно нарушен во многих аспектах по всем направлениям. Оптимально избегать его, когда это возможно. Вы даже можете попробовать использовать абсолютное позиционирование с JS, не уверен, как это сравнить с производительностью. Не может быть намного хуже   -  person Zach Saucier    schedule 16.10.2014
comment
Спасибо за ваш ответ еще раз. Я решил проблему, используя решение, представленное ниже. Разрешите спросить, что не так с position: fixed?   -  person Daniel Grima    schedule 16.10.2014


Ответы (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>

person misterManSam    schedule 16.10.2014
comment
Большое спасибо, что сделал трюк. Так что я предполагаю, что проблема transform , а не position: fixed. - person Daniel Grima; 16.10.2014
comment
Да, я думаю, что ошибка возникает при сочетании обоих преобразований. Я видел такое поведение раньше, особенно в Chrome, и обычно это связано с некоторой комбинацией. К счастью, вы можете получить такой же вид другим способом :) Однако это ошибка, так что, надеюсь, в будущем она не будет проблемой! - person misterManSam; 16.10.2014
comment
Да, к счастью, это можно решить :) Я заметил, что transform действительно вызывает несколько незначительных, но заметных проблем, надеюсь, они скоро будут исправлены. - person Daniel Grima; 16.10.2014
comment
Кроме того, нет необходимости в @-ms-keyframes, просто используйте @keyframes и animation. IE поддерживает нативную спецификацию — поддержка браузера здесь - person misterManSam; 16.10.2014