Эффекты наклона при наведении
Сегодня мы поделимся с вами идеями нескольких анимационных CSS эффектов при наведении:

Посмотреть демо
Скачать исходный код
Мы собираемся “оживить” изображение, которое может представлять собой как ссылку, так и просто находиться в галерее вместе с другими картинкам, с помощью эффекта со смещением при наведении.
Комбинируя несколько эффектов в одном, можно добиться достаточно интересных результатов: эффект “сияния”, полупрозрачное наложение, а также яркий градиент, контур и рамка. Эти примеры демонстрируют сразу несколько идей для оформления анимации.
Примечание: некоторые из рассматриваемых примеров представлены исключительно в экспериментальных целях, и могут не работать в некоторых браузерах. Сегодня мы будем использовать свойства flexbox, perspective, а в последнем примере еще и поэкспериментируем с режимами смешивания.
HTML создаваемого эффекта
Примерно так будет устроен элемент для применения CSS эффекта при наведении. В данном случае мы используем анкор:
<a href="#" class="tilter tilter--2">
<figure class="tilter__figure">
<img class="tilter__image" src="img/3.jpg" alt="img03" />
<div class="tilter__deco tilter__deco--shine"><div></div></div>
<div class="tilter__deco tilter__deco--overlay"></div>
<figcaption class="tilter__caption">
<h3 class="tilter__title">Helen Portland</h3>
<p class="tilter__description">Seattle</p>
</figcaption>
<svg class="tilter__deco tilter__deco--lines" viewBox="0 0 300 415">
<path d="M20.5,20.5h260v375h-260V20.5z" />
</svg>
</figure>
</a>
Стилизация эффекта
Стили создаваемого CSS эффекта:
.tilter {
position: relative;
display: block;
flex: none;
width: 300px;
height: 415px;
margin: 1.5em 2.5em;
color: #fff;
perspective: 1000px;
}
.tilter * {
pointer-events: none;
}
.tilter:hover,
.tilter:focus {
color: #fff;
outline: none;
}
.tilter__figure,
.tilter__image {
display: block;
width: 100%;
height: 100%;
margin: 0;
}
.tilter__figure > * {
transform: translateZ(0px); /* Принудительное упорядочивание расположения */
}
.tilter__figure {
position: relative;
}
.tilter__figure::before {
content: '';
position: absolute;
top: 5%;
left: 5%;
width: 90%;
height: 90%;
box-shadow: 0 30px 20px rgba(35,32,39,0.5);
}
.tilter__deco {
position: absolute;
top: 0;
left: 0;
overflow: hidden;
width: 100%;
height: 100%;
}
.tilter__deco--overlay {
background-image: linear-gradient(45deg, rgba(226, 60, 99, 0.4), rgba(145, 58, 252, 0.4), rgba(16, 11, 192, 0.4));
}
.tilter__deco--shine div {
position: absolute;
top: -50%;
left: -50%;
width: 200%;
height: 200%;
background-image: linear-gradient(45deg, rgba(0, 0, 0, 0.5) 0%, rgba(255, 255, 255, 0.25) 50%, transparent 100%);
}
.tilter__deco--lines {
fill: none;
stroke: #fff;
stroke-width: 1.5px;
}
.tilter__caption {
position: absolute;
bottom: 0;
width: 100%;
padding: 4em;
}
.tilter__title {
font-family: 'Abril Fatface', serif;
font-size: 2.5em;
font-weight: normal;
line-height: 1;
margin: 0;
}
.tilter__description {
font-size: 0.85em;
margin: 1em 0 0 0;
letter-spacing: 0.15em;
}
Код Javascript
В настройках можно определять, какие движения будут выполнять элементы, к которым применяются эффекты при наведении на картинку CSS:
- Можно использовать translation и rotation по всем осям, и animation (продолжительность, ускорение и эластичность; все примерно то же, что можно видеть в настройках anime.js), чтобы вернуться к исходной стилизации;
- Мы указываем значения для каждой оси как для translation, так и для rotation следующим образом:
- number: или translation: {x: 10, y: -10} означает, что элемент будет двигаться по оси Х от значения -10px до 10px (по мере того, как перемещается курсор мыши слева направо), а также по оси Y от 10px до -10px (в зависимости от того, как курсор мыши перемещается сверху вниз);
- array: или translation: {z: [10,100]} означает, что элемент будет перемещаться по оси Z от 10px к 100px.
Инициализация:
new TiltFx(el, [options]);
Настройки:
var options = {
movement: {
// Основной контейнер.
imgWrapper : {
translation : {x: 10, y: 10, z: 30},
rotation : {x: 0, y: -10, z: 0},
reverseAnimation : {duration : 200, easing : 'easeOutQuad'}
},
//SVG-элементы (линии).
lines : {
translation : {x: 10, y: 10, z: [0,70]},
rotation : {x: 0, y: 0, z: -2},
reverseAnimation : {duration : 2000, easing : 'easeOutExpo'}
},
// Текст заголовка.
caption : {
rotation : {x: 0, y: 0, z: 2},
reverseAnimation : {duration : 200, easing : 'easeOutQuad'}
},
// Перекрываемый элемент.
overlay : {
translation : {x: 10, y: -10, z: 0},
rotation : {x: 0, y: 0, z: 2},
reverseAnimation : {duration : 2000, easing : 'easeOutExpo'}
},
// Блестящий элемент.
shine : {
translation : {x: 100, y: 100, z: 0},
reverseAnimation : {duration : 200, easing : 'easeOutQuad'}
}
}
}
Надеемся, вам понравились сегодняшние hover CSS эффекты, и вы найдете им применение в собственных проектах!
Поддержка браузерами: Chrome, Firefox, Internet Explorer, Safari, Opera.
Ссылки и материалы
- anime.js;
- Изображения взяты с Pexels, а также с Unsplash.com;
- ImagesLoaded.