CSS-трансформация и анимация

CSS-трансформация и анимация

В CSS3 имеются параметры (свойства), посредством которых можно трансформировать (поворачивать, масштабировать и т.д.) элементы страницы, а также анимировать (плавно изменять во времени) их свойства. При этом можно обойтись без сценариев на JavaScript и SVG. В браузерах (Opera 18 и Chrome 31) в именах CSS-свойств пока требуется указывать специальные (вендорные) префиксы -o- и -webkit- соответственно (например, -o-transform и -webkit-transform).

CSS-трансформация

Трансформации в CSS3 задаются посредством свойства transform. Выберите в списках вид трансформации (значение свойства transform) и ее центр (значение свойства transform-origin) и посмотрите результат ее применения к элементу <div>, содержащему текст и картинку. Под списками отображаются CSS-свойства (без вендорных префиксов), соответствующее выбранной трансформации. Каждая трансформация здесь применяется к исходному элементу, а не к результату предыдущей трансформации.

Вид трансформации:

Центр трансформации:

Несколько трансформаций вместе

В качестве значения свойства transform можно указать несколько видов элементарных трансформаций: Например, следующий параметр задает две элементарные трансформации — поворот и масштабирование:
transform: rotate(20deg) scale(1.2); 

Примечание

Для более ранних версий Firefox можно можно было использовать в качестве значения свойства transform функцию matrix(), задающую матричное преобразование. О смысле матричных преобразований я уже писал в связи с SVG (масштабируемая векторная графика).

Вот вид матрицы 2d-трансформации и соответствующее свойство CSS3:

|a11 a12 a13|
|a21 a22 a23|   transform:matrix(a11,a21,a12,a22,a13,a23)
| 0   0   1 |
Особенность применения matrix(), как и др. функций трансформации, в CSS заключается в необходимости указывать единицы измерений (например, deg, px, %).

Графические фильтры трансформации CSS для старых IE

IE 10+ поддерживает свойство transform, IE 9 — нет, а IE 8 совсем не поддерживает CSS3. Однако в старых IE для трансформаций можно применять специальные графические фильтры, которые не поддерживаются другими браузерами. Среди фильтров есть такой, значением которого является matrix().

В IE8+ фильтр матричной трансформации задается так:

filter:progid:DXImageTransform.Microsoft.Matrix(M11=a11,M12=a12,M21=a21,M22=a22,"auto expand")
Поскольку здесь не указываются элементы a13 и a23 матрицы трансформации, то данный фильтр не выполняет перенос (translateX и translateY). Другие же преобразования, такие как масштабирование, поворот, наклон и отражения, могут быть выполнены.

Это элемент, к которому применяются трасформации:
Картинка

CSS-анимация

Анимация прямоугольника при наведении на него мыши
Для анимации в CSS3 предназначен ряд параметров, из которых важнейшим является transition. В качестве значения можно задать строку, содержащую список (через запятую) элементов, в каждом из которых указаны имя анимируемого параметра CSS, длительность анимации и ее характер. Например, если требуется плавно изменить цвет фона и ширину элемента, то применяется такой параметр:
 transition: background-color 2s ease, width 1s linear;
 
Здесь приведен пример анимации прямоугольника (элемента <div>), точнее, изменения его размеров, цвета заливки и поворота. Анимация начинается при наведении мыши, а заканчивается в соответствии с указанными длительностями. Характер анимации задается ключевым словом, соотетствующим некоторой кривой Безье: ease, ease-in, ease-out, ease-in-out, linear. Можно еще непосредственно задать кривую Безье (cubic-bezier(x1,y1,x2,y2)).
Вот HTML- и CSS-код анимации прямоугольника:
 <div id="rect">Анимация прямоугольника при наведении на него мыши</div>
 
#rect { 
	width:100px;
	height:70px;
	background-color:#00ffff;
	border:solid 1px blue;
	box-shadow:5px 5px rgba(100,100,100,0.5);
	float:left;
	margin:10px;
	padding:5px;
}
#rect:hover { /* параметры, действующие при наведении мыши */
	width:200px;
	height:100px;
	background-color:red;
	/* Трансформация: */
	transform:rotate(30deg);
	-webkit-transform:rotate(30deg);
	-o-transform:rotate(30deg);
	/* Анимация: */
	transition:width 2s ease, background-color 3s ease, transform 1s ease-in;
	-webkit-transition:width 2s ease, background-color 3s ease, transform 1s ease-in;
	-o-transition:width 2s ease, background-color 3s ease, transform 1s ease-in;
}
 

Другие примеры