Возможности CSS3

@-правила(at-правила)

At-правила это своего рода заявление для CSS, в котором содержаться инструкции для выполнениния или поведения. Каждое правило начинается с симвла @(коммерческое at(эт)), после которго следует ключевое слово, которое выступает в качестве идентификатора поведения для CSS.

За частую использование @-правил ограничевается подключением дополнительных стилей или шрифтов, установки кодировки, но это лишь малая часть того что они могут.

@[KEYWORD] (position);
			

@charset

Применяется для задания кодировки внешнего CSS-файла. Это имеет значение в том случае, если в CSS-файле используются символы национального алфавита.

@charset "кодировка";
				
Значение кодировки обязательно должно быть взято в кавычки.
@charset "UTF-8";
/* Должно идти первой строкой. Пред ней не должно быть ничего - даже комментариев */
				

Пример использования @charset

@document

@document устанавливает стилевые правила на основе адреса документа. К примеру, если адреса мобильной и основной версии сайта различаются, то мы можем задать собственный стиль элементов для каждой версии.

Поддержка в браузерах
IE Chrome Opera Safari Firefox

Мы не будем рассматривать его работу, по скольку он поддерживается пока одним браузером. Более подробнее о нём можно почитать здесь →

@font-face

Определяет настройки шрифтов, а также позволяет загрузить специфичный шрифт на компьютер пользователя.

Вы можете использовать практически любые шрифты, в любых количествах. Однако, согласно основным принципам дизайна, считается что более 3 шрифтов в оформлении это ужасно.
@font-face {
    /* Простой пример подключения шрифта */
    font-family: "Имя Шрифта";
    src: url("путь/до/Шрифта");
}
				
Поддержка браузерами различных видов шрифтов
@font-face {
    font-family: "Anonymous Pro";
    src: url("font/Anonymous_Pro.ttf");
}

p {
    font-family: "Anonymous Pro";
}
				

Пример использования @font-face

В Интернете есть два наиболее удобных сервиса встраивания шрифтов в страницу: Шрифтовая белка и Google WebFonts.
Стоит их попробовать.

@import

Позволяет импортировать содержимое CSS-файла в текущую стилевую таблицу.

Правило @import позволяет импортировать содержимое CSS-файла в текущую стилевую таблицу, НО @import не разрешается вставлять после любых объявлений кроме @charset или другого @import.
    @import url("путь/до/файла") [Тип Носителя, ...];
    @import "путь/до/файла" [Тип Носителя, ...];
				

Широкое развитие различных платформ и устройств заставляет разработчиков делать под них специальные версии сайтов, что достаточно трудоёмко и проблематично. Вместе с тем, времена и потребности меняются, и создание сайта для различных устройств является неизбежным и необходимым звеном его развития. С учетом этого в CSS введено понятие типа носителя, когда стиль применяется только для определённого устройства.

Типы носителей
Тип Описание
all Все типы. Это значение используется по умолчанию.
aural Речевые синтезаторы, а также программы для воспроизведения текста вслух. Сюда, например, можно отнести речевые браузеры.
braille Устройства, основанные на системе Брайля, которые предназначены для слепых людей.
handheld Наладонные компьютеры и аналогичные им аппараты.
print Печатающие устройства вроде принтера.
projection Проектор.
screen Экран монитора.
tv Телевизор.
    @import "style/main.css" screen;
    @import "style/print.css" print;
				

Пример использования @import

@keyframes

@keyframes устанавливает ключевые кадры при анимации элемента. Ключевой кадр это свойства элемента (прозрачность, цвет, положение и др.), которые должны применяться к элементу в заданный момент времени.

О нём и сопутствующих ему свойствах поговорим чуть далее в этой статье.

@media

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

О нём и сопутствующих ему свойствах узнаете в следующей лекции.

@page

Задаёт значение полей при печати документа.

    @page {Значение отступов};
				

Для установки значения полей на странице, используется универсальное свойство margin или его производные — margin-top, margin-right, margin-bottom и margin-left, задающие соответственно отступ сверху, справа, снизу и слева. Отрицательное значение допускается, но часть страницы может оказаться «отрезанной». Свойства border и padding не применимы.

Допустипо использование ключевых слов, после @page и пробел. Ключевое слово :left позволяет задать поля для всех левых страниц, :right — для всех правых, а :first — для первой страницы.

@page {
    margin: 250px;
}

@page :first {
    margin: 0;
}

@page :left {
    margin-right: 50px;
}

