CSS3 — Android: translate3d (0, 0, 0) — принудительное аппаратное ускорение

#android #css #css-selectors #css-transforms

#Android #css #css-селекторы #css-преобразования

Вопрос:

Недавно у меня возникла проблема с производительностью в приложении, которое я разрабатывал для Android, несмотря на то, что тег hardwareAccelerated в манифесте включен.

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

 <script>
    var elem = popup;
    elem.style.display = 'block';
</script>

<style>
    #popup {
        display: none;
    }
</style>

<div id="popup">1, 2, 3...</div>
  

Затем я обнаружил трюк, который я ранее находил в прошлом и забыл о:

 -webkit-transform: translate3d(0, 0, 0);
  

Это отлично работает, но я немного смущен тем, к какому классу / элементу это относится.

Ранее я использовал следующее:

 * {
    -wekbit-transform: translate3d(0, 0, 0);
}
  

Который работал нормально, но на странице у меня был UL прокрутки, UL плохо отображался после прокрутки, поэтому после небольшого поиска в Google я изменил * { ... } body div { ... } , и это кажется намного более надежным.

Итак, возникает вопрос: существует ли конкретный селектор, к которому, как правило, применяется -webkit-transform ? Я думал, что в данном случае это анимируемый элемент #popup , но когда я попытался это сделать, никакой радости…

Я надеюсь, что это имеет смысл. Спасибо.

Ответ №1:

Я удалил его, поскольку это вызывало странное поведение на маленьких экранах (смартфоны / портреты). Родительский селектор, который имел

 .container > * {-webkit-translate3d(0,0,0)}
  

вызванный коллапс во вложенных элементах. Я заметил это только на маленьких экранах, и я мог найти любое достойное решение.