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

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

У меня вопрос о скорости рендеринга для свойства перехода 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 должен искать "все" свойства перехода, даже если для элемента есть только одно свойство, это может замедлить работу.

Кто-нибудь знает, если это так? Спасибо!

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

.nav a {
  transition: color .2s, text-shadow .2s;
}