Вопрос проверяет понимание различий между position: relative и transform: translate для сдвига элементов, что важно для оптимизации производительности и корректного позиционирования в CSS.
Свойство position: relative сдвигает элемент относительно его нормального положения, но при этом его исходное место в потоке документа сохраняется. Это означает, что другие элементы не заполняют освободившееся пространство, и браузеру приходится пересчитывать layout при изменении позиции. Свойство transform: translate также визуально сдвигает элемент, но не влияет на поток документа и не вызывает перерасчет layout. Вместо этого браузер создает отдельный слой для элемента и перемещает его на GPU, что значительно быстрее.
При использовании position: relative изменение координат вызывает reflow (пересчет геометрии) и repaint (перерисовку), что может быть затратно, особенно при анимациях. transform: translate работает на этапе compositing, который выполняется на GPU, поэтому анимации с его использованием обычно плавные и не нагружают основной поток. Это особенно важно для мобильных устройств и сложных интерфейсов.
/* Плохо для анимации */
.element {
position: relative;
left: 100px;
top: 50px;
}
/* Хорошо для анимации */
.element {
transform: translate(100px, 50px);
}position: relative полезен, когда нужно сдвинуть элемент, но при этом сохранить его место в потоке, например, для наложения или создания контекста позиционирования для абсолютно позиционированных дочерних элементов. Также он используется для создания z-index контекста.
Для простого сдвига и особенно для анимаций предпочтительнее transform: translate из-за лучшей производительности и отсутствия влияния на layout. position: relative стоит применять только тогда, когда требуется сохранить место элемента или создать контекст позиционирования.