Свойство CSS perspective
Используйте свойство CSS perspective для придания 3D-элементу перспективы. Смотрите значения и примеры.
Свойство perspective определяет, насколько далеко наблюдатель расположен от плоскости z = 0 трёхмерных дочерних элементов. Проще говоря, оно управляет силой 3D-эффекта: превращает плоское вращение в нечто, уходящее вглубь экрана — так же, как объекты уменьшаются по мере удаления от глаза в реальной жизни.
Свойство задаётся на родительском элементе. Значение — это смоделированное расстояние от наблюдателя до экрана. Малые значения (например, 100px) помещают наблюдателя очень близко, и перспектива получается выразительной и преувеличенной. Большие значения (например, 1000px) удаляют наблюдателя, и эффект становится мягким и почти плоским. На этой странице объясняется поведение свойства и показывается разница между none и реальной длиной.
Поскольку дочерний элемент находится в 3D-пространстве, его части с z > 0 ближе к наблюдателю и выглядят крупнее, а части с z < 0 дальше и выглядят меньше.
Когда это использовать?
Свойство perspective применяется при вращении элемента в 3D (с помощью transform: rotateX(), rotateY() или translateZ()), когда нужно, чтобы это вращение выглядело как настоящая глубина, а не плоская деформация. Типичные случаи: перекидные карточки, 3D-кубы и карусели, а также эффекты наклона при наведении.
Свойство perspective принимает единственное значение <length>. Ноль допустим (он отключает эффект, как none), отрицательные значения не разрешены — они считаются недопустимыми и игнорируются.
Чтобы управлять положением точки схода (позицией, в которую смотрит наблюдатель), используйте это свойство вместе с perspective-origin. Для самих 3D-вращений см. свойство transform, а чтобы вложенные дочерние элементы оставались в едином 3D-пространстве, используйте transform-style.
Свойство perspective является одним из свойств CSS3.
Свойство perspective и функция трансформации perspective(). Свойство perspective не влияет на элемент, на котором оно задано — оно применяет перспективное преобразование только к 3D-трансформированным дочерним элементам. Значение perspective(), используемое внутри свойства transform, применяет глубину непосредственно к самому элементу. Используйте свойство, когда несколько дочерних элементов должны разделять одну позицию наблюдателя; используйте функцию, когда отдельному элементу нужна собственная глубина.
Современные браузеры полностью поддерживают это свойство без вендорных префиксов.
| Initial Value | none |
|---|---|
| Applies to | Transformable elements. |
| Inherited | No. |
| Animatable | Yes. The transformation of the perspective is animatable. |
| Version | CSS3 |
| DOM Syntax | object.style.perspective = "70px"; |
Синтаксис
Синтаксис CSS perspective
perspective: length | none | initial | inherit;Пример без перспективы (perspective: none)
При perspective: none на родителе rotateX(40deg) дочернего элемента отображается как плоская 2D-деформация — ощущения глубины нет. Это базовое состояние для сравнения.
Пример кода CSS perspective
<!DOCTYPE html>
<html>
<head>
<title>Title of the element</title>
<style>
.element1 {
padding: 50px;
position: absolute;
border: 1px solid #666;
background-color: #1c87c9;
background: #8ebf42;
-webkit-transform-style: preserve-3d;/* Safari 3-8 */
-webkit-transform: rotateX(40deg);/* Safari 3-8 */
transform-style: preserve-3d;
transform: rotateX(40deg);
}
.element2 {
position: relative;
height: 160px;
width: 160px;
margin-left: 20px;
border: 1px solid #000;
-webkit-perspective: none;/* Safari 4-8 */
perspective: none;
}
</style>
</head>
<body>
<h2>Perspective property example</h2>
<h3>perspective: none:</h3>
<div class="element2">
Box2
<div class="element1">Box1</div>
</div>
</body>
</html>Результат

Пример с perspective: 100px
Теперь родительский элемент получает perspective равное 100px. Поскольку наблюдатель моделируется как очень близкий, тот же rotateX(40deg) на дочернем элементе воспринимается как настоящая глубина — верхний край уходит в глубину экрана, и блок выглядит наклонённым в 3D-пространстве. Попробуйте увеличить значение до 500px или 1000px — наклон станет более мягким.
Пример CSS perspective с пикселями
<!DOCTYPE html>
<html>
<head>
<title>Title of the element</title>
<style>
.element1 {
padding: 50px;
position: absolute;
border: 1px solid #666;
background-color: #1c87c9;
background: #8ebf42;
-webkit-transform-style: preserve-3d;/* Safari 3-8 */
-webkit-transform: rotateX(40deg);/* Safari 3-8 */
transform-style: preserve-3d;
transform: rotateX(40deg);
}
.element2 {
position: relative;
height: 150px;
width: 150px;
margin-left: 50px;
border: 1px solid #000;
-webkit-perspective: 100px;/* Safari 4-8 */
perspective: 100px;
}
</style>
</head>
<body>
<h2>Perspective property example</h2>
<h3>perspective: 100px:</h3>
<div class="element2">
Box2
<div class="element1">Box1</div>
</div>
</body>
</html>Значения
| Значение | Описание |
|---|---|
| length | Применяет перспективное преобразование к элементу и его содержимому. |
| none | Не применяет перспективного преобразования. |
| initial | Устанавливает значение свойства по умолчанию. |
| inherit | Наследует свойство от родительского элемента. |
Частые ошибки
- Задавайте свойство на родителе, а не на вращаемом элементе. Распространённая ошибка — поставить
perspectiveна тот же элемент, который вы вращаете. Это не даёт никакого эффекта. Либо перенесите его на родительский элемент, либо используйте функциюperspective()внутриtransformна самом элементе. - Порядок важен при использовании функции
perspective(). При использовании функции записывайте её первой:transform: perspective(500px) rotateX(40deg). Если указать её после вращения, она применится к уже повёрнутой системе координат, и результат изменится. - Вложенный 3D требует
transform-style: preserve-3d. Без него (по умолчанию используетсяflat) внуки сглаживаются в плоскость родителя и глубина теряется.
Связанные свойства
- perspective-origin — задаёт положение точки схода.
- transform — применяет 3D-вращения и трансляции, которым
perspectiveпридаёт глубину. - transform-style — удерживает вложенные элементы в едином 3D-пространстве.
- backface-visibility — скрывает обратную сторону элемента, когда он повёрнут от наблюдателя.