Мастерская. Пульсирующая градиентная заливка текста
В этом курсе-мастерской мы будем использовать радиальные градиенты для создания потрясающих декоративных эффектов. Мы создадим карточку заклинания «Взрыв» из всеми любимой игры «Герои Меча и Магии III» с красивым эффектом сияния, который будет отражаться на заголовке.
В первой части курса мы разберёмся, как создать эффект пульсирующей градиентной заливки для заголовка карточки.
В исходном состоянии у нас есть карточка со статичным фоновым изображением и заголовком, стилизованным по умолчанию.
Все стили, необходимые для реализации эффекта, будут применяться к заголовку h1.
Зададим для h1 брутальный и плотный шрифт Impact, который отлично подходит для заливки градиентом.
Увеличим размер шрифта заголовка до 60px.
Зададим высоту строки 1.1, чтобы сделать текст плотнее по вертикали.
Добавим text-transform: uppercase, чтобы текст заголовка автоматически преобразовывался в верхний регистр.
Приступим к градиентной заливке.
Добавим для заголовка фоновое изображение с помощью радиального градиента (radial-gradient). Первый цвет будет ярко-жёлтым (#FFE135) с позицией 35%. Пока цвет только один, он заполняет весь блок.
Добавим второй, более тёмный цвет — #D4A017, с позицией 35.1%. Получится резкий переход между цветами.
Добавим ещё одну пару цветов: такой же золотой, что и на предыдущем шаге, с позицией 48%, и тёмно-серый #555555 с позицией 48.1%.
Получится ещё один резкий переход из золотого в серый.
Добавим последний, самый тёмный цвет. Он займёт все оставшееся пространство градиента.
Принудительно зададим градиенту круглую форму. Для этого используем ключевое слово circle.
Сместим центр градиента в правый нижний угол блока.
И зададим радиус градиента с помощью ключевого слова farthest-side, что означает «до дальней стороны». Радиус градиента стал равен ширине h1.
Параметры заголовка и сам градиент готовы. Теперь нужно подготовиться к созданию анимации.
По умолчанию фоновое изображение-градиент привязано к левому верхнему углу контейнера, и его размеры равны размеру контейнера. Изменим позицию фона — поместим его в правый нижний угол.
Для анимирования градиента мы будем использовать самый простой приём — изменение размера фонового изображения.
Давайте посмотрим, как будет вести себя градиент, если задать размер, который больше контейнера.
Давайте ещё больше увеличим размер фона.
Получается то, что нам нужно: градиент «вырастает» из правого нижнего угла, и яркие области заливают контейнер.
Добавим свойство -webkit-background-clip: text;. Теперь фон применяется только к тексту, а не ко всей области контейнера.
Добавим свойство -webkit-text-fill-color: transparent;. Цвет текста стал прозрачным и проявилась градиентная заливка.
Начнём готовить настройки анимации.
Создадим переменную --implosion-timing-function и запишем в неё временную функцию для анимации. Эту временную функцию мы будем использовать в нескольких местах, поэтому переменную добавим в :root.
Временная функция создана с помощью новой CSS-функции linear(). Она описывает анимацию, которая мелко пульсирует в начале, а затем проигрывается почти линейно.
Добавим ключевые кадры анимации pulse-gradient. Всё просто — размер фона увеличивается от 100% 100% в начальной точке до 400% 400% в конечной.
Сложность анимации достигается за счёт временной функции.
Добавим анимацию pulse-gradient заголовку. Зададим ей длительность 10 секунд, бесконечное количество повторений, переменное направление воспроизведения и ранее созданную временную функцию.
Временно закомментируем -webkit-background-clip и -webkit-text-fill-color, чтобы увидеть, как ведёт себя анимация фона.
Раскомментируем -webkit-background-clip и -webkit-text-fill-color. Уберём свойство background-size, с которым мы экспериментировали ранее (оно всё равно переопределяется анимацией).
Эффект анимированной градиентной заливки текста готов.
Пройдите мастерскую Градиентная заливка текста, состоящую из 14 заданий, в которой вы шаг за шагом создадите похожий эффект и закрепите новые навыки.
В следующей части добавим эффект сияния для изображения взрыва, и обе анимации заиграют в унисон!