CSS3 - трансформации

109

Когда мы изучали возможности HTML5 Canvas, то затронули возможность трансформаций — способов перемещения, масштабирования, наклона и вращения содержимого. На холсте трансформации можно использовать для изменения рисуемой на нем графики. А трансформации CSS3 служат для изменения внешнего вида элементов. Далее мы рассмотрим каждый вид CSS3-трансформаций.

Поворот

Трансформации CSS3 являются новой и экспериментальной возможностью. Поэтому при их использовании нужно указывать несколько версий свойства transform, каждую со своим префиксом разработчика браузеров. Далее приведен пример правила трансформации для вращения элемента со всем его содержимым:

<!-- HTML-разметка трансформируемого элемента -->
<figure>
      <img src="image.jpg" alt="C-Sharp" />
      <figcaption>Язык для промышленной разработки на платформе .NET Framework</figcaption>    
</figure>
figure {
	-moz-transform: rotate(45deg);
	-webkit-transform: rotate(45deg);
	-o-transform: rotate(45deg);
	-ms-transform: rotate(45deg);
	transform: rotate(45deg);
}

В предыдущем примере с помощью свойства трансформаций transform задается функция rotate(), которая вращает элемент на 45° вокруг его центра:

CSS3-трансформация вращения

Применение трансформации к какому-либо элементу страницы не влияет на другие ее элементы или ее компоновку. Например, если повернуть элемент, то он просто надвинется на смежные с ним элементы, как показано на рисунке выше.

Обратите внимание, что в предыдущем примере угол поворота задавался в градусах. Спецификация CSS3 предлагает возможность задавать угол и в других математических величинах:

Единицы измерения угла поворота CSS3-трансформации
Единица измерения CSS3-обозначение Описание Пример
Градусы deg Угол полной окружности 360° rotate(90deg)
Грады grad Единица измерения плоских углов, равная 1/400 угла полной окружности или π/200 rotate(100grad)
Радианы rad 2π радиан равно углу полной окружности rotate(1.57rad)
Обороты turn 1 угол полной окружности равен одному обороту rotate(.25turn)

Ниже показан пример правила таблицы стилей в котором используется такая же трансформация как и раньше, только с заданием другой единицы измерения:

figure {
	-moz-transform: rotate(0.125turn);
	-webkit-transform: rotate(0.125turn);
	-o-transform: rotate(0.125turn);
	-ms-transform: rotate(0.125turn);
	transform: rotate(0.125turn);
}

Масштабирование

Для использования анимации масштабирования используется функция scale(). Значение масштаба задается относительно единицы: scale(2) - исходный элемент будет увеличен в два раза, scale(0.5) - элемент уменьшается в два раза. Согласно этим правилам элемент масштабируется одинаково во все стороны, но вы можете задать направление: X - по горизонтали, Y - по вертикали, Z - глубина масштабирования.

Более того, функцию scale() можно использовать для создания эффекта отражения. Для этого нужно передать отрицательное значение в функцию scale(). Давайте рассмотрим некоторые примеры масштабирования. Для начала уменьшим нашу картинку с текстом в два раза:

figure {
	-moz-transform: scale(0.5);
	-webkit-transform: scale(0.5);
	-o-transform: scale(0.5);
	-ms-transform: scale(0.5);
	transform: scale(0.5);
}
CSS3-масштабирование: уменьшение масштаба

Теперь растянем элемент в два раза по оси X:

figure {
	-moz-transform: scaleX(2);
	-webkit-transform: scaleX(2);
	-o-transform: scaleX(2);
	-ms-transform: scaleX(2);
	transform: scaleX(2);
}
CSS3-масштабирование: растягивание изображения

Как видите здесь уже используется функция scaleX(), которая масштабирует элемент относительно оси X. И наконец, используем эффект отражения:

figure {
	-moz-transform: scaleX(-1);
	-webkit-transform: scaleX(-1);
	-o-transform: scaleX(-1);
	-ms-transform: scaleX(-1);
	transform: scaleX(-1);
}
CSS3-масштабирование: отражение

Перемещение

Для перемещения HTML-элемента используется функция translate(x,y), либо ее аналоги для конкретных осей translateX(x), translateY(y). Эти функции поддерживают отрицательные значения (сдвиг влево или вверх). Ниже показан пример использования трансформации перемещения:

figure {
	-moz-transform: translate(50px, -4em);
	-webkit-transform: translate(50px, -4em);
	-o-transform: translate(50px, -4em);
	-ms-transform: translate(50px, -4em);
	transform: translate(50px, -4em);
}

Искажение

Трансформация skew() искажает форму элемента. Например, возьмем правильный прямоугольник с закрепленным основанием. Если мы начнем толкать его верхнюю часть в сторону, то она сместится, в то время как основание останется на месте. В результате получим параллелограмм:

CSS3 skew

Значение искажения задается в градусах (можно указывать такие же единицы измерения, как и для трансформации поворота). Ниже показан пример использования трансформации искажения:

figure {
	-moz-transform: skewX(50grad);
	-webkit-transform: skewX(50grad);
	-o-transform: skewX(50grad);
	-ms-transform: skewX(50grad);
	transform: skewX(50grad);
}
Использования CSS3-трансформации искажения skew

Использование нескольких трансформаций

Вы можете объединить несколько трансформаций двумя способами: указать несколько трансформаций в одном правиле, разделив их пробелами или использовать матричную трансформацию (matrix transform), которая позволяет комбинировать несколькими трансформациями с помощью математической матрицы. Более подробно о матричной трансформации вы можете прочитать на сайте разработчиков браузера Opera - CSS Transforms Matrix, а ниже мы рассмотрим пример группирования нескольких трансформаций в одном правиле:

figure {
	-moz-transform: scale(1.5) translateX(10px) skew(10deg) rotate(0.175rad);
	-webkit-transform: scale(1.5) translateX(10px) skew(10deg) rotate(0.175rad);
	-o-transform: scale(1.5) translateX(10px) skew(10deg) rotate(0.175rad);
	-ms-transform: scale(1.5) translateX(10px) skew(10deg) rotate(0.175rad);
	transform: scale(1.5) translateX(10px) skew(10deg) rotate(0.175rad);
}

Сначала элемент увеличивается в полтора раза (используя трансформацию scale), потом перемещается на 10 пикселов влево (посредством трансформации translateX) и, наконец, наклоняется и поворачивается (используя трансформации skew и rotate).

Пройди тесты
Лучший чат для C# программистов