- Денис Горелов
- CSS и CSS3
- Просмотров: 0
Я полагаю, многие из вас встречали подобные кнопки на сайтах, но возможно не все знают, как реализовать такой анимированный эффект на CSS. Смотрите, обучайтесь и обязательно делитесь своими примерами в комментариях под видео.
See the Pen BmqQoX by Denis (@Dwstroy) on CodePen.
Что бы не тратить ваше время я подготовил архив, в нем находится index файл с подключением css, в CSS прописаны две строчки, установил шрифт и подключил картинку на задний фон, которая находится в папке img.
Делаем каркас анимированной кнопки
Открываем index и опишем каркас кнопки. Между тегами body вставляем блок с классом .dws у которого основное назначение отцентровать кнопку посередине экрана. Затем следует кнопка с классом .pulse, в ней вложим два блока, первый блок с классом .phone разместим в нем иконку, и следующий для текста с класс .text.
<wrapper> div.dws>div.pulse>div.phone+div.text </wrapper>
Пропишем текст «Кнопка связи», и перейдем на сайт fontawesome.io.
Отберем иконку, копируем ее код <i class="fa fa-phone"></i> и вставляем в отведенном блоке c классом .phone.
Далее, что бы она отобразилась, подключим дополнительный файл bootstrapcdn.com.
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Импульсный эффект с использованием CSS3 Transform Scale</title> <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet" > <link rel="stylesheet" type="text/css" href="style.css"> </head> <body> <wrapper> <div class="dws"> <div class="pulse"> <div class="phone"><i class="fa fa-phone"></i></div> <div class="text">Кнопка связи</div> </div> </div> </wrapper> </body> </html>
На этом, с файлом index пока работы закончены, переходим к описанию стилей.
Описываем стили общей структуры кнопки
Отобразим границы пульсирующего блока при помощи outline в 1 пик., зададим размеры блоку в 90 пик. Текст с иконкой делаем белым цветом, центруем его по середине, добавляем цвет фона, а при помощи border-radius в 50% делаем закругление.
.pulse { outline:1px solid #FAA21A; width: 90px; height: 90px; color: #fff; text-align: center; background: #5CC2EA; border-radius: 50%; }
Для удобства все с позиционируем по центру экрана.
.dws { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
Скроем текст, что бы он не мешал.
.text { opacity: 0; }
Оформляем иконку в CSS
Позиционируем иконку абсолютно блоку, для этого блоку .pulse добавим position:relative, а классу .phone position:absolute. Отобразим границы блока outline:1px solid #51ff1b, увеличим иконку до 50 пик, делаем ее посередине, прописываем размеры блока и выравниваем по вертикали.
.phone { position: absolute; outline:1px solid #51ff1b; font-size: 50px; text-align: center; width: 90px; height: 90px; line-height: 94px; }
Пока скроем данный блок opacity: 0; , и оформим текст.
Позиционируем текст абсолютно блоку, выделим границы outline, делаем заглавными буквами, увеличим жирность, центруем по вертикали, размер шрифта делаем в 15 пик.
.text { position: absolute; outline:1px solid #51ff1b; text-transform: uppercase; font-weight: 700; top: 28px; font-size: 15px; /*opacity: 0;*/ }
Следующей задачей, создаем анимацию при наведении.
Описываем анимацию и пульсирующий эффект кнопки
При помощи трансформации transform: scaleX(-1) отобразим текст зеркально по оси Х, используя псевдокласс hover вернем его в начальное положение transform: scaleX(1). Добавляем анимацию при наведении, и анимацию в момент когда убираем курсор мыши transition:.5s ease-in-out.
Затем остается элемент в начальном положение скрывать, а при наведении его отображаем.
font-size: 15px; transform: scaleX(-1); transition: .5s ease-in-out; opacity: 0; } .pulse:hover .text { transform: scaleX(1); transition: .5s ease-in-out; opacity: 1; }
Приступим к анимации телефона. Отображаем иконку, пишем animation, устанавливаем кадр и задаем время анимации в 0.9 сек. Прописываем свойство ease-in-out, что бы анимация медленно начиналась и также заканчивалась, при помощи infinite делаем проигрывания анимации бесконечно.
animation: phone .9s ease-in-out infinite; /*opacity: 0;*/ }
Далее описываем ключевой кадр, где при помощи трансформации наклоняем в стороны трубку.
@keyframes phone { 0%, 100% { transform: rotate(-20deg); } 50% { transform: rotate(21deg); } }
При наведении, задействуем трансформацию, уменьшаем элемент иконки в ноль, скрываем его при помощи opacity, задействуем transition в 0.5s для плавного исчезновения.
.pulse:hover i{ transition: .5s ease-in-out; transform: scale(0); opacity: 0; }
А для того чтобы она также плавно появлялась, прописываем для элемента иконки transition в 0.5s.
.phone i { transition: .5s ease-in-out; }
Убираем обводки outline, которые задавали ранее, и приступим к описанию пульсирующего элемента.
Описываем Анимацию пульсирующего элемента
Создаем псевдоэлемент ::before, пишем content, позиционируем его абсолютно, припишем border в 1 пик. задаем координаты по отношению круга, закругляем, и прописываем анимацию кадра.
Задаем название кадра pulse, делаем его в 1.8s, задаем равномерность анимации на протяжении всего времени, и зацикливаем.
.pulse::before { content: ''; position: absolute; border: 1px solid #29AEE3; left: -20px; right: -20px; top: -20px; bottom: -20px; border-radius: 50%; animation: pulse 1.8s linear infinite; }
Ниже описываем кадр самой анимации.
@keyframes pulse { 0% { transform: scale(0.5); opacity: 0; } 50% { opacity: 1; } 100% { transform: scale(1.2); opacity: 0; } }
Добавляем еще один псевдоэлемент .pulse:hover::after, с такими же значениями и для того что бы его отобразить, отдельно для любого из псевдоэлемента ::after задаем задержку в пол секунды.
.pulse::after { animation-delay: .5s; }
Для того что бы они срабатывали по наведению делаем событие :hover и в начальном положении делаем элементы не видимыми.
border-radius: 50%; animation: pulse 1.8s linear infinite; opacity: 0; }
В принципе кнопка готова, можно также добавить дополнительно блок для курсора, по нажатию на который будем выполнять какие-то действия.
<div class="bloc"></div>
В css, опишем классу .bloc стили, но для начала сгруппируем повторяющие элементы.
.pulse, .bloc, .phone { position: absolute; width: 90px; height: 90px; border-radius: 50%; color: #fff; text-align: center; }
Описываем .bloc
.bloc { cursor: pointer; z-index: 1; overflow: hidden; }
Добавим изменения основного фона кнопки на более темнее
.pulse:hover { background: #29AEE3; }
Делаем плавность ее появления.
.pulse { position: relative; color: #fff; background: #5CC2EA; transition: .5s; }
В принципе на этом все, получили простенькую анимацию, на базе которой вы уже сможете делать свои иконки с пульсирующем анимированным эффектом.
Используйте, внедряйте знания, которые приобрели, и обязательно в комментариях делитесь своими примерами, что у вас получилось.
Урок подготовил Горелов Денис, до встречи в следующих видео по CSS.
Оставить комментарий:
Отзывы
Спасибо большое за очень полезную информацию.
Виктор
Но в вашей бочке меда есть ложка меда. т.к. нет примера подключения возможности перехода по гиперссылке на нужную страницу по событию клика левой клавиши мышки.
Написать отзыв
5 предыдущих видео
Кнопка с анимацией для сайта на CSS Просмотров:(0)Media queries CSS / Адаптации страниц Просмотров:(0)
МОБИЛЬНАЯ ВЕРСИЯ горизонтального меню | Адаптируем меню на чистом CSS Просмотров:(0)
CSS анимация картинки при наведении | tutorial css3 Просмотров:(0)
Социальные кнопки на HTML / CSS3 Просмотров:(0)
Выбирай свою тему, и мы напишем когда выйдет по ней очередное видео.