- Денис Горелов
- CSS и CSS3
- Просмотров: 0
CSS анимация картинки при наведении
В одном из видео уроке по анимации картинки в CSS показывал как можно сделать эффект затемнения изображения псевдоэлементами :before и :after, путем изменением режима пересечения цветов.
See the Pen eePdjZ by Denis (@Dwstroy) on CodePen.
В данном видео уроке сделаем такой эффект анимации, картинку расположим по центру экрана, при наведении будем ее увеличивать с небольшим поворотом и эффектом размытия, а при помощи псевдоэлементов задаем затемнения с анимацией появления текста. Заголовок появляется с заднего фона, а параграф с переднего. У кнопки при наведении будет проходить блик, и в конечном итоге мы получим такой результат.
Все это реализуем на чистом CSS3, и в уроке задействуем:
- Псевдоэлементы :before и :after
- Расположим элементы при помощи position
- А для анимации воспользуемся transform и transition
HTML разметка блоков для картинки
Начинаем как всегда с идеи, нам понадобится блок с оберткой, которому присвоим класс .dws-wrapper и основное его предназначение, позиционирование всех элементов посередине экрана. В нем расположим блок с классом .boxImg, в котором будем складывать все элементы нашей анимации.
У нас будет три основных элемента:
- картинка;
- псевдоэлементы;
- блок с текстом.
Псевдоэлементам присвоим класс .container, а блоку с текстом класс .text и расположим в нем заголовок и параграф с кнопкой.
Открываю свою среду разработки, я использую редактор PhpStorm. Создаю файл index.html, прописываю заголовок страницы «Эффект наложений картинок», затем в body открывает тег header где будем описывать html разметку.
div.dws-wrapper>div.boxImg>img+div.container>div.text>h1+p+a.bt
Прописываем сразу путь к изображению, оно будет находиться в папке img с названием nature.jpg. Чуть позже мы его вставим. Пропишем заголовок и основной текст «Ваш шедевр готов!», «Варианты разнообразных эффектов при наведении безграничны вы можете придумывать их сами, меняя параметры transform и позиционируя элементы как угодно.». Ссылке атрибут вставим решетка, название пропишем «Подробнее».
<header> <div class="dws-wrapper"> <div class="boxImg"><img src="img/nature.jpg" alt="Природа"> <div class="container"> <div class="text"> <h1>Ваш шедевр готов!</h1> <p>Варианты разнообразных эффектов при наведении безграничны вы можете придумывать их сами, меняя параметры transform и позиционируя элементы как угодно.</p> <a href="#" class="bt">Подробнее</a> </div> </div> </div> </div> </header>
Создадим папку img, в нее перенесем картинку на задний фон и рисунок под анимацию.
Видим, что она сразу отобразилась в окне браузера и ее размера гораздо выше, чем окно просмотра. Этот момент нам нужно будет учесть, картинка может быть загружена разных размеров и не должна вылизать за пределы созданных рамок.
Сразу создаем и подключаем style.css, и тут же подключим шрифты. Как это делать я объяснял в одном из уроков и поэтому тут останавливаться не будем.
<link rel="stylesheet" href="style.css" type="text/css"> <link href="https://fonts.googleapis.com/css?family=Cuprum" rel="stylesheet">
C разметкой мы закончили и можно приступать к описанию стилей.
Опишем стили CSS3 основной структуры
Описание стилей я разделяю на несколько этапов:
- мы описываем основную структуру элементов, выравниваем и позиционируем блоки;
- затем делаем анимацию и дополнительные эффекты при наведении;
- третьим этапом, если есть необходимость, придаем элементам дизайнерское оформление.
Первым делом я сбрасываю отступы у всех элементов, что бы отображалось во всех браузерах одинаково.
* { margin: 0; padding: 0; }
Так как изображение сейчас огромное и выводится полностью на весь экран, давайте, оптимизируем его под ширину в 500 пик. Для этого я отбираю блок .boxImg и задаю ширину 500 пик, а высоту в 300 пик.
Тексту зададим шрифт Cuprum, затем сделаем об водку для изображения в 5 пик. при помощи border. Как видите, изображение вылезло за рамки границы установленного блока, и что бы скрыть все лишнее воспользуемся overflow: hidden;.
.boxImg{ font-family: Cuprum, Arial, Helvetica, sans-serif; width: 500px; height: 300px; border: 5px solid #b7bab7; overflow: hidden; }
Далее самой картинке задам высоту в 300 пик.
.boxImg img{ height: 300px; }
Благодаря именно высоте мы сможем оптимально подгонять другие изображения под текущий размер блока 500х300 пик.
После того как картинка приняла оптимальные размеры, отцентруем элементы по середине экрана.
В первую очередь на задний фон страницы установлю изображение, что бы было приятно смотреть и при помощи position центруем блок посередине.
body{ background-image: url("img/ep_naturalwhite.png"); } .dws-wrapper{ position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }
Нам нужно создать два псевдоэлемента по бокам картинки, для этого блоку .container зададим position: absolute; с начальными точками координат в ноль. Так же пропишем ширину и высоту в 100%
.container{ width: 100%; height: 100%; position: absolute; top: 0; left:0; }
Затем сгруппируем псевдоэлементы :before и :after и пропишем им повторяющие стили которые будут у их обоев.
.container:before, .container:after{ content: ''; width: 300px; height: 300px; position: absolute; top: 0; left:0; background: #1b70d5; }
Далее описываем каждый псевдоэелемент по отдельности, отбираем .container:before, при помощи translateX сдвинем блок на 125%, и при помощи rotate повернем его на 45 градусов.
.container:before{ transform: translateX(-125%) rotate(45deg); }
Тоже самое сделаем с псевдоэлементом :after, только по оси Х сдвинем его в правую сторону.
.container:after{ transform: translateX(195%) rotate(45deg); }
В дальнейшем мы опишем эти псевдоэлементы что бы они при наведении на блок, двигались к центру и останавливались у противоположных краев. Этим займемся позже, а сейчас опишем блок с текстом.
Поработаем немного с текстом. Присвоим классу .text position: absolute; и сверху укажем отступ в 20%. Назначим тексту белый цвет и помещаем его по центру блока.
.text{ position: absolute; top: 20%; color: #ffffff; text-align: center; }
Заголовку задаем отступ снизу в 20 пик, размер укажем в 30 пик. и нам нужно сделать так, что бы он появлялся из далека, для этого применим трансформацию с функцией scale (масштабирование).
Видим, что заголовок исчез, и если будем менять параметр масштабирования, мы не увидим плавный его переход. Для этого нам нужно прописать transition: .5s;. Теперь изменяя параметр, масштабирование мы видим, как заголовок появляется и при scale(0), он исчезает.
.text h1{ margin-bottom: 20px; font-size: 30px; transform: scale(0); transition: .5s; }
Затем работаем с абзацем, задаем размер в 18 пик., делаем отступы по бакам в 100 пик, текст растягиваем по ширине блока. Тут нам нужно сделать, что бы он появлялся с переднего плана. Для этого прописываем масштабирование только в противоположно варианте transform: scale(2);. Чтобы сделать плавный переход пропишем transition: .5s;, а так как текст, при данном масштабировании не выходит за рамки видимой области нам нужно его скрыть, и пропишем opacity: 0;.
.text p{ font-size: 18px; margin: 0 100px; text-align: justify; transform: scale(1); transition: .5s; opacity: 0; }
Далее отбираем ссылку с классом .bt , и от позиционируем ее чуть ниже, делаем белым цветом, убираем подчеркивание, и заглавными опишем буквами. Задаем белую об водку в 2 пик, и добавим отступы, у рамки закруглим ее углы.
a.bt { position: absolute; top: 100%; left: 37%; color: #fff; text-decoration: none; text-transform:uppercase; border: 2px solid #ffffff; padding: 10px 30px; border-radius: 8px; }
Затем кнопке сделаем блик, для этого присвоим ей псевдоэлемент, позиционируем его за пределами блока с размерами в 50 пик. и в качестве цвета задаем ингредиент с белым оттенком, при помощи функции skewX немного его исказим.
a.bt:before { content: ""; position: absolute; top: -8px; left: -75px; height: 50px; width: 50px; background: linear-gradient(90deg, rgba(255,255,255,.1), rgba(255,255,255,.5)); transform: skewX(-45deg); }
В дальнейшем сделаем перемещение этого элемента, а на данный момент скрываем кнопку при помощи opacity: 0;Для плавной ее появлении делаем transition: .2s с функцией ease-in-out; которая начинает и заканчивает медленно анимацию.
opacity: 0; transition: .2s ease-in-out; }
Анимируем элементы при помощи :hover
Придадим анимацию кнопки при наведении не нее. Нам нужно придать движение блику, для этого отбираем этот псевдоэлемент, и задаем перемещение при наведении в правую сторону на 150 пик., а для того что бы это плавно происходило, пропишем transition в .5s и с дополнительной функцией ease-in-out; . Что бы скрыть блик за пределами блока привоем ссылке overflow: hidden;.
a.bt:hover:before {
left: 150px;
transition: .5s ease-in-out;
}
a.bt {
overflow: hidden;
}
Блик получился и не хватает эффекта при нажатии, для этого зададим бордюру более темнее цвет при клике.
a.bt:active{ border: 2px solid #b3b3b3; }
Затем скрываем кнопку и опишем появление всех элементов при наведении на блок.
Анимируем картинку в CSS
Начнем мы с изображения, картинку немного развернуть, увеличим в размере и сделаем размытой. Для это отбираем изображение при наведении, прописывает transform, с помощью rotate укажем поворот на 30 градусов и при помощи дополнительной функции увеличим его в двое. Далее задаем размытие при помощи фильтра filter: blur(2px); в 2 пик.
.boxImg:hover img{ transform: rotate(-30deg) scale(2); filter: blur(2px); }
Для плавности его появления, пропишем картинке transition: .5s;.
.boxImg img{
transition: .5s;
}
Анимируем псевдоэлементы ::before и ::after
Следующим этапом делаем перемещение псевдоэлементов, для этого пропишем их в первоначальном виде в прозрачном состоянии.
.container:before, .container:after{
opacity: .1;
}
Для :before задаем при помощи трансформации перемещение на 92% в право, с сохранением его в повернутом виде с увеличением масштаба блока в двое. Для плавного перемещения прописываем transition: .5s;, и делаем блок более видимым.
.boxImg:hover .container:before{ transform: translateX(92%) rotate(45deg) scale(2); transition: .5s; opacity: .6; }
Тоже самое проделываем с псевдоэлементом :after только перемещение блока описываем с право налево.
.boxImg:hover .container:after{ transform: translateX(-25%) rotate(45deg) scale(2); transition: .5s; opacity: .6; }
Затем скроем все лишнее, что выходит за пределы основного блока .boxImg. Для этого пропишем position: relative; блоку с картинкой, и тут же блоку зададим специфическую об водку при помощи outset.
.boxImg{
position: relative;
}
Для того что бы псевдоэлементы плавно возвращались добавляем им transition в 1 сек.
.container:before, .container:after{
transition: 1s;
}
Далее остается нам отобразить текст при наведении, при помощи той же самой трансформации отображаем заголовок, и абзац.
.boxImg:hover .text h1{ transform: scale(1); } .boxImg:hover .text p{ transform: scale(1); opacity: 1; }
Задаем изменение бордюра при наведении.
.boxImg:hover{ border: 5px inset #b7bab7; }
И данный стиль применим в покое к блоку с картинкой.
.boxImg{ border: 5px outset #b7bab7; }
Далее при помощи z-index текст помещаем на передний план все элементов.
.text{
z-index: 10;
}
Остается отобразить кнопку при наведении на блок. Отбираем блок и задаем opacity в 1, делаем плавное появление.
.boxImg:hover a.bt{ opacity: 1; transition: .5s; }
На этом код у нас готов и получился красивый эффект анимации при наведении.
Если этот урок был Вам полезен, обязательно ставьте лайк, и не пропустите следующее видео, так как в нем будет много что интересного. Обязательно внедряйте приобретенные знания в свои проекты и пользователи это оценят, а с Вами был Денис, до встречи в следующем уроке.
Оставить комментарий:
Отзывы
Отзывов нет.
Написать отзыв
5 предыдущих видео
Социальные кнопки на HTML / CSS3 Просмотров:(0)Форма авторизации на CSS / Authorization form CSS3 Просмотров:(0)
АНИМАЦИЯ при наведении на CSS | Animation HTML/CSS3 Просмотров:(0)
Анимированная кнопка на CSS / Button animation CSS3 Просмотров:(0)
Аккордеон СЛАЙДЕР на CSS / HTML за 8 минут Просмотров:(0)
Выбирай свою тему, и мы напишем когда выйдет по ней очередное видео.