Анимация карточки-конверта CSS и HTML
872
1
Время чтения: 7 минут
Сегодня напишем с вами анимацию карточки-конверта.
Наведите курсор на карточку — она плавно «раскроется»: клипсы разойдутся, появится заголовок и иконка. Уберите курсор — карточка снова «закроется». Всё на чистом CSS, без JavaScript.
Карточка выглядит как конверт с тремя «клипсами», которые при наведении разворачиваются, открывая содержимое. Эффект построен на clip-path, transition-delay и transform.
Как использовать
Скопируйте два блока ниже — HTML и CSS — и вставьте на свой сайт. Работает в современных браузерах (Chrome, Firefox, Safari, Edge).
HTML
<div class="opening_card">
<div class="oc_title">card title</div>
<div class="oc_img">
<svg xmlns="http://www.w3.org/2000/svg" width="17" height="16" viewBox="0 0 17 16" fill="none">
<path d="M8.5 0L10.4084 5.87336L16.584 5.87336L11.5878 9.50329L13.4962 15.3766L8.5 11.7467L3.50383 15.3766L5.41219 9.50329L0.416019 5.87336L6.59163 5.87336L8.5 0Z" fill="#C4C4C4"/>
</svg>
</div>
<div class="oc_clip">
<span></span>
<span></span>
<span></span>
</div>
</div>
CSS
.opening_card {
position: relative;
display: flex;
flex-direction: column;
align-items: center;
width: 260px;
height: 350px;
background-color: brown;
box-shadow: 0 0 0 5px brown, 0 25px 55px #f00;
overflow: hidden;
}
.oc_title {
position: relative;
font-family: sans-serif;
font-size: 35px;
color: #333;
font-weight: 600;
text-align: center;
transform: scale(0);
transition: all 0.5s;
transition-delay: 0s;
filter: blur(10px);
margin: 40px 0;
}
.opening_card:hover .oc_title {
transform: scale(1);
transition-delay: 0.5s;
filter: blur(0);
}
.oc_img {
transition: all 0.5s;
transition-delay: 0s;
transform: translateY(100px);
filter: blur(10px);
opacity: 0;
}
.oc_img svg {
width: 50px;
height: 50px;
}
.opening_card:hover .oc_img {
transform: translateY(0);
filter: blur(0);
opacity: 1;
transition-delay: 1s;
}
.oc_clip {
position: absolute;
inset: 20px;
box-shadow: 0 0 0 18px #333;
transform: rotate(180deg);
z-index: 1;
}
.oc_clip span {
position: absolute;
inset: 0;
background-color: #333;
transition: all 0.3s;
}
.oc_clip span:nth-child(1) {
clip-path: polygon(0 0, 50% 33%, 100% 0);
transition-delay: 0s;
}
.oc_clip span:nth-child(2) {
clip-path: polygon(0% 0%, 37% 47%, 50% 101%, 0% 100%);
transition-delay: 0.25s;
}
.oc_clip span:nth-child(3) {
clip-path: polygon(62% 48%, 100% 0, 100% 100%, 50% 100%);
transition-delay: 0.5s;
}
.opening_card:hover .oc_clip span:nth-child(1) {
clip-path: polygon(0 0, 50% 0%, 100% 0);
}
.opening_card:hover .oc_clip span:nth-child(2) {
clip-path: polygon(0% 0%, 0% 100%, 50% 101%, 0% 100%);
}
.opening_card:hover .oc_clip span:nth-child(3) {
clip-path: polygon(100% 100%, 100% 0, 100% 100%, 50% 100%);
}
Как работает анимация
- Клипсы — три
<span>сclip-path. При наведении они «раскрываются» по очереди с задержкой. - Заголовок — появляется с масштабированием и исчезновением размытия через 0.5с.
- Иконка — поднимается вверх и становится чёткой через 1с.
- Всё синхронизировано через
transition-delay.
Советы по кастомизации
- Замените
background-color: brownна свой цвет. - Измените
box-shadowдля другого эффекта тени. - Добавьте
border-radiusдля скруглённых углов. - Используйте в карточках товаров, отзывах, портфолио.
Готово! Ваша анимированная карточка-конверт работает.
Часто задаваемые вопросы
Почему при наведении на карточку заголовок и иконка появляются не сразу, а с задержкой?
Задержка реализована через CSS-свойство transition-delay. Для заголовка задержка составляет 0.5 секунды, а для иконки — 1 секунду, что создаёт эффект последовательного раскрытия конверта.
Как изменить цвет фона карточки и клипс на свой?
В CSS поменяйте значение background-color у класса .opening_card (сейчас brown) для фона, а для клипс — background-color у .oc_clip span (сейчас #333). Также не забудьте обновить box-shadow, чтобы он совпадал с новым цветом.
Можно ли добавить другой текст или изображение вместо звёздочки-иконки?
Да, замените содержимое внутри .oc_img. Вместо SVG-звёздочки можно вставить любой другой SVG, изображение через тег или даже текст, обёрнутый в , и подогнать размер через width и height.
Почему на мобильных устройствах эффект наведения не срабатывает?
На сенсорных экранах нет курсора, поэтому :hover не работает. Для мобильных устройств можно добавить CSS-правило с :active или использовать JavaScript для обработки касания, но в текущей версии эффект доступен только при наведении мыши.
Как убрать красное свечение (box-shadow) вокруг карточки?
Удалите или измените второе значение box-shadow у класса .opening_card: сейчас стоит 0 25px 55px #f00. Замените #f00 на transparent или уберите эту часть, чтобы оставить только первую тень (0 0 0 5px brown).