Анимация CSS3. Создание баннеров

Авторы учебного курса:
Арефьева Анастасия Александровна,
студентка гр. ЗКТ-402С РГППУ, выпуск 2019 г.
Власова Наталья Сергеевна,
доцент кафедры информационных систем и технологий РГППУ




Урок 1. Трансформация

Цель: изучить применение свойства transform.

Задачи:

  • изучить функцию перемещения элемента translate();
  • изучить функцию масштабирования элемента scale();
  • изучить функцию вращения элемента rotate();
  • изучить функцию искажения элемента skew().


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

Функция перемещения (сдвига) - translate()

Сдвигает элемент на заданное значение по горизонтали и вертикали в плоскости экрана.

transform: translate(tx, ty)

Здесь:
tx — значение смещения по оси X в пикселях, процентах или других единицах CSS;
ty — смещение по оси Y. Если значение ty не указано, то оно считается равным 0: translate(60px) соответствует translate(60px, 0).

Синтаксис:
transform: translate(50px, 0) РАВНОСИЛЬНО transform: translate(50px)
transform: translate(0, -50px) //сдвиг вверх на 50px
transform: translate(100px, 50px) //сдвиг вправо на 100px и вниз на 50px
transform: translate(-3%)) //сдвиг влево на 3%

Задание №1

1. Создайте html файл.

2. Создайте в данном файле блок с квадратом, для которого мы будем применять трансформацию, т.е. напишите код из рисунка 1.

Рисунок 1

3. Создайте css файл, в котором пропишете стили для нашего квардрата (рисунок 2). В дальнейшем, в этом же файле, будем прописывать свойства трансформации.

Рисунок 2

В результате у вас должен получиться блок, который вы можете увидеть на рисунке 3.

Рисунок 3

3. При помощи элемента translate(), функции transform, сделаем так, что бы при наведении курсора мыши квадрат уходил вниз на 50px.
Для этого в нашем файле стилей укажем псевдокласс :hover для нашего стиля .kvadrat (рисунок 4).

Рисунок 4

Примечание: префиксы -o-; -ms-; -moz-;-webkit- позволяют настроить свойства для конкретного браузера, так как без использования данных префиксов некоторые свойства могут отображаться не корректно.

4. Так же в стиле .kvadrat есть свойство transition: 2s; (позволяет делать плавные переходы между двумя значениями какого-либо CSS-свойства), чтобы квадрат спускался плавно в течении двух секунд.

5. Если вы сделали всё правильно, то при наведении курсора на квадрат должна получиться анимация, как на рисунке 5.

Рисунок 5

6. Сохраните файл с результатом под названием lab1_transform.html

Функция масштабирования – scale()

Задаёт масштаб элемента по горизонтали и вертикали.

transform: scale(sx, sy);

Здесь:
sx — изменение масштаба по оси X;
sy — изменение масштаба по оси Y.
Значение больше 1 увеличивает масштаб элемента, меньше 1, наоборот, его уменьшает.
Если задано только одно значение, то масштабирование будет происходить пропорционально в обе стороны: scale(1.2) соответствует scale(1.2, 1.2).
Отрицательные значения отзеркаливают элемент.

Синтаксис:
transform: scale(3, 1]); //увеличение ширины в 3 раза
transform: scale(1, 0.5); //уменьшение высоты в 2 раза
transform: scale(1.5); //увеличение размера в 1,5 раза

Задание №2

В данном задании изучим элемент scale(), который позволяет увеличить или уменьшить элемент.

1. В этом же файле lab1_transform.html создайте квадрат аналогичный квадрату из первого задания с классом kvadrat2.

3. Увеличим его при наведении при помощи элемента scale(). Пусть в нашем задании увеличиваются только верхнии и нижнии границы, при этом в ширину он остается такой же.
Для этого укажем значение scaleY(1.7). Реализуйте код, как на рисунке 6.

Рисунок 6

4 В результате должно получиться следующая анимация (рисунок 7):

Рисунок 7

5. Сохраните файл.

Функция поворота – rotate()

Поворачивает элемент на заданный угол.

transform: rotate(α)

Здесь: α — угол поворота. Положительное значение поворачивает элемент по часовой стрелке, отрицательное против.

Синтаксис:
transform: rotate(90deg) //поворот по часовой на 90 градусов
transform: rotate(-180deg) //поворот против часовой на 180 градусов

Задание №3

1. Создайте квадрат аналогичный прошлым с классом kvadrat3.

2. При наведении на квадрат сделаем так, что бы он поворачивался на 360 градусов против часовой стрелки.
Для этого в стиле с псевдоклассом :hover пропишем transform: rotate(-360deg). Так же не забываем, что ранее мы добавляли квадрату свойство transition, поэтому наш поворот будет длиться 2 секунды и обеспечит плавность. Для этого в таблицу стилей добавьте код из рисунка 8.

Рисунок 8

3. В результате должна получиться анимация, как на рисунке 9.

Рисунок 9

4. Сохраните файл.

Функция наклона – skew()

