Переходы CSS3: «Переход: все» медленнее, чем «Переход: x»?


82

У меня вопрос о скорости рендеринга свойства перехода css3.

Предположим, у меня есть несколько элементов:

div, span, a {transition: all}

div {margin: 2px}
span {opacity: .5}
a:hover {background-position: left top}

div:hover {margin: -100px}
span:hover {opacity: 1}
a:hover {background-position: -5px top}

Гораздо эффективнее нацелить все переходы для всех этих элементов с помощью одного объявления div, span, a {transition: all}. Но у меня вопрос: будет ли «быстрее» с точки зрения плавности и скорости рендеринга анимации нацеливаться на конкретное свойство перехода каждого элемента? Например:

div {margin: 2px; transition: margin .2s ease-in}
span {opacity: .5; transition: opacity .2s ease-in}
a {background-position: left top; transition: background .2s ease-in}

div:hover {margin: -100px}
span:hover {opacity: 1}
a:hover {background-position: -5px top}

Моя логика заключается в том, что если «движок» css должен искать «все» свойства перехода, даже если есть только одно свойство для элемента, это может замедлить работу.

Кто-нибудь знает, так ли это? Благодаря!


1
Это всегда было моей теорией, но я никогда не замечал разницы на практике.
ThinkingStiff

3
Я ожидал, что на самом деле выполнение анимации на экране будет намного дороже, чем синтаксический анализ CSS. Если вы не злоупотребляете системой, я бы особо не беспокоился об этом.
StilesCrisis

Я думаю, что если есть разница, она будет в миллисекундах, но я хочу знать, есть ли даже минутная разница. спасибо за ваши комментарии
HandiworkNYC.com

1
Мне это кричит «детали реализации, зависящие от производителя» ...
BoltClock

Ответы:


73

Да, использование transition: allможет вызвать серьезные проблемы с производительностью. Может быть много случаев, когда браузер будет искать, если ему нужно выполнить переход, даже если пользователь его не увидит, например, изменение цвета, изменение размеров и т. Д.

Самый простой пример, который я могу придумать, - это: http://dabblet.com/gist/1657661 - попробуйте изменить уровень масштабирования или размер шрифта, и вы увидите, что все становится анимированным. Конечно, не могло быть много таких взаимодействий с пользователем, но могут быть некоторые изменения интерфейса, которые могут вызвать перекомпоновку и перерисовку в некоторых блоках, которые могут заставить браузер попробовать и анимировать эти изменения.

Поэтому, как правило, рекомендуется не использовать transition: allи использовать вместо этого прямые переходы.

Есть и другие вещи, которые могут пойти не так с allпереходами, например всплеск анимации при загрузке страницы, когда сначала будут отображаться исходные стили для блоков, а затем применить стиль с анимацией. Во многих случаях это не то, что вам нужно :)


ссылка мертва, хотелось бы увидеть ваш пример
MMachinegun

Исправлена ​​ссылка на весь балет
kizu

Я тоже хотел бы увидеть пример. Может, его больше нет?
Drazzah 06

11
На самом деле это не ответ на исходный вопрос. Да, вы могли случайно перенести объекты, которые не собирались анимировать, но OP спрашивал, вызывает ли правило «все» какое-либо снижение производительности само по себе, при условии, что не было инициировано никаких непреднамеренных переходов.
Оуэн Масбак

30

Я использовал allдля случаев, когда мне нужно было анимировать более одного правила. Например, если бы я хотел изменить color& background-colorна :hover.

Но оказывается, что вы можете настроить более одного правила для переходов, поэтому вам никогда не придется прибегать к allнастройке.

.nav a {
  transition: color .2s, text-shadow .2s;
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.