Эта статья является частью нашей серии CSS AtoZ. Вы можете найти другие записи серии здесь .
Вы можете просмотреть полную транскрипцию и скринкаст для соответствующего видео о translateX
здесь .
Добро пожаловать в нашу серию AtoZ CSS! В этой серии я буду изучать различные значения CSS (и свойства), каждое из которых начинается с другой буквы алфавита. Мы знаем, что иногда скринкастов недостаточно, поэтому в этой статье мы добавили краткие советы о различиях между translate
position
Х для translate
position
Существует несколько свойств CSS для размещения элементов на странице. К ним относятся свойства макета большого изображения, такие как float
margin
padding
position
translate()
На первый взгляд, position:relative
transform:translate()
В чем разница между translate
position:relative
В этой статье мы рассмотрим ряд различий между этими методами размещения элементов, но сначала позвольте мне пояснить, что делают эти различные свойства.
Если мы устанавливаем position:relative
абсолютно позиционирующих элементов внутри. Вероятно, это наиболее распространенное использование относительного позиционирования, но это не то, что мы обсуждаем здесь.
Если мы скомбинируем position:relative
top
bottom
left
right
Элемент будет перемещен на новый слой, и его «порядок слоев» или его порядок наложения затем можно будет контролировать с помощью свойства z-index
.thing {
position: relative;
top: 100px;
left: 50px;
}
В приведенном выше примере элемент будет перемещен на 100px
50px
При использовании transform:translate(x,y)
Тот же результат, что и выше, может быть достигнут с помощью следующего фрагмента:
.thing {
transform: translate(50px, 100px);
}
В этом случае мы переводим координаты элемента на 50px
100px
Конечный результат визуально такой же, как в предыдущем примере position
Итак, почему у нас есть два способа сделать то же самое? Ну, есть некоторые различия между этими подходами …
Поддержка браузера
position
transform
В результате существуют различия в поддержке браузеров, хотя на самом деле единственными браузерами, которые не поддерживают 2D-преобразования, являются IE8 и ниже.
Если вам нужно поддерживать старые версии IE, transform
Ускорение графического процессора
Свойство transform
translate()
position
Если вы хотите переместить элемент как часть анимации перехода или ключевого кадра, предпочтительнее использовать translate
position
Для получения дополнительной информации об этом, включая объяснение и профилирование производительности, посмотрите это видео от Пола Айриша .
Процентные значения ведут себя по-разному
Одно из основных различий между этими двумя способами размещения элементов заключается в том, как они реагируют на значения в процентах.
Возьмите следующую разметку и стили:
<div class="box position"></div>
<div class="box transform"></div>
.box {
width: 200px;
height: 200px;
}
.position {
position: relative;
left: 50%;
background: red;
}
.transform {
transform: translateX(50%);
background: blue;
}
Оба элемента получили смещение от их левого края на 50%
Левый край красного поля будет на 50% дальше от края его родительского контейнера.
Левый край синей рамки будет на расстоянии 100px
Это расстояние объясняется тем, что 50% от 200px
100px
При установке процентных значений с помощью translate
Совместить position
translate
И последнее замечание: position
transform
Это позволяет нам комбинировать абсолютное позиционирование, чтобы поместить элемент в очень конкретное место на странице, а затем изменить это position
transform
Примером этого может быть анимация позиционированного элемента вверх и вниз или влево и вправо. Или мы можем комбинировать позиционирование с translate
Таким образом, хотя эти два метода размещения элементов могут использоваться для достижения сходных результатов, есть некоторые существенные различия, и объединение сильных сторон каждого подхода делает их действительно мощным набором инструментов.