Ужасный мегабюджетный фильм Майкла Бэя о CSS?! Нет, мощное манипулирование формой, размером и положением окна и его содержимого с помощью свойства transform.
По умолчанию CSS-блоки, эти визуальные представления HTML-элементов, имеют квадратную форму. По крайней мере, прямоугольную; ровную, с четырьмя прямыми сторонами и четырьмя скучными прямыми углами. Но с помощью transform вы можете растягивать и придавать этим коробкам всевозможные формы.
На этой странице будут указаны только свойства transform и transform-origin, но на практике вы, вероятно, захотите продублировать их с помощью -webkit-transform и -webkit-transform-origin для достижения тех же результатов в Safari и Chrome, а также -ms-transform и -ms-transform-origin для Internet Explorer 9, самой ранней версии IE, которая будет поддерживать преобразования.
Манипулируя рамкой в двух измерениях, можно использовать transform для поворота, перекоса, масштабирования и перевода рамки и её содержимого.
Четыре основные функции 2D-преобразования — поворот, перекос, масштабирование и перевод.
Вращение
Результатом следующего будет квадратная оранжевая коробка со всем её содержимым — текстом, изображениями, чем угодно — послушно стоящая по стойке смирно:
.note { width: 300px; height: 300px; background: hsl(36,100%,50%); }
Но вы можете развернуть этих солдат, добавив дополнительное объявление:
transform: rotate(-10deg);
Это повернёт коробку и, что важно, всё, что в ней находится, на десять градусов против часовой стрелки.
Перекосы
Смещение позволяет изменять горизонталь и вертикаль таким образом, чтобы…
transform: skew(20deg,10deg);
… отклонится от оси x на 20 градусов по оси y на 10 градусов.
Вы также можете указать один угол, например skew(20deg), который является эквивалентом skew(20deg,0).
Масштабирование
Очевидно, что вы можете изменить свойства поля width и height, но это не повлияет на размер чего-либо внутри него. Масштабирование, однако, увеличит не только ширину и высоту, но и размер всего, что содержится в поле:
transform: scale(2);
Это умножит размер на два. Вы можете использовать любое положительное число, включая значение меньше “1”, например ”0,5″, если хотите использовать уменьшающий луч.
Вы также можете масштабировать горизонтальные и вертикальные размеры отдельно:
transform: scale(1,2);
При этом горизонталь останется как есть (поскольку это масштаб, равный 1), а вертикаль умножится на два.
Перевод
Вы можете сдвигать поле по горизонтали и вертикали с помощью transform: translate:
transform: translate(100px,200px);
Аналогично position: relative; left: 100px; top: 200px;, это переместит поле на 100 пикселей вправо и на 200 пикселей вниз.
Помимо упомянутых значений, если вы хотите настроить таргетинг на отдельную ось, вы также можете использовать skewX, skewY, scaleX, scaleY translateX, translateY.
Комбинирование преобразований
Хотите поворачивать и масштабировать одновременно? Вы сумасшедший ребёнок. Вы можете сделать это, просто разделяя значения пробелами, например:
transform: rotate(-10deg) scale(2);
Важен порядок значений ─ последнее будет выполнено раньше первого. В предыдущем примере поле будет масштабировано, а затем повёрнуто. Следовательно, он отличается от transform: scale(2) rotate(-10deg);, который будет поворачиваться, а затем масштабироваться.
В качестве альтернативы вы могли бы использовать функцию matrix. matrix выполняет всё ─ поворот, перекос, масштабирование и перевод. Она принимает шесть значений:
transform: matrix(2,-0.35,0.35,2,0,0);
Эти значения не совсем понятны и включают математику (или только одну математику, если вы придерживаетесь американских убеждений), с которой, если вы действительно хотите разобраться (преимущества заключаются не только в краткости, но и в точности), возможно, стоит обратить внимание на спецификации.
Происхождение
Не хватает одного важного аспекта. Если вы преобразуете поле, то задействован ещё один параметр: происхождение преобразования. Например, если вы вращаете, она по умолчанию будет вращаться в точке, которая является центром поля; если бы у вас была карточка, воткните булавку прямо в её середину, а затем приклейте её ко лбу (не делайте этого), карточка вращалась бы от середины. Однако вы можете изменить место на карте, к которому прикреплён PIN-код transform-origin:
transform-origin: 0 0;
В этом примере блоку будет предложено преобразовать (повернуть, как в предыдущем примере) слева вверху, при этом первый “0” будет горизонтальным, второй ─ вертикальным. Эти значения, конечно, могут отличаться — как и все другие значения x-y, и вы можете использовать обычные значения center, top right bottom, left длины и процента, включая отрицательные.
Одно и то же поле, повёрнутое по часовой стрелке, с разными источниками преобразования.
И всё это только в двух ничтожных измерениях. transform это левиафан с ещё большей силой, который также может быть использован для трёхмерной магии. На самом базовом уровне вы можете использовать rotateX и rotateY, которые будут вращаться “в сторону” или “от” вас по осям x и y, и есть такие, как translate3d, scale3d и устрашающие matrix3d, все из которых имеют ещё большие трудности для браузера, чем их 2D-аналоги.
Страницы в тему:
- Следующая страница: Градиенты
- Предыдущая страница: CSS фоны: кратные, размер и происхождение
- CSS-переходы
- Свойство CSS: transform
- Свойство CSS: transform-origin
Примеры CSS^