@page :right {
    margin-left: 50px;
}
				

Пример использования @page

@viewport

Позволяет оптимизировать макет веб-страницы в зависимости от различных устройств и их размеров.

Поддержка в браузерах
IE Chrome Opera Safari Firefox

Мы не будем рассматривать его работу, по скольку он поддерживается пока одним браузером. Более подробнее о нём можно почитать здесь →

Функции 2D-трансформации transform

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

Основным CSS-свойством для получения любого из этих изменений является transform. Оно используется с предоставлением типа желаемого преобразования и добавлением значения, указывающего на степень преобразования элемента.

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

К элементам, которые могут быть трансформированы, относятся элементы с display: block; и display: inline-block;, а также элементы, значение свойства display которых вычисляется как table-row, table-row-group, table-header-group, table-footer-group, table-cell или table-caption. Трансформированным считается элемент с любым установленным значением свойства transform, отличным от none.

Существуют два вида CSS3 трансформаций – 2D и 3D.

rotate()

Функция rotate() позволяет вращать элемент вокруг неподвижной точки. По умолчанию, вращение происходит вокруг центра элемента.

rotate() принимает только один параметр, который является значением угла и определяется в градусах (deg), градах (grad), радианах (rad) или в оборотах (turn) (один оборот эквивалентен полному кругу).

Отрицательные значения (например от -1deg до -360deg) поворачивают элемент против часовой стрелки, положительные — по часовой стрелке. Значение rotate(720deg) поворачивает элемент на два полных оборота.
#rotateDiv {
    transform: rotate(1rad);
}
				
Чтобы предотвратить неожиданное поведение, трансформируемые элементы не влияют на поток. Независимо от вращения, масштабирования или перемещения, они не будут влиять на другие элементы.
То есть, если повернуть элемент на 45°, он может наложиться на те элементы, которые находятся выше, ниже его или по бокам. Сначала веб-браузеры выделяют элементу то пространство, которое он занимал бы при обычных обстоятельствах (до преобразования), а затем они занимаются преобразованием элемента (его вращением, увеличением или наклоном). Этот процесс становится очевидным при увеличении размеров элемента путем использования функции преобразования scale().

scale()

Функция scale() позволяет изменять размер элемента. Она может увеличить или уменьшить элемент. Функция принимает либо один параметр, либо два параметра(через запятую).

    transform: scale(1.2);
    transform: scale(1.2, 3);
				

При указании одного праметра - изменение размеров элемента происходит одинаково по высоте и ширине; При указании двух параметров - первое значение изменяет размер элемента по горизонтали, второе по вертикали.

Значения парамтров функции, представляемое в скобках, по сути являются коэффициентами масштабирования - числом, на которое умножаются текущие размеры элемента. Например, 1 говорит об отсутствии масштабирования, .5 указывает на половину текущего размера, а 4 - на "учетверение" текущего размера. То есть числа между 0 и 1 приводят к уменьшению, а числа больше 1 - к увеличению элемента (значение 0 фактически делает элемент невидимым на странице).
Отрицательные значения отображают элемент зеркально по горизонтали.
scale(2)
scale(0.5, 4)
scale(0.1)
scale(-1)
Чаще всего масштабирование используется для визуальных изменений элемента на странице в динамическом режиме.

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

    transform: scaleX(2);
    transform: scaleY(3);
				

translate()

Функция translate() позволяет перемещать элемент в плоскости (по осям х и у). Может принимать в качестве значений либо один параметр, либо два параметра(через запятую).

    transform: translate(20px, 40px);
    transform: translate(30px);
				

При указании одного параметра - элемент перемещается вдоль оси х; два параметра - первое значение для оси х, второе для оси у.

Сдвигая элемент на новое место, используя координаты x и y, не затрагиваются соседние элементы. Если нужно сдвинуть элемент влево или вверх, то нужно использовать отрицательные значения.

translate(2cm)
translate(30vh, 20vw)
translate(-12pt)
translate(0, -2rem)
Это похоже на использование относительного позиционирования с помощью значений left и top.

В CSS3 предоставляются также две дополнительные функции для перемещения элемента только влево или вправо — translateX и только вверх или вниз - translateY.

    transform: translateX(20px);
    transform: translateY(30px);
				
Очень интересный эффект от функции translate можно получить при ее совместном использовании с CSS-переходами. Это сочетание позволяет анимировать перемещение элемента, показав его путешествующим по экрану.

skew()