Наклоняет элемент на заданное значение по горизонтали и вертикали в плоскости экрана.

transform: skew(ax, ay)

Здесь:
ax — угол наклона по оси X;
ay — угол наклона по оси Y.
Если значение ay не указано, то оно считается равным 0: skew(30deg) соответствует skew(30deg, 0).
Положительное значение угла наклоняет влево, отрицательно значение – вправо.

Синтаксис:
transform: skew(30deg, 60deg)
transform: skew(60deg, 30deg)
transform: skew(30deg) РАВНОСИЛЬНО transform: skew(30deg, 0)

Задание №4

1. Создайте квадрат аналогичный таким же из прошлых заданий с классом kvadrat4.

2. При помощи функции skewX() деформируем наш квадрат относительно оси X, для того что бы трансформировать относительно оси Y функция должна выглядить следующим образом - skewY(), где значение в скобках указывается в градусах, так как меняются углы. Если же писать функцию в виде skew(), то значения осей указываются через запятую - skew(x-угол,y-угол).
В нашем случае мы сделаем искажение на 70 градусов. Стили вы можете увидеть на листинге на рисунке 10.

Рисунок 10

3. В результате должно получиться следующее (рисунок 11), в данном задании мы не используем эффект «при наведении»:

Рисунок 11

4. Сохраните файл.


Контрольное задание

В нижеприведенных примерах квадрат анимируется при наведении мыши. Изучите коды примеров. Создайте свой пример, отличающийся от данных.

Пример 1

html-код

<div class="kvadrat6" style="margin: 200px auto"></div>	

css-код

.kvadrat6 {
	width: 200px;	
	height: 200px;
	background: #186187;
	margin: auto;
	border-style: inset;
	transition: 2s;	
	}

.kvadrat6:hover {
	-moz-transform: rotate(30deg) translate(10px, 50px) skew(7deg, 50deg);
	-webkit-transform: rotate(30deg) translate(10px, 50px) skew(7deg, 50deg);
	-o-transform: rotate(30deg) translate(10px, 50px) skew(7deg, 50deg);
	-ms-transform: rotate(30deg) translate(10px, 50px) skew(7deg, 50deg);
	transform: rotate(30deg) translate(10px, 50px) skew(7deg, 50deg);
	}

Пример 2

html-код

<div class="kvadrat7" style="margin: 200px auto"></div>	

css-код

.kvadrat7 {
	width: 200px;	
	height: 200px;
	background: #186187;
	margin: auto;
	border-style: inset;
	transition: 2s;	
	}

.kvadrat7:hover {
	-moz-transform: scale(2) rotate(720deg) skew(-10deg, 0deg);
	-webkit-transform: scale(2) rotate(720deg) skew(-10deg, 0deg);
	-o-transform: scale(2) rotate(720deg) skew(-10deg, 0deg);
	-ms-transform: scale(2) rotate(720deg) skew(-10deg, 0deg);
	transform: scale(2) rotate(720deg) skew(-10deg, 0deg);
	}

Пример 3

html-код

<div class="kvadrat8" style="margin: 200px auto"></div>	

css-код

.kvadrat8 {
	width: 200px;	
	height: 200px;
	background: #186187;
	margin: auto;
	border-style: inset;
	transition: 2s;	
	}

.kvadrat8:hover {
	-moz-transform: scale(-1) translate(40px, 0px);
	-webkit-transform: scale(-1) translate(40px, 0px);
	-o-transform: scale(-1) translate(40px, 0px);
	-ms-transform: scale(-1) translate(40px, 0px);
	transform: scale(-1) translate(40px, 0px);
	}
	

Пример 4

html-код

<div class="kvadrat9" style="margin: 200px auto"></div>	

css-код

.kvadrat9 {
	width: 200px;	
	height: 200px;
	background: #186187;
	margin: auto;
	border-style: inset;
	transition: 2s;	
	}

.kvadrat9:hover {
	-moz-transform: translate(0px, -20px) skew(0deg, -20deg);
	-webkit-transform: translate(0px, -20px) skew(0deg, -20deg);
	-o-transform: translate(0px, -20px) skew(0deg, -20deg);
	-ms-transform: translate(0px, -20px) skew(0deg, -20deg);
	transform: translate(0px, -20px) skew(0deg, -20deg);
	}

Пример 5

html-код

<div class="kvadrat10" style="margin: 200px auto"></div>	

css-код

	
.kvadrat10 {
	width: 200px;	
	height: 200px;
	background: #186187;
	margin: auto;
	border-style: inset;
	transition: 2s;	
	}

.kvadrat10:hover {
	-moz-transform: rotate(180deg) translate(0px, 20px) skew(70deg, -20deg);
	-webkit-transform: rotate(180deg) translate(0px, 20px) skew(70deg, -20deg);
	-o-transform: rotate(180deg) translate(0px, 20px) skew(70deg, -20deg);
	-ms-transform: rotate(180deg) translate(0px, 20px) skew(70deg, -20deg);
	transform: rotate(180deg) translate(0px, 20px) skew(70deg, -20deg);
	}