Как сделать 3D-эффект переворачивания карточки на HTML и CSS
2539
Время чтения: 15 минут
- Как работает 3D-эффект переворота
- HTML: простая и семантическая разметка
- CSS: анимация, тень, адаптивность
- Живое демо: попробуйте прямо сейчас
- Oweb-solutions
- 3 варианта использования
- Чек-лист: ваша 3D-карточка идеальна
- Часто задаваемые вопросы
- Типичные ошибки при создании flip-эффекта
- Сравнение подходов: CSS vs JavaScript для 3D-карточки
Представьте: пользователь заходит на ваш сайт, наводит курсор на карточку товара — и она плавно переворачивается, показывая цену, характеристики, кнопку «Купить». Это не просто красиво — это удерживает внимание. По данным Яндекс.Метрики, интерактивные элементы повышают время на сайте на 42%, а конверсию — на 28%. В 2025 году 3D-эффекты на чистом CSS — стандарт хорошего тона. Никакого JavaScript, только HTML и CSS. Покажем, как сделать карточку с переворотом (flip-эффект), адаптивную, с тенью, анимацией и возможностью вставить любое изображение и текст. Полный код, демо, вариации и чек-лист.
Как работает 3D-эффект переворота
Карточка состоит из двух слоёв: лицевая сторона (front) и обратная (back). Обе позиционированы полностью внутри контейнера. При наведении (:hover) мы поворачиваем их на 180° по оси Y с помощью transform: rotateY() и perspective для объёма. backface-visibility: hidden скрывает заднюю часть при повороте. Переход — плавный, 0.6 секунды. Для более сложных сценариев (например, автопереворот при загрузке) можно использовать @keyframes вместе с animation, но в базовом варианте достаточно transition, так как он не грузит процессор, в отличие от JS-циклов. По тестам производительности, CSS-анимация на 60% легче для браузера, чем её JavaScript-аналог.
HTML: простая и семантическая разметка
<div class="card-3d">
<div class="card-3d__front">
<img src="https://static8.depositphotos.com/1008939/939/i/600/depositphotos_9394698-stock-photo-lonely-man.jpg" alt="Фронтальная сторона карточки">
</div>
<div class="card-3d__back">
<div class="card-3d__content">
<h2>Oweb-solutions</h2>
<p>Компания №1 по разработке сайтов в Туле</p>
<ul>
<li>Создание сайтов под ключ</li>
<li>SEO-продвижение</li>
<li>Техническая поддержка 24/7</li>
</ul>
<a href="#" class="card-3d__btn">Подробнее</a>
</div>
</div>
</div>
CSS: анимация, тень, адаптивность
.card-3d {
position: relative;
width: 340px;
height: 480px;
margin: 2rem auto;
perspective: 1000px;
cursor: pointer;
}
.card-3d__front,
.card-3d__back {
position: absolute;
width: 100%;
height: 100%;
backface-visibility: hidden;
transition: transform 0.6s cubic-bezier(0.4, 0, 0.2, 1);
border-radius: 12px;
overflow: hidden;
box-shadow: 0 8px 24px rgba(0,0,0,0.15);
}
.card-3d__front img {
width: 100%;
height: 100%;
object-fit: cover;
}
.card-3d__front {
transform: rotateY(0deg);
}
.card-3d__back {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: #fff;
transform: rotateY(180deg);
display: flex;
align-items: center;
justify-content: center;
}
.card-3d__content {
padding: 2rem;
text-align: center;
}
.card-3d__content h2 {
margin: 0 0 1rem;
font-size: 1.8rem;
}
.card-3d__content p {
margin-bottom: 1.5rem;
font-size: 1rem;
opacity: 0.9;
}
.card-3d__content ul {
list-style: none;
padding: 0;
margin: 1.5rem 0;
font-size: 1rem;
line-height: 1.6;
}
.card-3d__content ul li:before {
content: " ";
color: #a8e6cf;
}
.card-3d__btn {
display: inline-block;
padding: 0.8rem 1.8rem;
background: #fff;
color: #667eea;
text-decoration: none;
border-radius: 50px;
font-weight: 600;
margin-top: 1rem;
transition: all 0.3s ease;
}
.card-3d__btn:hover {
background: #a8e6cf;
transform: translateY(-2px);
}
/* Ховер-эффект */
.card-3d:hover .card-3d__front {
transform: rotateY(-180deg);
}
.card-3d:hover .card-3d__back {
transform: rotateY(0deg);
}
/* Адаптивность */
@media (max-width: 480px) {
.card-3d {
width: 280px;
height: 400px;
}
.card-3d__content h2 { font-size: 1.5rem; }
.card-3d__content ul { font-size: 0.9rem; }
}
Живое демо: попробуйте прямо сейчас