Функция skew() позволяет искажать элемент, сдвигая его стороны вдоль линий.

Наклон элемента можно осуществить по его горизонтальной и вертикальной осям: это придает элементу трехмерное представление.

Эта функция преобразования используется редко, поскольку её последствия весьма непредсказуемы, а результат не обязательно привлекателен.
    transform: skew(30deg, 45deg);
    transform: skew(1rad);
				

Как и scale(), функция skew() принимает либо:

  • один параметр: элемент искажается по горизонтали
  • два параметра: первое значение искажает элемент по горизонтали, второе по вертикали
skew(30deg, 45deg)
skew(1rad)
Если указано одно значение, второе будет определено браузером автоматически.

Как и rotate(), функция skew() принимает только значения угла, такого как градусы (deg).

Как и в случае с translate и scale, в CSS3 предлагаются отдельные функции для осей X и Y: skewX и skewY.

skewX(30deg)
skewY(45deg)

matrix()

Функция matrix() смещает элементы и задает способ их трансформации, позволяя объединить несколько функций 2D-трансформаций в одной. В качестве трансформации допустимы поворот, масштабирование, наклон и изменение положения.

    transform: matrix(a, c, b, d, x, y);
				

Значение a изменяет масштаб по горизонтали. Значение от 0 до 1 уменьшает элемент, больше 1 - увеличивает.

Значение c деформирует (сдвигает) стороны элемента по оси Y, положительное значение - вверх, отрицательное - вниз.

Значение b деформирует (сдвигает) стороны элемента по оси X, положительное значение - влево, отрицательное - вправо.

Значение d изменяет масштаб по вертикали. Значение меньше 1 уменьшает элемент, больше 1 - увеличивает.

Значение x смещает элемент по оси X, положительное - вправо, отрицательное - влево.

Значение y смещает элемент по оси Y, положительное значение - вниз, отрицательное - вверх.

Мы не будем детально рассматривать его работу, по скольку он сложен для понимание. Более подробнее о нём можно почитать здесь → и здесь →.
matrix(1.2, 0.15, 0.5, 1.1, 10, 0)

Множественные трансформации

Можно объединить несколько трансформаций одного элемента, перечислив их через пробел в порядке проявления.

    transform: scale(1.2) translateX(2in) rotate(330deg);
				

Браузер будет применять все эффекты в порядке следования функций.

CSS3 переходы. Свойство transition

Переход является простой анимацией от одного набора CSS-свойств к другому через определенный промежуток времени. Работает это так, что отдельные свойства анимируются от начального состояния до конечного.

Имейте в виду, что переход представляет собой специфический вид анимации, где есть только начальное и конечное состояние.

Чтобы переход заработал, нужно следующее.

Когда инициатор больше не применяется, то есть когда, например, посетитель убирает указатель мыши с кнопки навигации, браузер возвращает тег обратно к его прежнему стилю и анимирует весь этот процесс. Иными словами, вам нужно лишь установить переход для элемента один раз, а анимацию от одного стиля к другому и обратно к исходному стилю браузер возьмет на себя.

Переходы применяются ко всем элементам, а также к псевдоэлементам :before и :after. Для задания всех свойств перехода обычно используют краткую запись свойства transition.

CSS3 переходы могут применяться не ко всем свойствам и их значениям. Подробный перечень вы найдёте на этой странице и на этой странице.

transition-property

Содержит название CSS-свойств, к которым будет применен эффект перехода. Значение свойства может содержать как одно свойство, так и список свойств через запятую. При создании перехода можно использовать как начальное, так и конечное состояние элемента. Свойство не наследуется.

    background-color: #000;
    border-radius: 10px;
    transition-property: background-color;
    /* Так же разрещается следующая запись */
    transition-property: all;
    transition-property: background-color, border-radius;
				
all - значение по умолчанию. Применяет эффект перехода ко всем свойствам элемента.
.btn {
    background-color: #000;
    border-radius: 10px;
    transition-property: background-color, border-radius;
}

.btn:hover {
    background-color: #fff;
    border-radius: 50%;
}
				

Как Вы можете увидеть плавного перехода нет. Нам поможет в этом....

transition-duration

Задаёт промежуток времени, в течение которого должен осуществляться переход.Если продолжительность перехода не указана, то анимация при смене значений свойств происходить не будет. Свойство не наследуется.

Чтобы указать продолжительность анимации, используется свойство transition-duration. Ему передается или значение в секундах, или значение в миллисекундах (тысячных долях секунды).

