Основополагающая магия -webkit-backface-visibility

Я хотел бы знать, почему webkit-backface-visibility похож на этот универсальный аспирин, который решает или ухудшает все разнородные проблемы, в основном связанные с артефактами и мерцанием.

Я прочитал и понял, на что действительно backface-visibility предназначен: он контролирует, что 3D-повернутые объекты видны, когда они не обращены к экрану. Там хорошая демонстрационная демонстрация здесь

Но мне любопытно, почему каждый раз, когда у меня возникают странные глюки в мире CSS, полностью не связаны с 3D-вращениями и их скрытыми образами, применяя backface-visibility к проблемному слою или к одному из его предков обычно помогает ухудшать ситуацию, но редко ничего не делает. Я говорю о таких вещах, как

  • Анимация мерцает
  • Исправлены проблемы с Z-указателями уровня.
  • Дисплей: нет < > видимые мерцания и артефакты
  • Прокрутка мерцания

Интересно и всегда в моем скромном опыте, backface-visibility:hidden имеет тенденцию решать проблемы с фиксированным позиционированием, а backface-visibility:visible - "лучший" для мерцания. Также интересно, что в Chrome и Safari побочные эффекты разные, но есть мальчик!

Я работаю над создателем Visual HTML, поэтому ситуации были у меня мерцание/артефакты довольно сложны (т.е. анимация по нескольким слоям, прокрутка div за фиксированными элементами, абсолютная по фиксированному с z-index....)

Кто-нибудь может просветить меня?

Ответ 1

Я не уверен, о какой магии вы говорите, но есть определенные случаи, когда свойство CSS backface-visibility может помочь продвинуть элемент DOM на слой, чтобы браузер может использовать графический процессор при отображении этого элемента.

ПРИМЕЧАНИЕ: только значение hidden будет повышать уровень, а не visible.

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

Есть несколько других CSS свойств, которые делают то же самое, например translateZ(0) или translate3d(0,0,0). Это все хаки, и они будут заменены новым свойством CSS will-change.

Если вы выполняете анимацию с помощью CSS, лучшим вариантом с точки зрения производительности является изменение только этих 2 CSS свойств: transform и opacity. Но так как браузеры постоянно меняются, это может измениться и в будущем. Цель состоит в том, чтобы сделать каждое свойство CSS как можно более плавным (в идеале при 60FPS) при анимации. Я знаю, что команда Chrome очень усердно работает над этим, но не уверен насчет других поставщиков.