Свойство CSS backface-visibility
Свойство backface-visibility определяет, видна ли задняя сторона элемента. Примеры и демонстрации для самостоятельного изучения.
Свойство CSS backface-visibility управляет тем, отображается ли задняя сторона элемента, когда тот повёрнут от наблюдателя. У каждого элемента есть две стороны: лицевая (то, что вы обычно видите) и задняя, которая становится видимой, когда элемент повёрнут более чем на 90 градусов вокруг оси X или Y в трёхмерном пространстве. По умолчанию задняя сторона является зеркальным отражением лицевой, но с помощью этого свойства её можно полностью скрыть.
Свойство имеет видимый эффект только в контексте трёхмерного преобразования — то есть когда элемент (или его родитель) повёрнут с помощью transform через rotateX(), rotateY() или rotate3d(), как правило в сочетании с transform-style: preserve-3d на родительском элементе. Свойство принимает два ключевых значения:
visible(значение по умолчанию) — задняя сторона отрисовывается и отображается как зеркальная копия лицевой.hidden— задняя сторона не отрисовывается. Когда элемент поворачивается ребром, он исчезает, а не показывает свою обратную сторону.
Наиболее распространённое применение — создание интерфейсов с переворачивающейся карточкой, где два элемента расположены спиной друг к другу и поворачиваются на 180 градусов. Установка backface-visibility: hidden на обоих предотвращает просвечивание задней части лицевого элемента, поэтому показывается только та сторона, которая в данный момент обращена к зрителю.
Свойство backface-visibility входит в число свойств CSS3.
| Начальное значение | visible |
|---|---|
| Применяется к | Трансформируемым элементам. |
| Наследуется | Нет. |
| Анимируется | Нет. |
| Версия | CSS3 |
| DOM Синтаксис | object.style.backfaceVisibility = "hidden"; |
Синтаксис
Синтаксис CSS backface-visibility
backface-visibility: visible | hidden | initial | inherit;В приведённых ниже примерах квадрат анимируется с вращением вокруг оси Y. При значении visible текст можно прочитать в зеркальном отражении, когда блок поворачивается к вам задней стороной. При значении hidden блок исчезает в той половине вращения, когда его задняя сторона обращена к вам. Обратите внимание на разницу в поведении каждого блока при вращении.
Пример свойства backface-visibility со значением "visible":
Пример CSS backface-visibility со значением visible
<!DOCTYPE html>
<html>
<head>
<title>The title of the document</title>
<style>
.element {
width: 200px;
height: 200px;
background: #666;
color: #eee;
backface-visibility: visible;
transform-style: preserve-3d;
-webkit-animation: element 2s infinite linear alternate;
animation: element 2s infinite linear alternate;
}
@-webkit-keyframes element {
to {
-webkit-transform: rotateY(180deg);
}
}
@keyframes element {
to {
transform: rotateY(180deg);
}
}
</style>
</head>
<body>
<h2>Backface-visibility property example</h2>
<div class="element">
<h2>Hello world!</h2>
</div>
</body>
</html>Пример свойства backface-visibility со значением "hidden":
Пример CSS backface-visibility со значением hidden
<!DOCTYPE html>
<html>
<head>
<title>The title of the document</title>
<style>
.element {
width: 200px;
height: 200px;
background: #1c87c9;
color: #8ebf42;
backface-visibility: hidden;
transform-style: preserve-3d;
-webkit-animation: element 2s infinite linear alternate;
animation: element 2s infinite linear alternate;
}
@-webkit-keyframes element {
to {
-webkit-transform: rotateY(180deg);
}
}
@keyframes element {
to {
transform: rotateY(180deg);
}
}
</style>
</head>
<body>
<h2>An example with hidden value</h2>
<div class="element">
<h2>Hello world!</h2>
</div>
</body>
</html>Создание переворачивающейся карточки
Практическое применение backface-visibility — карточка, которая переворачивается при наведении курсора, открывая свою другую сторону. Лицевая и задняя стороны располагаются в одном месте; значение hidden не даёт обратной стороне лицевой части просвечиваться после того, как карточка повернулась более чем на 90 градусов.
<!DOCTYPE html>
<html>
<head>
<title>Flip card</title>
<style>
.scene {
width: 200px;
height: 260px;
perspective: 800px;
}
.card {
width: 100%;
height: 100%;
position: relative;
transform-style: preserve-3d;
transition: transform 0.6s;
}
.scene:hover .card {
transform: rotateY(180deg);
}
.card-face {
position: absolute;
width: 100%;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
font-size: 24px;
color: #fff;
/* Hide the mirrored reverse of each face */
backface-visibility: hidden;
}
.card-front {
background: #1c87c9;
}
.card-back {
background: #8ebf42;
transform: rotateY(180deg);
}
</style>
</head>
<body>
<div class="scene">
<div class="card">
<div class="card-face card-front">Front</div>
<div class="card-face card-back">Back</div>
</div>
</div>
</body>
</html>Советы и подводные камни
backface-visibilityне оказывает никакого эффекта в плоской (2D) раскладке. Элемент должен быть частью трёхмерного преобразования — задайте родительскому элементуtransform-style: preserve-3dи используйтеperspective, чтобы вращение воспринималось как глубина.- В переворачивающейся карточке устанавливайте
backface-visibility: hiddenна обеих сторонах. Если забыть об одной стороне, её зеркальное изображение будет просвечивать сквозь другую. - Задняя сторона является истинным зеркальным отражением лицевой, поэтому любой текст на ней читается в обратном порядке при значении
visible. - Свойство не анимируется — оно мгновенно переключает состояния, — однако само вращение, открывающее или скрывающее заднюю сторону, можно анимировать с помощью
transformи CSS анимаций.
Значения
| Значение | Описание | Демонстрация |
|---|---|---|
| visible | Задняя сторона видима. Значение по умолчанию. | Демонстрация » |
| hidden | Задняя сторона не видима. | Демонстрация » |
| initial | Устанавливает свойство в значение по умолчанию. | |
| inherit | Наследует свойство от родительского элемента. |