Так же можно указать отдельную продолжительность для каждого анимируемого свойства. Например, когда посетитель проводит указатель мыши над кнопкой, может потребоваться, чтобы цвет текста изменялся быстрее, цвет фона изменялся немного медленнее, а цвет границы изменялся заметно медленнее. Для этого нужно перечислить анимируемые свойства, используя свойство transition-property, а затем перечислить показатели продолжительности с помощью свойства transition-duration.

    background-color: #000;
    border-radius: 10px;
    transition-property: background-color;
    transition-duration: .8s;
	
    /* Так же разрещается следующая запись */
    transition-property: background-color, border-radius;
    transition-duration: .8s, 950ms;
				
Порядок перечисления показателей продолжительности должен соответствовать порядку перечисления свойств.
.btn {
    background-color: #000;
    border-radius: 10px;
    transition-property: background-color, border-radius;
	transition-duration: .8s;
}

.btn:hover {
    background-color: #fff;
    border-radius: 50%;
}
				
Микрогалерея

transition-timing-function

Чтобы анимированный переход заработал, нужно только установить значения для свойств transition-property и transition-duration. Но с помощью свойства transition-timing-function можно также контролировать и скорость хода анимации.

Свойство задаёт временную функцию, которая описывает скорость перехода объекта от одного значения к другому. Если вы определяете более одного перехода для элемент, например, цвет фона элемента и его положение, вы можете использовать разные функции для каждого свойства. Свойство не наследуется.

В предназначении этого свойства нетрудно и запутаться: оно управляет не продолжительностью анимации (для этого есть свойство transition-duration), а скоростью хода анимации. Например, можно начать анимацию медленно, а затем быстро ее завершить, создавая эффект незаметного в начале и быстрого в конце изменения фонового цвета.

Свойство transition-timing-function может получать в качестве занчения ключевые слова:

  • linear - Переход происходит равномерно на протяжении всего времени, без колебаний в скорости.
  • ease - Функция по умолчанию, переход начинается медленно, разгоняется быстро и замедляется в конце.
  • ease-in - Переход начинается медленно, а затем плавно ускоряется в конце.
  • ease-out - Переход начинается быстро и плавно замедляется в конце.
  • ease-in-out - Переход медленно начинается и медленно заканчивается.
  • cubic-bezier(x1, y1, x2, y2) - Позволяет вручную установить значения от 0 до 1 для кривой ускорения. На этом сайте вы сможете построить любую траекторию перехода.
    Для создания более реалистичных анимаций используйте функцию cubic-bezier
    Пользовательские функции CUBIC BÉZIER с сайта EASINGS.NET
    Обязательно посетите сайт EASINGS.NET и этот сайт.
StartReset

linear

ease

ease-in

ease-out

ease-in-out

cubic-bezier

Функция Безье cubic-bezier(0.390, -0.440, 0.695, 1.650)

transition-delay

Можно задержать время начала анимации перехода, воспользовавшись свойством transition-delay, т. е. как долго переход должен ждать, прежде чем начнётся на самом деле.

Необязательное свойство. Не наследуется.

Как и с transition-duration вы можете использовать секунды (s) или миллисекунды (ms).

    transition-delay: 300ms;
    transition-delay: .4s, 1500ms, 2s;
				

Как и в случае применения свойства transition-duration, для каждого свойства можно указать свое время задержки. Порядок перечисления показателей времени должен соответствовать порядку перечисления этих свойств для transition-property.

10% 20% 30% 40% 50% 60% 70% 80% 90% 100%

Краткая запись свойства transition

Запись всех свойств по отдельности - transition-property, transition-duration, transition-timing-function - может просто утомить. По этому, все свойства, отвечающие за изменение внешнего вида элемента, можно объединить в одно свойство transition

transition: transition-property transition-duration transition-timing-function transition-delay;
				

Это свойство связывает все другие свойства в одно. Нужно просто перечислить через запятую свойство, продолжительность, функцию распределения скорости по времени и задержку.

Если воспользоваться значениями по умолчанию, то запись

transition: 1s;
				

будет эквивалентна

transition: all 1s ease 0s;
				

Желательно чтобы список состоял из ключевого слова all или какого-нибудь одного CSS-свойства, а также из продолжительности, а функцию распределения скорости по времени и задержку можно не указывать. По умолчанию в качестве функции распределения задается ease-in, а задержка не используется. То есть, если нужно просто анимировать переход всех CSS-свойств на 1 секунду, нужно написать следующий код:

