Примечание переводчика: содержание этой статьиBaymax in CSS - CSS AnimationПеревод
«Большой белый» в CSS
Давайте создадим персонажа Бэймакс из фильма «Большой герой 6» с помощью CSS.
В этом посте мы анимируем фоновое изображение вместе с тонким эффектом синхронизации анимации и делаем демонстрацию CSS с одним элементом HTML.
Ты сможешьпосмотреть в полноэкранном режиме здесь.
один элемент
Используя псевдоэлементы, мы сможем создать часть лица, используя один HTML-элемент.
<div class="baymax"></div>
стиль
Чтобы подготовить сцену, мы добавим на экран тонкий градиент, чтобы он выглядел как изогнутая белая голова. С этой целью мы будемbodyИспользуйте радиальный градиент сверху.
body {
background: radial-gradient(circle at center, #fff, #fff 50%, #aaa);
background-size: 100% 100%;
background-repeat: no-repeat;
height: 100vh;
}
Далее мы будем располагаться лицом в центре страницы. Рот — простая черная линия, мы будем использовать созданную границу.
.baymax {
border-bottom: 1.5em solid #000;
position: absolute;
top: 50%;
left: 50%;
width: 50%;
transform: translate(-50%, -40%);
}
Первое свойство задает ширину1.5emчерная граница. Затем, используя линию абсолютного позиционирования, сдвиньте ее на 50% вниз и на 50% вниз слева. Эти 50% значений относятся к контейнеру (body) зависит от размера элемента.
Проблема, с которой мы столкнулись сейчас, заключается в том, что элементы теперь начинаются в середине и на половине экрана. Это не по центру.
Чтобы противодействовать этому, мы используем преобразование, чтобы стянуть элемент к 50% его ширины и увеличить его ширину на 40%.
На этом этапе рот центрируется вот так:
Плюс глаз
мы будем использоватьbeforeа такжеafterПсевдоэлементы добавляют глаза на лицо. Это не требует дополнительного HTML и полностью обрабатывается CSS.
.baymax::before {
background: #000;
border-radius: 50%;
content: "";
position: absolute;
width: 12em;
height: 12em;
left: -9em;
top: -6em;
transform: skewX(-4deg);
}
.baymax::after {
background: #000;
border-radius: 50%;
content: "";
position: absolute;
width: 12em;
height: 12em;
right: -9em;
top: -6em;
transform: skewX(4deg);
}
Каждый из этих псевдоэлементов имеет черный фон и радиус границы 50%, чтобы сделать их круглыми. Каждый расположен на одном конце рта, один на концеskewПреобразуйте так, чтобы они казались немного наклоненными назад. Результат должен выглядеть так:
низкая мощность
В фильме есть интересная сцена, где батарея Baymax садится. Он бегал вокруг, его веки были опущены. Мы можем использовать комбинацию фоновых градиентов и анимации для создания эффекта.
Сначала мы должны дать фону два цвета. Глазная часть черная, черная — веко, белая — веко. Сначала нам нужно поместить белую часть за пределы глаза, затем мы анимируем ее так, чтобы веко опустилось.
.baymax::before {
background: linear-gradient(to bottom, #efefef, #efefef 50%, #000 50%, #000);
background-position: 0 -100%;
background-size: 200% 200%;
...
}
.baymax::after {
background: linear-gradient(to bottom, #efefef, #efefef 50%, #000 50%, #000);
background-position: 0 -100%;
background-size: 200% 200%;
...
}
Мы добавляем фоновый линейный градиент так, чтобы он был в два раза больше высоты контейнера, затем располагаем его так, чтобы верхняя половина находилась за пределами контейнера.
С двумя фоновыми градиентами мы можем добавить анимациюkeyframesконтролировать движение век.
@keyframes blink {
0%, 50% {
background-position: 0 100%;
}
85%, 95% {
background-position: 0 75%;
}
100% {
background-position: 0 100%;
}
}
анимацияkeyframesэто способ описать серию кадров, используя проценты. Процент связан с продолжительностью анимации. Таким образом, процент 50% означает половину анимации.
Таким образом, мы можем установить фон на полпути, затем между 50% и 85%, двигаться вниз, а затем быстро вернуться в конце анимации.
Следующим шагом будет указание псевдоэлементу использовать эти ключевые кадры анимации. Будуanimationатрибут существующего стиля.
.baymax::before {
animation: blink 6s infinite;
...
}
.baymax::after {
animation: blink 6s 0.1s infinite;
...
}
Здесь мы говорим браузеру использовать для каждого элементаblinkанимация. Продолжительность анимации установлена на 6 секунд и будет повторяться бесконечно.
Во втором примере есть дополнительное свойство.6sПосле0.1секунд, чтобы указать браузеру отложить анимацию0.1Второй. Это создает эффект закрытия второго глаза чуть позже первого. Это добавляет эффект усталости, провисания и делает его более человечным. Окончательный результат должен выглядеть так:
Ты сможешьпосмотреть в полноэкранном режиме здесь.
браузер
В примерах кода я опускаю все часто используемые-webkitа также-mozприставка.transformа такжеanimationАтрибуты должны быть префиксными, я рекомендую использовать такие вещи, как AutoPRefixer.
Совместно используемая GIF-версия
Это анимированная GIF-версия, которой вы можете легко поделиться в Интернете.
(над)
автор этой статьиThinker
Если в этой статье есть какие-либо ошибки, пожалуйста, оставьте сообщение, и я исправлю его вовремя.
Если вы найдете это полезнымпоставить лайкилисобиратьБар!
Добро пожаловать на перепечатку или распространение, пожалуйста, указывайте источник при перепечатке