0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#статьи</a></p>
1
<p><a>#статьи</a></p>
2
<ul><li>2 окт 2025</li>
2
<ul><li>2 окт 2025</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Оживляем веб-страницы без скриптов с помощью CSS.</p>
4
</ul><p>Оживляем веб-страницы без скриптов с помощью CSS.</p>
5
<p>Иллюстрация: Polina Vari для Skillbox Media</p>
5
<p>Иллюстрация: Polina Vari для Skillbox Media</p>
6
<p>Онлайн-журнал для тех, кто влюблён в код и информационные технологии. Пишем для айтишников и об айтишниках.</p>
6
<p>Онлайн-журнал для тех, кто влюблён в код и информационные технологии. Пишем для айтишников и об айтишниках.</p>
7
<p>CSS-анимации помогают сделать интерфейс живым: кнопки плавно меняют цвет, тексты появляются с эффектом прозрачности, картинки двигаются. Для этого не нужен JavaScript - всё можно описать на чистом CSS.</p>
7
<p>CSS-анимации помогают сделать интерфейс живым: кнопки плавно меняют цвет, тексты появляются с эффектом прозрачности, картинки двигаются. Для этого не нужен JavaScript - всё можно описать на чистом CSS.</p>
8
<p>В этой статье мы создадим первую анимацию с нуля, разберём, как работают ключевые кадры и свойства animation, научимся настраивать скорость, задержку и повторение. Всё будет работать прямо в браузере: достаточно открыть HTML‑файл и посмотреть результат.</p>
8
<p>В этой статье мы создадим первую анимацию с нуля, разберём, как работают ключевые кадры и свойства animation, научимся настраивать скорость, задержку и повторение. Всё будет работать прямо в браузере: достаточно открыть HTML‑файл и посмотреть результат.</p>
9
<p><strong>Содержание</strong></p>
9
<p><strong>Содержание</strong></p>
10
<ul><li><a>Что такое CSS-анимации и в чём их преимущество</a></li>
10
<ul><li><a>Что такое CSS-анимации и в чём их преимущество</a></li>
11
<li><a>Три кита CSS-анимаций: transition, animation, @keyframes</a></li>
11
<li><a>Три кита CSS-анимаций: transition, animation, @keyframes</a></li>
12
<li><a>Создание простой CSS-анимации с нуля</a></li>
12
<li><a>Создание простой CSS-анимации с нуля</a></li>
13
<li><a>Длительность, задержка, плавность и повторение анимации</a></li>
13
<li><a>Длительность, задержка, плавность и повторение анимации</a></li>
14
<li><a>Какие свойства можно анимировать, а какие нельзя</a></li>
14
<li><a>Какие свойства можно анимировать, а какие нельзя</a></li>
15
<li><a>Применение анимаций к псевдоклассам</a></li>
15
<li><a>Применение анимаций к псевдоклассам</a></li>
16
<li><a>Типичные ошибки новичков при работе с CSS-анимациями</a></li>
16
<li><a>Типичные ошибки новичков при работе с CSS-анимациями</a></li>
17
<li><a>Когда лучше использовать CSS-анимации, а когда JavaScript</a></li>
17
<li><a>Когда лучше использовать CSS-анимации, а когда JavaScript</a></li>
18
</ul><p>CSS-анимации позволяют добавлять движение и эффекты к любым элементам на странице - тексту, картинкам, кнопкам и даже формам: элементы могут плавно появляться, исчезать, менять цвет или двигаться.</p>
18
</ul><p>CSS-анимации позволяют добавлять движение и эффекты к любым элементам на странице - тексту, картинкам, кнопкам и даже формам: элементы могут плавно появляться, исчезать, менять цвет или двигаться.</p>
19
<p>Любая анимация состоит из двух частей. Сначала мы задаём, что именно будет происходить с элементом. Например, он станет прозрачным, повернётся или увеличится. Потом описываем ключевые кадры - точки во времени, в которых элемент меняет состояние. Браузер сам плавно воспроизводит переходы между этими кадрами.</p>
19
<p>Любая анимация состоит из двух частей. Сначала мы задаём, что именно будет происходить с элементом. Например, он станет прозрачным, повернётся или увеличится. Потом описываем ключевые кадры - точки во времени, в которых элемент меняет состояние. Браузер сам плавно воспроизводит переходы между этими кадрами.</p>
20
<p>CSS-анимации можно применять почти ко всем HTML-тегам:</p>
20
<p>CSS-анимации можно применять почти ко всем HTML-тегам:</p>
21
<ul><li><strong>Блочным:</strong><a><div></a>, <section>,<a><header></a>,<a><footer></a>,<a><article></a>, <main>, <nav>, <aside>,<a><h1> - <h6></a>.</li>
21
<ul><li><strong>Блочным:</strong><a><div></a>, <section>,<a><header></a>,<a><footer></a>,<a><article></a>, <main>, <nav>, <aside>,<a><h1> - <h6></a>.</li>
22
<li><strong>Строчным:</strong><span>,<a><a></a>, <strong>, <em>,<a><b></a>, <i>, <small>, <mark>, <code>, <abbr>, <del>, <ins>, <sub>, <sup>, <u>.</li>
22
<li><strong>Строчным:</strong><span>,<a><a></a>, <strong>, <em>,<a><b></a>, <i>, <small>, <mark>, <code>, <abbr>, <del>, <ins>, <sub>, <sup>, <u>.</li>
23
<li><strong>Формам:</strong><input>, <button>, <label>, <textarea>, <select>, <option>.</li>
23
<li><strong>Формам:</strong><input>, <button>, <label>, <textarea>, <select>, <option>.</li>
24
<li><strong>Медиа:</strong><a><img></a>, <video>, <audio>, <picture>.</li>
24
<li><strong>Медиа:</strong><a><img></a>, <video>, <audio>, <picture>.</li>
25
<li><a><strong>Спискам</strong></a><strong>:</strong><ul>, <ol>, <li>.</li>
25
<li><a><strong>Спискам</strong></a><strong>:</strong><ul>, <ol>, <li>.</li>
26
<li><a><strong>Таблицам</strong></a>(ограниченные возможности): <table>, <tr>, <td>, <th>.</li>
26
<li><a><strong>Таблицам</strong></a>(ограниченные возможности): <table>, <tr>, <td>, <th>.</li>
27
</ul><p>CSS-анимации прописываются в отдельном CSS-файле, который потом подключается в блоке <head> в HTML, либо весь код CSS-анимации прописывается в теге <style> так же в HTML.</p>
27
</ul><p>CSS-анимации прописываются в отдельном CSS-файле, который потом подключается в блоке <head> в HTML, либо весь код CSS-анимации прописывается в теге <style> так же в HTML.</p>
28
<p>Вот так выглядит код CSS-анимации в HTML файле в теге <style>:</p>
28
<p>Вот так выглядит код CSS-анимации в HTML файле в теге <style>:</p>
29
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>CSS-анимации</title> <style> /* Определяем ключевую анимацию: элемент появляется снизу и становится видимым */ @keyframes fadeIn { 0% { opacity: 0; /* Элемент полностью прозрачный в начале */ transform: translateY(20px); /* Смещён вниз на 20px */ } 100% { opacity: 1; /* Полностью видимый */ transform: translateY(0); /* Возвращается на своё место */ } } .intro { /* Применяем анимацию fadeIn */ animation: fadeIn 3s ease-out; /* Стили текста */ font-family: Arial, sans-serif; font-size: 2em; text-align: center; margin-top: 100px; color: #333; } body { background-color: #f5f5f5; /* Светлый фон страницы */ margin: 0; padding: 0; } </style> </head> <body> <!-- Элемент с классом .intro, к которому применяется анимация --> <h1 class="intro">CSS-анимации!</h1> </body> </html><p>Если открыть эту страницу в браузере, вы увидите, как воспроизводится CSS-анимация появления элемента <h1> на HTML-странице:</p>
29
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>CSS-анимации</title> <style> /* Определяем ключевую анимацию: элемент появляется снизу и становится видимым */ @keyframes fadeIn { 0% { opacity: 0; /* Элемент полностью прозрачный в начале */ transform: translateY(20px); /* Смещён вниз на 20px */ } 100% { opacity: 1; /* Полностью видимый */ transform: translateY(0); /* Возвращается на своё место */ } } .intro { /* Применяем анимацию fadeIn */ animation: fadeIn 3s ease-out; /* Стили текста */ font-family: Arial, sans-serif; font-size: 2em; text-align: center; margin-top: 100px; color: #333; } body { background-color: #f5f5f5; /* Светлый фон страницы */ margin: 0; padding: 0; } </style> </head> <body> <!-- Элемент с классом .intro, к которому применяется анимация --> <h1 class="intro">CSS-анимации!</h1> </body> </html><p>Если открыть эту страницу в браузере, вы увидите, как воспроизводится CSS-анимация появления элемента <h1> на HTML-странице:</p>
30
<em>Инфографика: CSS-анимация. Skillbox Media</em><p>Вот три ключевых элемента для создания CSS-анимаций:</p>
30
<em>Инфографика: CSS-анимация. Skillbox Media</em><p>Вот три ключевых элемента для создания CSS-анимаций:</p>
31
<ul><li><strong>transition</strong> - свойство для плавного анимирования двух состояний, например, при наведении мыши.</li>
31
<ul><li><strong>transition</strong> - свойство для плавного анимирования двух состояний, например, при наведении мыши.</li>
32
<li><strong>@keyframes</strong> - описывает пошаговое поведение анимации, состояния во времени, создавая эффект движения.</li>
32
<li><strong>@keyframes</strong> - описывает пошаговое поведение анимации, состояния во времени, создавая эффект движения.</li>
33
<li><strong>animation</strong> - позволяет воспроизводить заранее описанную сложную анимацию с ключевыми кадрами, используя разные настройки: задержку, направление, продолжительность и так далее.</li>
33
<li><strong>animation</strong> - позволяет воспроизводить заранее описанную сложную анимацию с ключевыми кадрами, используя разные настройки: задержку, направление, продолжительность и так далее.</li>
34
</ul><p>transition - работает только между двумя состояниями: что было и что стало.</p>
34
</ul><p>transition - работает только между двумя состояниями: что было и что стало.</p>
35
<p>Применяем transition к кнопке на веб-странице:</p>
35
<p>Применяем transition к кнопке на веб-странице:</p>
36
/* Класс кнопки */ .button { /* Плавный переход для изменения фона */ transition: background-color 1s ease; } /* Состояние при наведении */ .button:hover { /* Новый цвет фона при наведении курсора */ background-color: #f87171; /* Мягкий красно-розовый (Tailwind-стиль) */ }<p>Свойство transition применяется для реактивных эффектов - появляющихся, например, при наведении курсора, фокусе или клике по элементу. Анимация с его использованием на кнопке выглядит так:</p>
36
/* Класс кнопки */ .button { /* Плавный переход для изменения фона */ transition: background-color 1s ease; } /* Состояние при наведении */ .button:hover { /* Новый цвет фона при наведении курсора */ background-color: #f87171; /* Мягкий красно-розовый (Tailwind-стиль) */ }<p>Свойство transition применяется для реактивных эффектов - появляющихся, например, при наведении курсора, фокусе или клике по элементу. Анимация с его использованием на кнопке выглядит так:</p>
37
<em>Инфографика: CSS-анимация. Skillbox Media</em><p>С помощью @keyframes и animation задаём последовательность действий. В @keyframes задаются ключевые моменты движения элемента, а в animation указываются имя анимации, скорость, длительность и тип переходов между ключевыми кадрами.</p>
37
<em>Инфографика: CSS-анимация. Skillbox Media</em><p>С помощью @keyframes и animation задаём последовательность действий. В @keyframes задаются ключевые моменты движения элемента, а в animation указываются имя анимации, скорость, длительность и тип переходов между ключевыми кадрами.</p>
38
/* Анимация "пульсация" */ @keyframes pulse { 0% { transform: scale(2); } /* Начинаем с увеличенного размера */ 50% { transform: scale(1); } /* Сжимаем до исходного */ 100% { transform: scale(2); } /* Возвращаемся к увеличенному */ } .icon { /* Применяем анимацию pulse */ animation: pulse 1s infinite ease-in-out; /* 1s - длительность одного цикла infinite - бесконечное повторение ease-in-out - сглаженное ускорение/замедление */ }<p>Связка @keyframes и animation используется, если нужна полноценная настраиваемая и гибкая анимация.</p>
38
/* Анимация "пульсация" */ @keyframes pulse { 0% { transform: scale(2); } /* Начинаем с увеличенного размера */ 50% { transform: scale(1); } /* Сжимаем до исходного */ 100% { transform: scale(2); } /* Возвращаемся к увеличенному */ } .icon { /* Применяем анимацию pulse */ animation: pulse 1s infinite ease-in-out; /* 1s - длительность одного цикла infinite - бесконечное повторение ease-in-out - сглаженное ускорение/замедление */ }<p>Связка @keyframes и animation используется, если нужна полноценная настраиваемая и гибкая анимация.</p>
39
<p>Применим этот код к HTML-элементу <div>, внутри которого содержится специальный символ:</p>
39
<p>Применим этот код к HTML-элементу <div>, внутри которого содержится специальный символ:</p>
40
<body> <div class="icon">🔵</div> </body><p>Если мы откроем браузер, то анимация будет выглядеть вот так:</p>
40
<body> <div class="icon">🔵</div> </body><p>Если мы откроем браузер, то анимация будет выглядеть вот так:</p>
41
<em>Инфографика: CSS-анимация. Skillbox Media</em><p>Создадим простую CSS-анимацию появления надписи, используя @keyframes и animation.</p>
41
<em>Инфографика: CSS-анимация. Skillbox Media</em><p>Создадим простую CSS-анимацию появления надписи, используя @keyframes и animation.</p>
42
<p>Создадим файл index.html и оформим его следующим образом:</p>
42
<p>Создадим файл index.html и оформим его следующим образом:</p>
43
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Создание простой CSS-анимации</title> <style> /* Здесь будет код нашей будущей CSS-анимации */ </style> </head> <body> <div class="title">Привет, CSS-анимация!</div> </body> </html><p>Мы будем анимировать элемент <div>, содержащий надпись "Привет, CSS-анимация!". Код анимации разместим между открывающим и закрывающим тегом <style>.</p>
43
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Создание простой CSS-анимации</title> <style> /* Здесь будет код нашей будущей CSS-анимации */ </style> </head> <body> <div class="title">Привет, CSS-анимация!</div> </body> </html><p>Мы будем анимировать элемент <div>, содержащий надпись "Привет, CSS-анимация!". Код анимации разместим между открывающим и закрывающим тегом <style>.</p>
44
<p>Вернёмся к @keyframes. В этом элементе каждый шаг анимации задаётся в процентах, представляя собой шкалу времени от 0 до 100%. Этот подход хорошо виден в предыдущем примере.</p>
44
<p>Вернёмся к @keyframes. В этом элементе каждый шаг анимации задаётся в процентах, представляя собой шкалу времени от 0 до 100%. Этот подход хорошо виден в предыдущем примере.</p>
45
<em>Инфографика: Skillbox Media</em><p>Если анимация состоит всего из двух шагов - начального и конечного ключевых моментов, то можно использовать ключевые слова from и to:</p>
45
<em>Инфографика: Skillbox Media</em><p>Если анимация состоит всего из двух шагов - начального и конечного ключевых моментов, то можно использовать ключевые слова from и to:</p>
46
@keyframes fadeIn { from { opacity: 0; } /* Начальное состояние - полностью прозрачный */ to { opacity: 1; } /* Конечное состояние - полностью видимый */ }<p>После ключевого слова @keyframes указывают имя анимации. В фигурных скобках после ключевых слов from и to задают изменения свойств: opacity отвечает за прозрачность, и изменяем мы её от 0 к 1.</p>
46
@keyframes fadeIn { from { opacity: 0; } /* Начальное состояние - полностью прозрачный */ to { opacity: 1; } /* Конечное состояние - полностью видимый */ }<p>После ключевого слова @keyframes указывают имя анимации. В фигурных скобках после ключевых слов from и to задают изменения свойств: opacity отвечает за прозрачность, и изменяем мы её от 0 к 1.</p>
47
<p>Далее анимацию нужно применить к элементу <div>. Для этого объявляем селектор .title и используем второй компонент (в данном случае свойство) для создания анимаций animation. В нём через пробел мы прописываем имя анимации (в нашем примере - fadeIn), далее её продолжительность 3s (3 секунды) и параметр ease-out - плавное замедление к концу.</p>
47
<p>Далее анимацию нужно применить к элементу <div>. Для этого объявляем селектор .title и используем второй компонент (в данном случае свойство) для создания анимаций animation. В нём через пробел мы прописываем имя анимации (в нашем примере - fadeIn), далее её продолжительность 3s (3 секунды) и параметр ease-out - плавное замедление к концу.</p>
48
/* Стили для заголовка с анимацией */ .title { animation: fadeIn 3s ease-out; /* Применяем анимацию */ font-family: Arial, sans-serif; font-size: 2em; text-align: center; margin-top: 100px; color: #333; }<p>Сохраним index.html и запустим его в браузере:</p>
48
/* Стили для заголовка с анимацией */ .title { animation: fadeIn 3s ease-out; /* Применяем анимацию */ font-family: Arial, sans-serif; font-size: 2em; text-align: center; margin-top: 100px; color: #333; }<p>Сохраним index.html и запустим его в браузере:</p>
49
<em>Инфографика: CSS-анимация. Skillbox Media</em><p>Так мы создали простую анимацию с использованием связки @keyframes и animation.</p>
49
<em>Инфографика: CSS-анимация. Skillbox Media</em><p>Так мы создали простую анимацию с использованием связки @keyframes и animation.</p>
50
<p>CSS-анимации управляются свойствами animation, которые отвечают за длительность, задержку, плавность и другие функции.</p>
50
<p>CSS-анимации управляются свойствами animation, которые отвечают за длительность, задержку, плавность и другие функции.</p>
51
<p>Вот таблица основных таких свойств и их описание:</p>
51
<p>Вот таблица основных таких свойств и их описание:</p>
52
<strong>Свойство</strong><strong>Описание</strong><strong>Пример значения</strong>animation-nameИмя анимацииanimNameanimation-durationДлительность анимации1s, 0.5sanimation-delayЗадержка перед началом0.2, 1sanimation-timing-functionПлавность переходаease, linear, ease-in-outanimation-iteration-countКоличество повторений1, infiniteanimation-directionНаправление анимации: вперёд или назадnormal, alternateanimation-fill-modeОставляет ли финальное состояниеforwards, bothanimation-play-stateСостояние анимацииpaused, -running<p>Свойство animation - это сокращённая запись, которая может включать в себя эти свойства через пробел:</p>
52
<strong>Свойство</strong><strong>Описание</strong><strong>Пример значения</strong>animation-nameИмя анимацииanimNameanimation-durationДлительность анимации1s, 0.5sanimation-delayЗадержка перед началом0.2, 1sanimation-timing-functionПлавность переходаease, linear, ease-in-outanimation-iteration-countКоличество повторений1, infiniteanimation-directionНаправление анимации: вперёд или назадnormal, alternateanimation-fill-modeОставляет ли финальное состояниеforwards, bothanimation-play-stateСостояние анимацииpaused, -running<p>Свойство animation - это сокращённая запись, которая может включать в себя эти свойства через пробел:</p>
53
animation: <name> <duration> <timing-function> <delay> <iteration-count> <direction> <fill-mode> <play-state>;<p>Но чтобы не запутаться, лучше прописывать эти параметры отдельно.</p>
53
animation: <name> <duration> <timing-function> <delay> <iteration-count> <direction> <fill-mode> <play-state>;<p>Но чтобы не запутаться, лучше прописывать эти параметры отдельно.</p>
54
<p>Применим тонкую настройку CSS-анимаций к элементу <h1> с надписью "CSS умеет всё!":</p>
54
<p>Применим тонкую настройку CSS-анимаций к элементу <h1> с надписью "CSS умеет всё!":</p>
55
/* Анимация: поворот и смена цвета */ @keyframes spinAndColor { 0% { transform: rotate(0deg); color: #ef4444; /* Красный */ } 50% { transform: rotate(180deg); color: #3b82f6; /* Синий */ } 100% { transform: rotate(360deg); color: #22c55e; /* Зелёный */ } } .animated-title { animation-name: spinAndColor; /* Имя анимации */ animation-duration: 4s; /* Длительность: 4 секунды */ animation-delay: 1s; /* Задержка: 1 секунда */ animation-timing-function: ease-in-out; /* Плавность - мягкий старт и финиш */ animation-iteration-count: infinite; /* Бесконечное повторение */ animation-direction: alternate; /* Туда и обратно */ animation-fill-mode: both; /* Сохраняет стили в начале и в конце */ animation-play-state: running; /* Анимация активна */ }<p>Эта CSS-анимация будет выглядеть так:</p>
55
/* Анимация: поворот и смена цвета */ @keyframes spinAndColor { 0% { transform: rotate(0deg); color: #ef4444; /* Красный */ } 50% { transform: rotate(180deg); color: #3b82f6; /* Синий */ } 100% { transform: rotate(360deg); color: #22c55e; /* Зелёный */ } } .animated-title { animation-name: spinAndColor; /* Имя анимации */ animation-duration: 4s; /* Длительность: 4 секунды */ animation-delay: 1s; /* Задержка: 1 секунда */ animation-timing-function: ease-in-out; /* Плавность - мягкий старт и финиш */ animation-iteration-count: infinite; /* Бесконечное повторение */ animation-direction: alternate; /* Туда и обратно */ animation-fill-mode: both; /* Сохраняет стили в начале и в конце */ animation-play-state: running; /* Анимация активна */ }<p>Эта CSS-анимация будет выглядеть так:</p>
56
<em>Инфографика: CSS-анимация. Skillbox Media</em><p>Не все свойства, которые кажутся "движущимися", можно анимировать. Некоторые легко поддаются плавным переходам, а другие просто не реагируют на анимацию.</p>
56
<em>Инфографика: CSS-анимация. Skillbox Media</em><p>Не все свойства, которые кажутся "движущимися", можно анимировать. Некоторые легко поддаются плавным переходам, а другие просто не реагируют на анимацию.</p>
57
<p>Свойства, которые<strong>можно</strong>анимировать:</p>
57
<p>Свойства, которые<strong>можно</strong>анимировать:</p>
58
<ul><li><strong>opacity</strong>- прозрачность;</li>
58
<ul><li><strong>opacity</strong>- прозрачность;</li>
59
<li><strong>transform</strong>- трансформация: перемещение, масштаб, поворот, наклон;</li>
59
<li><strong>transform</strong>- трансформация: перемещение, масштаб, поворот, наклон;</li>
60
<li><strong>color</strong>- цвет;</li>
60
<li><strong>color</strong>- цвет;</li>
61
<li><strong>background-color</strong> - цвет фона;</li>
61
<li><strong>background-color</strong> - цвет фона;</li>
62
<li><strong>margin</strong>/<strong>padding</strong>- внешние и внутренние отступы;</li>
62
<li><strong>margin</strong>/<strong>padding</strong>- внешние и внутренние отступы;</li>
63
<li><strong>width</strong>/<strong>height</strong>- высота и ширина элемента;</li>
63
<li><strong>width</strong>/<strong>height</strong>- высота и ширина элемента;</li>
64
<li><strong>box-shadow</strong>- тень от блока;</li>
64
<li><strong>box-shadow</strong>- тень от блока;</li>
65
<li><strong>border-radius</strong> - округление углов;</li>
65
<li><strong>border-radius</strong> - округление углов;</li>
66
</ul><p>Свойства, которые<strong>нельзя</strong>анимировать:</p>
66
</ul><p>Свойства, которые<strong>нельзя</strong>анимировать:</p>
67
<ul><li><strong>display</strong>- включает и выключает элемент;</li>
67
<ul><li><strong>display</strong>- включает и выключает элемент;</li>
68
<li><strong>position</strong>- изменяет тип позиционирования;</li>
68
<li><strong>position</strong>- изменяет тип позиционирования;</li>
69
<li><strong>z-index</strong>- определяет порядок наложения элементов.</li>
69
<li><strong>z-index</strong>- определяет порядок наложения элементов.</li>
70
</ul><p>Единственная проблема CSS-анимаций в том, что они много весят и могут привести к тормозам и медленной загрузке страницы.</p>
70
</ul><p>Единственная проблема CSS-анимаций в том, что они много весят и могут привести к тормозам и медленной загрузке страницы.</p>
71
<p>Для анимирования лучше всего подходят свойства transform и opacity. Они обрабатываются видеокартой с помощью аппаратного ускорения, это повышает производительность.</p>
71
<p>Для анимирования лучше всего подходят свойства transform и opacity. Они обрабатываются видеокартой с помощью аппаратного ускорения, это повышает производительность.</p>
72
<p>Анимирование свойств width, height, top, left, margin, padding более ресурсоёмкое. Браузеру приходится пересчитывать размеры и координаты элементов, нагрузка на процессор растёт.</p>
72
<p>Анимирование свойств width, height, top, left, margin, padding более ресурсоёмкое. Браузеру приходится пересчитывать размеры и координаты элементов, нагрузка на процессор растёт.</p>
73
<p>Псевдоклассы в CSS - это специальные состояния элементов, которые позволяют добавлять реакции на действия пользователя, например, при наведении курсора, фокусировке на элементе или нажатии.</p>
73
<p>Псевдоклассы в CSS - это специальные состояния элементов, которые позволяют добавлять реакции на действия пользователя, например, при наведении курсора, фокусировке на элементе или нажатии.</p>
74
<p>Список псевдоклассов:</p>
74
<p>Список псевдоклассов:</p>
75
<ul><li>: hover - срабатывает при наведении на элемент;</li>
75
<ul><li>: hover - срабатывает при наведении на элемент;</li>
76
<li>: focus - активен, когда элемент в фокусе (клик мышью или с клавиатуры);</li>
76
<li>: focus - активен, когда элемент в фокусе (клик мышью или с клавиатуры);</li>
77
<li>: active - срабатывает, пока элемент нажат;</li>
77
<li>: active - срабатывает, пока элемент нажат;</li>
78
<li>: checked - применяется к выбранным чекбоксам или радиокнопкам;</li>
78
<li>: checked - применяется к выбранным чекбоксам или радиокнопкам;</li>
79
<li>: disabled - когда элемент недоступен;</li>
79
<li>: disabled - когда элемент недоступен;</li>
80
<li>: nth-child () - срабатывает по порядку внутри родителя.</li>
80
<li>: nth-child () - срабатывает по порядку внутри родителя.</li>
81
</ul><p>Пример с псевдоклассом : focus, CSS-код анимации:</p>
81
</ul><p>Пример с псевдоклассом : focus, CSS-код анимации:</p>
82
input { padding: 8px 12px; border: 2px solid lightgray; border-radius: 4px; outline: none; transition: border-color 0.3s, box-shadow 0.3s; } input:focus { border-color: dodgerblue; box-shadow: 0 0 5px dodgerblue; }<p>Когда пользователь кликает по полю ввода, то есть фокусируется на нём, срабатывает CSS-анимация с нашим псевдоклассом : focus: поле подсвечивается синим, и появляется лёгкая тень:</p>
82
input { padding: 8px 12px; border: 2px solid lightgray; border-radius: 4px; outline: none; transition: border-color 0.3s, box-shadow 0.3s; } input:focus { border-color: dodgerblue; box-shadow: 0 0 5px dodgerblue; }<p>Когда пользователь кликает по полю ввода, то есть фокусируется на нём, срабатывает CSS-анимация с нашим псевдоклассом : focus: поле подсвечивается синим, и появляется лёгкая тень:</p>
83
<em>Инфографика: CSS-анимация. Skillbox Media</em><ul><li>Попытка анимировать display или position - они не поддерживают плавность:</li>
83
<em>Инфографика: CSS-анимация. Skillbox Media</em><ul><li>Попытка анимировать display или position - они не поддерживают плавность:</li>
84
</ul>div { transition: display 1s ease; display: none; }<p><strong>Решение:</strong>лучше использовать opacity, transform или visibility:</p>
84
</ul>div { transition: display 1s ease; display: none; }<p><strong>Решение:</strong>лучше использовать opacity, transform или visibility:</p>
85
div { transition: opacity 0.5s ease; opacity: 0; }<ul><li>Отсутствие transition при : hover - без него изменения происходят резко:</li>
85
div { transition: opacity 0.5s ease; opacity: 0; }<ul><li>Отсутствие transition при : hover - без него изменения происходят резко:</li>
86
</ul>button:hover { background-color: red; }<p><strong>Решение:</strong>добавить transition:</p>
86
</ul>button:hover { background-color: red; }<p><strong>Решение:</strong>добавить transition:</p>
87
button { transition: background-color 0.3s ease }<ul><li>Анимация "в никуда" - забывают задать animation-name или @keyframes:</li>
87
button { transition: background-color 0.3s ease }<ul><li>Анимация "в никуда" - забывают задать animation-name или @keyframes:</li>
88
</ul>div { animation: 1.5s ease-in-out; }<p><strong>Решение:</strong>начинать создание CSS-анимации с @keyframes и animation-name:</p>
88
</ul>div { animation: 1.5s ease-in-out; }<p><strong>Решение:</strong>начинать создание CSS-анимации с @keyframes и animation-name:</p>
89
@keyframes animName { from: { opacity: 0; } to: { opacity: 1; } } div { animation: animName 1.5s ease-in-out; }<ul><li>Слишком долгая или резкая анимация - делает интерфейс неудобным:</li>
89
@keyframes animName { from: { opacity: 0; } to: { opacity: 1; } } div { animation: animName 1.5s ease-in-out; }<ul><li>Слишком долгая или резкая анимация - делает интерфейс неудобным:</li>
90
</ul>.menu { transition: all 60s linear; }<p><strong>Решение:</strong>рассчитывать адекватное время, учитывая как производительность, так и интерфейс, не заставляющий пользователя ожидать.</p>
90
</ul>.menu { transition: all 60s linear; }<p><strong>Решение:</strong>рассчитывать адекватное время, учитывая как производительность, так и интерфейс, не заставляющий пользователя ожидать.</p>
91
.menu { transition: all 0.6s linear; }<ul><li>Нерациональное использование infinite - бесконечная анимация там, где не нужна.</li>
91
.menu { transition: all 0.6s linear; }<ul><li>Нерациональное использование infinite - бесконечная анимация там, где не нужна.</li>
92
</ul>.logo { animation: load 1.3s linear infinite; }<p><strong>Решение:</strong>будьте аккуратны с бесконечностью.</p>
92
</ul>.logo { animation: load 1.3s linear infinite; }<p><strong>Решение:</strong>будьте аккуратны с бесконечностью.</p>
93
<p>CSS-анимации - это быстрый, лёгкий и эффективный способ придать интерфейсу живость и выразительность без использования JavaScript. Однако у них есть свои границы. Чтобы анимации работали правильно и не мешали пользователю, важно понимать, где CSS справится сам, а где нужен JavaScript.</p>
93
<p>CSS-анимации - это быстрый, лёгкий и эффективный способ придать интерфейсу живость и выразительность без использования JavaScript. Однако у них есть свои границы. Чтобы анимации работали правильно и не мешали пользователю, важно понимать, где CSS справится сам, а где нужен JavaScript.</p>
94
<p><strong>Используйте CSS</strong>, если:</p>
94
<p><strong>Используйте CSS</strong>, если:</p>
95
<ul><li>Анимация простая и декоративная - например, появление, затухание, движение, наведение.</li>
95
<ul><li>Анимация простая и декоративная - например, появление, затухание, движение, наведение.</li>
96
<li>Нужно добиться высокой производительности и плавности.</li>
96
<li>Нужно добиться высокой производительности и плавности.</li>
97
<li>Анимация не требует сложной логики или взаимодействия с данными.</li>
97
<li>Анимация не требует сложной логики или взаимодействия с данными.</li>
98
<li>Вы хотите, чтобы анимация работала автоматически, как часть дизайна.</li>
98
<li>Вы хотите, чтобы анимация работала автоматически, как часть дизайна.</li>
99
</ul><p><strong>Используйте JavaScript</strong>, если:</p>
99
</ul><p><strong>Используйте JavaScript</strong>, если:</p>
100
<ul><li>Анимация должна зависеть от событий, условий или пользовательских данных.</li>
100
<ul><li>Анимация должна зависеть от событий, условий или пользовательских данных.</li>
101
<li>Нужно контролировать воспроизведение: остановка, пауза, отмена, обратная перемотка.</li>
101
<li>Нужно контролировать воспроизведение: остановка, пауза, отмена, обратная перемотка.</li>
102
<li>Требуется синхронизация с другими процессами или элементами интерфейса.</li>
102
<li>Требуется синхронизация с другими процессами или элементами интерфейса.</li>
103
<li>Нужна интерактивность: свайпы, клики, drag & drop и так далее.</li>
103
<li>Нужна интерактивность: свайпы, клики, drag & drop и так далее.</li>
104
</ul><a>Курс с трудоустройством: "Профессия Фронтенд-разработчик + ИИ" Узнать о курсе</a>
104
</ul><a>Курс с трудоустройством: "Профессия Фронтенд-разработчик + ИИ" Узнать о курсе</a>