Переходи CSS3: Чи перехід "все" повільніший за "перехід: х"?


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

Я думаю, що якщо є різниця, це буде в мілісекундах - але я хочу знати, чи є навіть хвилинна різниця. thx за ваші коментарі
— HandiworkNYC.com

1
Мені це кричить "детально про реалізацію постачальника" ...
— BoltClock

Відповіді:


73

Так, використання transition: allможе призвести до значних недоліків у роботі. Може бути багато випадків, коли браузер буде виглядати, якщо йому потрібно здійснити перехід, навіть якщо користувач цього не побачить, наприклад, зміни кольору, зміни розмірів тощо.

Найпростіший приклад, який я можу придумати, такий: http://dabblet.com/gist/1657661 - спробуйте змінити рівень масштабування або розмір шрифту, і ви побачите, що все стає анімованим. Звичайно, не могло бути багато таких взаємодій з користувачами, але можуть бути деякі зміни інтерфейсу, які можуть спричинити перепланування та перемальовування в деяких блоках, що може сказати браузеру спробувати анімувати ці зміни.

Отже, загалом, рекомендується не використовувати transition: allта використовувати прямі переходи.

Є деякі інші речі, які можуть піти не так із allпереходами, як сплеск анімації при завантаженні сторінки, де спочатку він відображав початкові стилі для блоків, а потім застосовував стиль з анімацією. У багатьох випадках це не те, що ти хочеш :)


посилання мертве, хотів би бачити ваш приклад
— MMachinegun

Виправлено посилання на всю проблему
— kizu

Я теж хотів би бачити приклад. Може, його вже не існує?
— Дразза

11
Це насправді не відповідь на вихідне запитання. Так, ви можете випадково перевести речі, які ви не збиралися анімувати, але OP запитував, чи не викликає правило «все» самостійно будь-які результати, припускаючи, що не було ініційовано ненавмисних переходів.
— Owen Masback

30

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

Але виявляється, що ви можете націлити кілька правил для переходів, тому вам ніколи не потрібно вдаватися до allналаштування.

.nav a {
  transition: color .2s, text-shadow .2s;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.