Создание анимированного лого на CSS
В этом уроке мы воспользуемся CSS3 анимацией, трансформациями и прочими техниками для создания анимированного логотипа.
Логотип
Идея: логотип состоит из четырёх разноцветных элементов (точек). Эти точки преобразуются в линии, а затем снова возвращаются в исходное состояние.
HTML
Всего у нас будет четыре элемента различного цвета. Каждый элемент будет располагаться по отдельности для того чтобы мы могли отдельно управлять цветом, анимацией и прочими фишками:
<div class="c-slack"> <span class="c-slack__dot c-slack__dot--a"></span> <span class="c-slack__dot c-slack__dot--b"></span> <span class="c-slack__dot c-slack__dot--c"></span> <span class="c-slack__dot c-slack__dot--d"></span> </div>
Результат сейчас не виден. Для этого нам нужно написать немного CSS.
Определение Sass переменных & родительского класса
Мы будем использовать Sass (SCSS) для работы с переменными и математическими операциями:
- Определяем размер лого: 96px;
- Так же нам понадобится диаметр точек 18px;
- Финальное лого должно быть перевёрнуто на 15 градусов;
- Всё должно происходить за 2 секунды;
- Так же для каждого цвета мы заведём отдельную переменную.
Вот список переменных, которые я буду использовать:
// переменные $slack-size: 96px; $dot-diameter: 18px; $slack-angle: 15deg; $duration: 2s; $slack-blue: #6ecadc; $slack-yellow: #e9a820; $slack-pink: #e01563; $slack-green: #3eb991;
Давайте приступим к написанию стилей родительского класса. Внутренние элементы будут расположены абсолютно, так что самому элементу будет присвоено релативное позиционирование:
.c-slack { position: relative; z-index: 100; margin: 80px auto; width: $slack-size; height: $slack-size; }
Позиционирование точек
Каждая точка будет позиционироваться абсолютно относительно родительского контейнера и содержит border radius
равный диаметр/2
. Так же каждая из точек будет расположена согласно опциям top
, right
, bottom
, и left
. Располагаем точки по углам квадратного контейнера:
.c-slack__dot { display: block; position: absolute; width: $dot-diameter; height: $dot-diameter; border-radius: $dot-diameter/2; } .c-slack__dot--a { top: 0; left: 0; background-color: $slack-green; } .c-slack__dot--b { top: 0; right: 0; background-color: $slack-blue; } .c-slack__dot--c { bottom: 0; right: 0; background-color: $slack-yellow; } .c-slack__dot--d { bottom: 0; left: 0; background-color: $slack-pink; }
Результат должен быть следующий:
Далее приступим к анимации.
Анимация
Давайте анимируем первую точку, "dot a": будем увеличивать высоту переменной $slack-size
. После этого не только форма, но и позиция должна стать прежней:
@keyframes slack-animation--a { 0% { top: 0; bottom: auto; height: $dot-diameter; } 33% { top: 0; bottom: auto; height: $slack-size; } 34% { top: auto; bottom: 0; height: $slack-size; } 66% { top: auto; bottom: 0; height: $dot-diameter; } 100% { top: auto; bottom: $slack-size - $dot-diameter; height: $dot-diameter; } }
В браузере ничего не изменится. Для этого мы должны активировать анимацию:
.c-slack__dot--a { /* other styles */ animation: slack-animation--a $duration infinite; }
Теперь результат должен быть такой:
Теперь давайте сделаем такую же операцию со второй точкой:
@keyframes slack-animation--b { 0% { right: 0; left: auto; width: $dot-diameter; } 33% { right: 0; left: auto; width: $slack-size; } 34% { right: auto; left: 0; width: $slack-size; } 66% { right: auto; left: 0; width: $dot-diameter; } 100% { right: auto; left: $slack-size - $dot-diameter; width: $dot-diameter; } }
Не забываем подключить анимацию:
.c-slack__dot--b { /* other styles */ animation: slack-animation--b $duration infinite; }
Теперь делаем то же самое с точкой c:
@keyframes slack-animation--c { 0% { bottom: 0; top: auto; height: $dot-diameter; } 33% { bottom: 0; top: auto; height: $slack-size; } 34% { bottom: auto; top: -($slack-size - $slack-size); height: $slack-size; } 66% { bottom: auto; top: -($slack-size - $slack-size); height: $dot-diameter; } 100% { bottom: auto; top: $slack-size - $dot-diameter; height: $dot-diameter; } }
Подключаем анимацию для точки c:
.c-slack__dot--c { /* other styles */ animation: slack-animation--c $duration infinite; }
И наконец, точка d. Анимация:
@keyframes slack-animation--d { 0% { left: 0; right: auto; width: $dot-diameter; } 33% { left: 0; right: auto; width: $slack-size; } 34% { left: auto; right: -($slack-size - $slack-size); width: $slack-size; } 66% { left: auto; right: -($slack-size - $slack-size); width: $dot-diameter; } 100% { left: auto; right: $slack-size - $dot-diameter; width: $dot-diameter; } }
Подключаем анимацию:
.c-slack__dot--d { /* other styles */ animation: slack-animation--d $duration infinite; }
Теперь можем посмотреть результат в браузере:
Перекрытие элементов
Теперь нам необходимо сделать так чтобы элементы логотипа были немного смещены и перекрывали друг друга:
.c-slack__dot--a { /* other styles */ transform: translateX($dot-diameter); } .c-slack__dot--b { /* other styles */ transform: translateY($dot-diameter); } .c-slack__dot--c { /* other styles */ transform: translateX(-$dot-diameter); } .c-slack__dot--d { /* other styles */ transform: translateY(-$dot-diameter); }
Теперь результат будет таков:
Поворот логотипа
Теперь нам необходимо повернуть логотип на запланированное число градусов:
.c-slack { /* other styles */ transform: rotate(-$slack-angle); }
Результат:
Режим отображения цвета
Далее преобразуем режим отображения цвета элементов массива, в результате чего логотип становится полу-прозрачным:
.c-slack__dot { /* other styles */ mix-blend-mode: multiply; }
Финальный результат:
Итог
Вот и всё! Надеемся, что данный урок будет вам полезен!
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://callmenick.com/post/building-the-slack-animating-logo-with-only-css
Перевел: Станислав Протасевич
Урок создан: 7 Сентября 2015
Просмотров: 20333
Правила перепечатки
5 последних уроков рубрики "CSS"
-
Забавные эффекты для букв
Небольшой эффект с интерактивной анимацией букв.
-
Реализация забавных подсказок
Небольшой концепт забавных подсказок, которые реализованы на SVG и anime.js. Помимо особого стиля в примере реализована анимация и трансформация графических объектов.
-
Анимированные буквы
Эксперимент: анимированные SVG буквы на базе библиотеки anime.js.
-
Солнцезащитные очки от первого лица
Прикольный эксперимент веб страницы отображение которой осуществляется “от первого лица” через солнцезащитные очки.
-
Раскрывающаяся навигация
Экспериментальный скрипт раскрывающейся навигации.