transition: all 1s;
				
Если нужно анимировать сразу несколько CSS-свойств (но не все), можно воспользоваться их списком с запятой в качестве разделителя, где элементами будут являться разделенные пробелами свойства переходов.
transition: color 1s, background-color 1s, border-color .5s 1s;
					

CSS3 анимация

Переходы выполняют большую работу по созданию визуальных взаимодействий из одного состояния в другое и идеально подходят для этих видов одиночных изменений состояния. Тем не менее, когда требуется больший контроль, для переходов необходимо несколько состояний.

В CSS3 предоставляется еще один, более богатый свойствами механизм создания анимации.

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

Итак, переходы в CSS являются специфическим видом анимации, где:

  • есть только два состояния: начало и конец;
  • анимация не зациклена;
  • промежуточные состояния управляются только функцией времени.

Но что если вы хотите:

  • иметь контроль над промежуточными состояниями?
  • зациклить анимацию?
  • сделать разные виды анимаций для одного элемента?
  • анимировать определённое свойство только на половину пути?
  • имитировать различные функции времени для разных свойств?

Анимация в CSS позволяет всё это, и не только.

CSS3 анимация может применяться практически для всех html-элементов, а также для псевдоэлементов :before и :after. При создании анимации не стоит забывать о возможных проблемах с производительностью, так как на изменение некоторых свойств требуется много ресурсов.

Анимация в CSS3 сложнее перехода, но у нее есть дополнительное преимущество в том, что ей не нужен обязательный инициатор. Наряду с тем, что анимацию можно добавить к состоянию :hover для ее проигрывания при прохождении указателя мыши над элементом, запустить анимацию можно также при загрузке страницы.

При создании анимации первым делом создаются ключевые кадры (keyframes).

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

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

Создание анимации проходит в два приема.

  1. Определение анимации. Включает определение ключевых кадров со списком анимируемых CSS-свойств.
  2. Применение анимации к элементу. После определения анимации ее можно назначить любому количеству элементов страницы. Можно даже задать для каждого элемента разные распределения скорости выполнения, задержки и другие свойства анимации. То есть одну и ту же анимацию на странице можно использовать с немного разными настройками несколько раз.

Правило @keyframes. Определение ключевых кадров

Перед применением анимации к элементам HTML, вам требуется написать анимацию с помощью ключевых кадров.

Создание анимации начинается с установки ключевых кадров правила @keyframes. Кадры определяют, какие свойства на каком шаге будут анимированы. Каждый кадр может включать один или более блоков объявления из одного или более пар свойств и значений. Правило @keyframes содержит имя анимации элемента, которое связывает правило и блок объявления элемента.

@keyframes myAnimation {
    from {
        box-shadow: 2px 2px 10px rgba(0,0,0, 0.5);
    }
    
    to {
        box-shadow: 0px 0px 0px rgba(0,0,0, 1);
    }
}
				

Ключевые кадры создаются с помощью ключевых слов from и to (эквивалентны значениям 0% и 100%) или с помощью процентных пунктов, которых можно задавать сколько угодно. Также можно комбинировать ключевые слова и процентные пункты.

Вы можете определить столько ключевых кадров, сколько хотите, вроде 33%, 4% или даже 29.86%. На практике вы будете писать только некоторые из них.

Если кадры имеют одинаковые свойства и значения, их можно объединить в одно объявление:

@keyframes move {
    from, to {
        top: 0;
        left: 0;
    }
    
    25%, 75% {
        top: 100%;
    }
	
    50% {
        top: 50%;
    }
}
				

animation-name

Когда определение набора ключевых кадров будет завершено, анимация будет готова к применению, и, чтобы заставить ее работать, ее нужно применить к какому-нибудь элементу страницы. Анимацию можно добавить к любому стилю любого элемента страницы.Если просто добавить анимацию к стилю,который тут же применяется к элементу, например к стилю тега h1, анимация будет применена при загрузке страницы.

Анимацию можно применить к одному из псевдоклассов, включая :hover, :active, :target или :focus, чтобы, например, запустить анимацию при проходе указателя мыши посетителя над ссылкой или при щелчке на поле формы.

И наконец, анимацию можно применить к стилю класса, и воспользоваться кодом JavaScript для динамического применения этого класса в ответ на щелчок посетителя на кнопке или на каком-нибудь другом элементе страницы.

