wb_sunny

Как сделать Flipping эффект с помощью CSS анимации

24 638 любопытных

CSS анимация — это очень полезная и весёлая штука. С помощью нескольких простых правил можно сделать совсем не обычные и элегантные вещи, которые будут привлекать пользователей своей привлекательно анимацией.

Сегодня мы с Вами научимся делать один из очень интересных эффектов с помощью CSS анимации, а именно переворачивающийся эффект при наведении на изображение, ещё его называют Flipping эффект.

За урок огромное спасибо http://davidwalsh.name

Демо

HTML разметка

Так как у нашего блока с картинкой будет две стороны, делаем соответствующую разметку:

<div class="flip-container" ontouchstart="this.classList.toggle('hover');">
<div class="flipper">
<div class="front">
<!-- front content -->
</div>
<div class="back">
<!-- back content -->
</div>
</div>
</div>

У нас есть два класса «front», который отвечает за переднюю часть блока, которая стоит по умолчанию, другими словами — это изображения. И класс «back», который отвечает за отображение внутренней стороны, которая появляется с красивой анимацией при наведении на неё.

CSS

Я готов поспорить с Вами, что Вы и ожидать не могли, что правил CSS будет так мало :) Вот, собственно, и все CSS правила:

.flip-container {
perspective: 1000;
}

.flip-container:hover .flipper, .flip-container.hover .flipper {
transform: rotateY(180deg);
}

.flip-container, .front, .back {
width: 320px;
height: 480px;
}
.flipper {
transition: 0.6s;
transform-style: preserve-3d;

position: relative;
}
.front, .back {
backface-visibility: hidden;

position: absolute;
top: 0;
left: 0;
}
.front {
z-index: 2;
}
.back {
transform: rotateY(180deg);
}

Переворачивание по вертикали

По умолчанию блок переворачивается по горизонтали, но конечно же можно сделать, чтобы он переворачивался и по вертикальной плоскости, нужно добавить просто несколько CSS правил и всё:

.vertical.flip-container {
position: relative;
}

.vertical .back {
transform: rotateX(180deg);
}

.vertical.flip-container .flipper {
transform-origin: 100% 213.5px; /* half of height */
}

.vertical.flip-container:hover .flipper {
transform: rotateX(-180deg);
}

Поддержка Internet Explorer

С браузером Internet Explorer вообще отдельная история, так как нужно переделать практически все правила, так как до сих пор множество их не поддерживается, к сожалению:

.flip-container {
perspective: 1000;
transform-style: preserve-3d;
}

.flip-container:hover .back {
transform: rotateY(0deg);
}
.flip-container:hover .front {
transform: rotateY(180deg);
}

.flip-container, .front, .back {
width: 320px;
height: 480px;
}
.flipper {
transition: 0.6s;
transform-style: preserve-3d;

position: relative;
}
.front, .back {
backface-visibility: hidden;
transition: 0.6s;
transform-style: preserve-3d;

position: absolute;
top: 0;
left: 0;
}
.front {
z-index: 2;
transform: rotateY(0deg);
}
.back {
transform: rotateY(-180deg);
}
.vertical.flip-container {
position: relative;
}

.vertical .back {
transform: rotateX(180deg);
}

.vertical.flip-container:hover .back {
transform: rotateX(0deg);
}

.vertical.flip-container:hover .front {
transform: rotateX(180deg);
}

Демо

Вот и всё, друзья. При совсем небольших усилиях мы сделали сегодня с Вами совершенно не сложный и красивый эффект с помощью CSS анимации. Конечно же это совсем простой пример, который Вы можете доработать или же изменить под свои нужды.

На этом всё, пока.