Hover-эффекты для изображений с помощью CSS
Самая распространенная функция hover-эффектов - это выделение ссылок или кнопок текста. Но есть и много других функций.
Hover-эффекты добавляют к веб-сайту элемент интерактивности. Они имеют сильный эффект, когда применяются к изображениям, а также имеют большое влияние на пользователя, так как эти эффекты помогают создать хорошо спроектированный веб-сайт.
Hover - это эффект при наведении курсора мыши на какой-нибудь элемент. Он часто используется для стилевого оформления, а также для удобства и простоты использования.
Здесь вы узнаете, как создать креативные hover-эффекты для изображений, используя только CSS.
1. Создайте HTML
- Добавьте тег <figure> с классом "image". Тег <figure> используется для указания независимого контента.
- Используйте тег <figcaption>, чтобы создать надпись или пояснение для контента внутри тега <figure>.
<figure class="image">
<img src="https://images.unsplash.com/photo-1546146830-2cca9512c68e?ixlib=rb-1.2.1&auto=format&fit=crop&w=800&q=80" />
<figcaption>
<h3>W3docs</h3>
</figcaption>
</figure>
2. Добавьте CSS
- Установите max-width, min-width и max-height изображения.
- Установите position в relative.
- Установите overflow в hidden, чтобы контент был срезан и поместился в блок.
- Установите цвет для figcaption и выравнивание текста.
figure.image {
position: relative;
overflow: hidden;
margin: 10px;
min-width: 220px;
max-width: 310px;
max-height: 220px;
width: 100%;
background: #000000;
color: #eeeeee;
text-align: center;
}
- Добавьте transition для класса image. Мы используем селектор * (asterisk), который выделяет все элементы документа.
figure.image * {
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
}
- Установите max-width изображения в 100%.
- Установите степень прозрачности элемента.
figure.image img {
max-width: 100%;
position: relative;
opacity: 0.6;
}
Нашим следующим шагом будет добавление стиля к h3.
- Установите background и position для h3.
- Задайте свойство transform. Оно указывает 2D или 3D трансформацию элемента. Данное свойство позволяет вращать, масштабировать, сдвигать элемент.
- Задайте text-transform со значением uppercase для установления символов верхнего регистра.
- Задайте font-weight. Здесь мы установили значение в 400.
figure.image h3 {
position: absolute;
left: 50px;
right: 50px;
display: inline-block;
background: #000;
-webkit-transform: skew(-5deg) rotate(-10deg) translate(0, -50%);
-moz-transform: skew(-5deg) rotate(-10deg) translate(0, -50%);
-ms-transform: skew(-5deg) rotate(-10deg) translate(0, -50%);
-o-transform: skew(-5deg) rotate(-10deg) translate(0, -50%);
transform: skew(-5deg) rotate(-10deg) translate(0, -50%);
padding: 15px 5px;
margin: 0;
top: 50%;
text-transform: uppercase;
font-weight: 400;
}
Теперь добавим стиль к псевдоэлементу :before, что является элементом сгенерированного контента. Он добавляет перед контентом элемент любого типа.
- Установите height и width элемента и задайте цвет.
- Установите transition в transition-duration (0.3).
- Укажите свойство transform. Поверните элемент на 110 градусов и переместите его по оси y на -50%.
figure.image:before {
height: 130%;
width: 130%;
top: 0;
left: 0;
content: '';
background: #cccccc;
position: absolute;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
-webkit-transform: rotate(110deg) translateY(-50%);
-moz-transform: rotate(110deg) translateY(-50%);
-ms-transform: rotate(110deg) translateY(-50%);
-o-transform: rotate(110deg) translateY(-50%);
transform: rotate(110deg) translateY(-50%);
}
Следующим шагом установите hover-эффект для изображения, h3 и :before.
figure.image:hover img,
figure.image.hover img {
opacity: 1;
-moz-transform:scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1);
}
figure.image:hover h3,
figure.image.hover h3 {
-moz-transform:skew(-10deg) rotate(-10deg) translate(-150%, -50%);
-ms-transform: skew(-10deg) rotate(-10deg) translate(-150%, -50%);
-o-transform: skew(-10deg) rotate(-10deg) translate(-150%, -50%);
transform: skew(-10deg) rotate(-10deg) translate(-150%, -50%);
}
figure.image:hover:before,
figure.image.hover:before {
-moz-transform:rotate(110deg) translateY(-150%);
-ms-transform: rotate(110deg) translateY(-150%);
-o-transform: rotate(110deg) translateY(-150%);
transform: rotate(110deg) translateY(-150%);
}
И наконец, соединим все части нашего кода:
Пример
<!DOCTYPE html>
<html>
<head>
<title>Заголовок документа</title>
<style>
figure.image {
position: relative;
overflow: hidden;
margin: 10px;
min-width: 220px;
max-width: 310px;
max-height: 220px;
width: 100%;
background: #000000;
color: #eeeeee;
text-align: center;
}
figure.image* {
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
}
figure.image img {
max-width: 100%;
position: relative;
opacity: 0.6;
}
figure.image h3 {
position: absolute;
left: 50px;
right: 50px;
display: inline-block;
background: #000;
-webkit-transform: skew(-5deg) rotate(-10deg) translate(0, -50%);
-moz-transform: skew(-5deg) rotate(-10deg) translate(0, -50%);
-ms-transform: skew(-5deg) rotate(-10deg) translate(0, -50%);
-o-transform: skew(-5deg) rotate(-10deg) translate(0, -50%);
transform: skew(-5deg) rotate(-10deg) translate(0, -50%);
padding: 15px 5px;
margin: 0;
top: 50%;
text-transform: uppercase;
font-weight: 400;
}
figure.image:before {
height: 130%;
width: 130%;
top: 0;
left: 0;
content: '';
background: #cccccc;
position: absolute;
-webkit-transition: all 0.3s ease-in-out;
-moz-transition: all 0.3s ease-in-out;
-o-transition: all 0.3s ease-in-out;
transition: all 0.3s ease-in-out;
-webkit-transform: rotate(110deg) translateY(-50%);
-moz-transform: rotate(110deg) translateY(-50%);
-ms-transform: rotate(110deg) translateY(-50%);
-o-transform: rotate(110deg) translateY(-50%);
transform: rotate(110deg) translateY(-50%);
}
figure.image:hover img,
figure.image.hover img {
opacity: 1;
-moz-transform:scale(1.1);
-ms-transform: scale(1.1);
-o-transform: scale(1.1);
transform: scale(1.1);
}
figure.image:hover h3,
figure.image.hover h3 {
-moz-transform:skew(-10deg) rotate(-10deg) translate(-150%, -50%);
-ms-transform: skew(-10deg) rotate(-10deg) translate(-150%, -50%);
-o-transform: skew(-10deg) rotate(-10deg) translate(-150%, -50%);
transform: skew(-10deg) rotate(-10deg) translate(-150%, -50%);
}
figure.image:hover:before,
figure.image.hover:before {
-moz-transform:rotate(110deg) translateY(-150%);
-ms-transform: rotate(110deg) translateY(-150%);
-o-transform: rotate(110deg) translateY(-150%);
transform: rotate(110deg) translateY(-150%);
}
</style>
</head>
<body>
<h2> hover-эффект</h2>
<figure class="image">
<img src="https://images.unsplash.com/photo-1546146830-2cca9512c68e?ixlib=rb-1.2.1&auto=format&fit=crop&w=800&q=80" alt="W3docs"/>
<figcaption>
<h3>W3docs</h3>
</figcaption>
</body>
</html>
Рассмотрим другой пример трехмерной трансформации:
Пример
<!DOCTYPE html>
<html>
<head>
<title>Заголовок документа</title>
<style>
.example {
width: 250px;
height: 250px;
margin: 20px auto 40px auto;
perspective: 1000px;
}
.example a {
display: block;
width: 100%;
height: 100%;
background: url("/uploads/media/default/0001/01/b408569013c0bb32b2afb0f0d45e93e982347951.jpeg");
background-size: cover;
transform-style: preserve-3d;
-webkit-transform: rotateX(80deg);
-moz-transform: rotateX(80deg);
-ms-transform: rotateX(80deg);
-o-transform: rotateX(80deg);
transform: rotateX(80deg);
-webkit-transition: all 0.8s;
-moz-transition: all 0.8s;
-o-transition: all 0.8s;
transition: all 0.8s;
}
.example:hover a {
-webkit-transform: rotateX(10deg);
-moz-transform: rotateX(10deg);
-ms-transform: rotateX(10deg);
-o-transform: rotateX(10deg);
transform: rotateX(10deg);
}
.example a:after {
content: '';
position: absolute;
left: 0;
bottom: 0;
width: 100%;
height: 20px;
background: #cccccc;
-webkit-transform: rotateX(60deg);
-moz-transform: rotateX(60deg);
-ms-transform: rotateX(60deg);
-o-transform: rotateX(60deg);
transform: rotateX(60deg);
transform-origin: bottom;
}
</style>
</head>
<body>
<h2> hover-эффект</h2>
<div class="example">
<a href="#"></a>
</div>
</body>
</html>