Oweb-solutions
Компания №1 по разработке сайтов в Туле
- Создание сайтов под ключ
- SEO-продвижение
- Техническая поддержка 24/7
3 варианта использования
| Тип | Где использовать | Эффект |
|---|---|---|
| Товарная карточка | Интернет-магазин | +38% кликов |
| Услуга | Лендинг | +42% времени на странице |
| Команда | О нас | +28% запоминаемости |
Чек-лист: ваша 3D-карточка идеальна
- Изображение оптимизировано (< 200 Кб)
- Переворот плавный (0.6s) — используйте
transitionвместоanimationдля реактивных эффектов, чтобы избежать лишней нагрузки на ЦП - Адаптивна на мобильных
- Тень и закругления
- Кнопка с hover-эффектом
- Работает без JS — в отличие от аккордеона или слайдера, где требуется скрипт
Вы будете получать статьи по нашим направлениям, советы и кейсы предпринимателей
Часто задаваемые вопросы
Можно без hover?
Да. Замените :hover на .active и переключайте через JS по клику. Для ещё более гибкого управления (например, автопереворот по таймеру) используйте @keyframes в связке с animation.
А если несколько карточек?
Работает. Просто повторите блок .card-3d. Для массового управления (например, перевернуть все карточки разом) можно добавить JS-класс, но сам эффект остаётся CSS-реактивным.
Типичные ошибки при создании flip-эффекта
| Ошибка | Последствие | Как исправить |
|---|---|---|
| Забыли perspective у родителя | Эффект выглядит плоским, нет глубины | Добавьте perspective: 1000px к .card-3d |
| Нет backface-visibility: hidden на обеих сторонах | При повороте видна обратная сторона лицевой карточки | Укажите backface-visibility: hidden для .card-3d__front и .card-3d__back |
| Разный размер front и back (например, padding без box-sizing) | Стороны смещаются, появляются артефакты | Используйте box-sizing: border-box или одинаковые padding |
| Слишком быстрая анимация (<0.3s) | Глаз не успевает зафиксировать контент на обратной стороне | Оптимальное время перехода — 0.5–0.7s. Для более сложных сценариев (например, каскадный переворот) лучше использовать animation с @keyframes, чем ускорять transition. |
| Нет overflow: hidden на контейнере | При повороте края карточки могут вылезать за рамки | Добавьте overflow: hidden для .card-3d__front и .card-3d__back |
Сравнение подходов: CSS vs JavaScript для 3D-карточки
| Критерий | Чистый CSS (наш вариант) | CSS + JavaScript |
|---|---|---|
| Сложность кода | Минимальная (только CSS) | Средняя (нужен JS-код) |
| Производительность | Высокая (аппаратное ускорение, transition не нагружает Event Loop) | Средняя (зависит от реализации, часто проигрывает CSS по FPS) |
| Управление состоянием (активна/неактивна) | Только :hover (или :focus) | Любое событие (клик, таймер, скролл) — например, как в аккордеоне или слайдере |
| Поддержка старых браузеров | IE10+ (с префиксами) | IE9+ (с полифиллами) |
| Возможность анимации при загрузке | Только через keyframes | Да, легко (addEventListener) — но для простого переворота это избыточно |