В CSS3 предоставляется несколько свойств, связанных с анимацией и позволяющих управлять способом и временем проигрывания анимации (а также сокращенная версия, охватывающая все отдельные свойства). Как минимум, чтобы заставить анимацию выполняться, нужно указать имя, которое было дано исходной анимации (в правиле @keyframes), и продолжительность анимации.

@keyframes myFrame {
    from { /* ... */ }
    
    to { /* ... */ }
}

.selector {
    animation-name: myFrame;
}
				

Подобно именам классов CSS, название анимации может включать в себя только: буквы (a-z), цифры (0-9), подчёркивание (_), дефис (-). Название не может начинаться с цифры или с дефисов.

animation-duration

Свойство animation-name просто сообщает браузеру, какую анимацию нужно применить, а свойство animation-duration устанавливает продолжительность анимации, задаётся в секундах или миллисекундах, отрицательные значения не допустимы. Не наследуется. Если для элемента задано более одной анимации, то можно установить разное время для каждой, перечислив значения через запятую.

.selector {
    animation-duration: 10s;
}
				

Простой пример анимации →

Длительность анимации задается в секундах s или миллисекундах ms

animation-timing-function

Как и в случае с переходами, можно указывать функцию распределения скорости анимации по времени animation-timing-function, которая управляет этой скоростью на заданном времени продолжительности анимации.

Свойство определяет изменение скорости от начала до конца анимации с помощью временных функций. Задаётся при помощи ключевых слов или кривой Безье cubic-bezier(x1, y1, x2, y2). Не наследуется.

Например, анимацию можно начинать медленно и завершать быстро, используя для этого кубическую кривую Безье или одно из встроенных ключевых слов, определяющих метод: linear, ease, ease-in, ease-out, ease-in-out. Все это работает точно так же, как и в ранее рассмотренном случае с переходами.

Но так же доступны и следующие временые функции:

  • step-start - задаёт пошаговую анимацию, разбивая анимацию на отрезки, изменения происходят в начале каждого шага. Эквивалентно steps(1, start).
  • step-end - пошаговая анимация, изменения происходят в конце каждого шага. Эквивалентно steps(1, end).
  • steps(количество шагов,start|end) Ступенчатая временная функция, которая принимает два параметра. Количество шагов задается целым положительным числом. Второй параметр необязательный, указывает момент, в котором начинается анимация. Со значением start анимация начинается в начале каждого шага, со значением end — в конце каждого шага с задержкой. Задержка вычисляется как результат деления времени анимации на количество шагов. Если второй параметр не указан, используется значение по умолчанию end.

Пример анимации с использованием функции steps

animation-iteration-count

С помощью CSSможно контролировать еще несколько аспектов анимации, включая ее повторение, направление ее выполнения, если она выполняется более одного раза, а также порядка форматирования браузером элемента по завершении анимации.

Переходы являются анимациями, выполняемыми однократно, например указатель мыши проходит над кнопкой и она увеличивается в размерах. А вот анимации благодаря свойству animation-iteration-count могут запускаться один, два и более раза или непрерывно.

.selector {
    animation-iteration-count: 3;
}
				

Свойство animation-iteration-count позволяет запустить анимацию несколько раз. Значение 0 или любое отрицательное число удаляют анимацию из проигрывания. Не наследуется.

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

Если указать в качестве заначение ключевое слово infinite, то анимация будет проигрывается бесконечно.

animation-direction

Свойство задает направление повтора анимации. Если анимация повторяется только один раз, то это свойство не имеет смысла. Не наследуется.

Свойство animation-direction определяет, в каком порядке читаются ключевые кадры.

normal - Значение по умолчанию, анимация проигрывается в обычном направлении, с начала и до конца.

reverse - Анимация проигрывается с конца.

alternate - Анимация проигрывается с начала до конца, затем в обратном направлении.

alternate-reverse - Анимация проигрывается с конца до начала, затем в обратном направлении.

Краткая запись

Все параметры воспроизведения анимации можно объединить в одном свойстве - animation, перечислив их через пробел:

animation: animation-name 
           animation-duration 
           animation-timing-function 
           animation-delay 
           animation-iteration-count 
           animation-direction;

				

Для воспроизведения анимации достаточно указать только два свойства - animation-name и animation-duration, остальные свойства примут значения по умолчанию. Порядок перечисления свойств не имеет значения, единственное, время выполнения анимации animation-duration обязательно должно стоять перед задержкой animation-delay.

Множественные анимации

Можно задавать несколько анимаций, перечислив их названия через запятую:

animation: move .3s, back 4s steps(10, start) infinite;