Подтвердить что ты не робот

Переход с преобразованием CSS в Chrome

Я использую преобразование CSS3 на фоновом изображении для увеличения при наведении.

Я тестировал в последних браузерах Opera, Safari и Firefox и работал хорошо и плавно, однако в Chrome переход очень рывкий.

Heres - это ссылка, наведите указатель мыши на социальные значки, чтобы понять, что я имею в виду. http://www.media-flare.com/pins/ - Я заметил, что при изменении размера браузера до мобильного вида, становится хуже.

Я сделал здесь версию jsfiddle и замедлил переход, поскольку это труднее увидеть.

http://jsfiddle.net/wsgfz/1/ - Это кажется отрывистым в хроме и firefox, гладко в сафари и в опере.

Есть ли что-нибудь, что я могу сделать, чтобы сделать переход более плавным?

Вот код, если вы не можете просмотреть jsfiddle

HTML

<ul class="social">
    <li><a href="" class="fbook">Facebook</a></li>
    <li><a href="" class="twit">Twitter</a></li>
    <li><a href="" class="tmblr">Tumbler</a></li>
    <li><a href="" class="pntrst">Pinterest</a></li>
    <li><a href="" class="insta">Instagram</a></li>
    <li><a href="" class="rss">RSS</a></li>
</ul>

CSS

.social {
   position: relative;
   list-style:none;
}

.social > li > a {
   text-indent: 100%;
   white-space: nowrap;
   overflow: hidden;
   color: transparent;
}

.social > li > a {
   text-indent: 100%;
   white-space: nowrap;
   overflow: hidden;
   color: transparent;
}

.fbook, .twit, .tmblr, .pntrst, .insta {
   background: url(http://placehold.it/350x150) center center;
   width: 78px;
   height: 90px;
   background-size: cover;
   float: left;
   margin: 30px;
   -webkit-transition: all 0.8s ease;
   -moz-transition: all 0.8s ease;
   transition: all 0.8s ease;
 }

 .fbook {background-position: 0 0}
 .twit {background-position: -78px 0}
 .tmblr {background-position: -156px 0}
 .pntrst {background-position: -232px 0}
 .insta {background-position: -310px 0}

.fbook:hover, .twit:hover, .tmblr:hover, .pntrst:hover, .insta:hover {
    -webkit-transform: scale(1.5);
    -moz-transform: scale(1.5);
    transform: scale(1.5);
 }
4b9b3361

Ответ 1

Трансформации, похоже, работают лучше, чем переходы в Chrome. Попробуйте следующее:

.social {
  position: relative;
  list-style: none;
}
.social > li > a {
  text-indent: 100%;
  white-space: nowrap;
  overflow: hidden;
  color: transparent;
}
.social > li > a {
  text-indent: 100%;
  white-space: nowrap;
  overflow: hidden;
  color: transparent;
}
.fbook,
.twit,
.tmblr,
.pntrst,
.insta {
  background: url(http://placehold.it/350x150) center center;
  width: 78px;
  height: 90px;
  background-size: cover;
  float: left;
  margin: 30px;
  -webkit-transform: translate(0px, 0);
  -webkit-transition: -webkit-transform 0.8s ease;
  -moz-transform: translate(0px, 0);
  -moz-transition: -webkit-transform 0.8s ease;
  transform: translate(0px, 0);
  transition: -webkit-transform 0.8s ease;
}
.fbook {
  background-position: 0 0
}
.twit {
  background-position: -78px 0
}
.tmblr {
  background-position: -156px 0
}
.pntrst {
  background-position: -232px 0
}
.insta {
  background-position: -310px 0
}
.fbook:hover,
.twit:hover,
.tmblr:hover,
.pntrst:hover,
.insta:hover {
  -webkit-transform: scale(1.5);
  -moz-transform: scale(1.5);
  transform: scale(1.5);
}
<ul class="social">
  <li><a href="" class="fbook">Facebook</a>
  </li>
  <li><a href="" class="twit">Twitter</a>
  </li>
  <li><a href="" class="tmblr">Tumbler</a>
  </li>
  <li><a href="" class="pntrst">Pinterest</a>
  </li>
  <li><a href="" class="insta">Instagram</a>
  </li>
  <li><a href="" class="rss">RSS</a>
  </li>
</ul>

Ответ 2

Обновление 2017

В ответ на сообщение @Matt Coughlin, браузеры, которые поддерживают анимацию, теперь отображают анимацию CSS и JS в своем собственном потоке....

Анимированные на основе CSS и веб-анимации, поддерживаемые изначально, обычно обрабатываются в потоке, известном как "поток композитора". Это отличается от "основного потока" браузера, в котором выполняются стилизация, макет, рисование и JavaScript. Это означает, что если браузер выполняет некоторые дорогие задачи в основном потоке, эти анимации могут продолжаться, не прерываясь.

https://developers.google.com/web/fundamentals/design-and-ui/animations/animations-and-performance

Этот разработчик doc также поддерживает принятый в настоящее время ответ от пользователя @user1467267...

Где вы можете, вы должны избегать анимации свойств, которые запускают макет или краску. Для большинства современных браузеров это означает ограничение анимации до непрозрачности или преобразования, которые обозреватель может очень оптимизировать; не имеет значения, обрабатывается ли анимация JavaScript или CSS.

В документе также предлагается реализовать использование свойства will-change для свойства, которое вы будете анимировать, чтобы браузер мог выполнять дополнительную оптимизацию для этих свойств. В моем личном опыте это только кажется заметным в хром для непрозрачности и преобразования.

element{
  will-change: transform, opacity;
}

Ответ 3

Основная проблема

Когда анимация работает медленно и выглядит неравномерно, она просто раскрывает ограничения браузера, которые всегда существуют.

Браузеры не имеют выделенного потока для рендеринга анимаций. Анимации должны конкурировать с другими действиями браузера, такими как события пользовательского интерфейса. И порой браузер также конкурирует с другим программным обеспечением, запущенным на компьютере. Кроме того, аппаратное ускорение, доступное для браузеров, вероятно, несколько ограничено.

Анимация с замедлением работает еще медленнее в начале и/или конце анимации, что делает естественную неравномерность анимаций еще более очевидной.

Решения

Простейшим решением для предотвращения неравномерности настолько очевидным является увеличение скорости анимации и, при необходимости, удаление или уменьшение использования ослабления. Возможно, будет возможно использовать тип ослабления, который не замедляется так сильно в начале и в конце.

Вперёд, еще один вариант - использовать аппаратное ускорение WebGL (тег canvas HTML5 с 3D-контекстом), что должно уменьшить проблему. Поскольку аппаратное ускорение становится более распространенным и более совершенным в браузерах и устройствах, должно стать возможным сделать сложные анимации, которые выполняются так же гладко, как и старые анимации Flash.