CSS-свойство perspective-origin
Используйте CSS-свойство perspective-origin, чтобы задать точку обзора 3D-элемента. Значения свойства и примеры.
CSS-свойство perspective-origin задаёт позицию, из которой наблюдатель как будто смотрит на 3D-трансформированный элемент. Иначе говоря, оно перемещает точку схода — место, к которому сходятся грани, повёрнутые от экрана. Это одно из CSS3-свойств.
Как это работает
Для корректного отображения 3D-сцены необходимы два компонента:
- Свойство
perspective, определяющее силу 3D-эффекта (чем меньше значение, тем выраженнее перспективное сокращение). - Свойство
perspective-origin, определяющее положение камеры.perspectiveзадаёт глубину точки схода, аperspective-origin— её горизонтальное и вертикальное положение.
По умолчанию точка схода находится точно в центре элемента (50% 50%), поэтому повёрнутая дочерняя грань выглядит симметрично. Смещение perspective-origin в сторону похоже на обход объекта — один и тот же дочерний элемент будет казаться просматриваемым слева, справа, сверху или снизу.
perspective-origin вступает в силу только при наличии свойства perspective, установленного либо на том же элементе, либо на предке. Без него свойство разбирается, но не производит никакого эффекта.
Синтаксис из двух значений всегда задаётся в порядке сначала горизонталь, затем вертикаль (например, perspective-origin: 25% 75%). Если указано одно значение, второе по умолчанию принимает значение center. Пары ключевых слов, такие как top left, являются исключением — ключевые слова можно писать в любом порядке, поскольку каждое ключевое слово указывает конкретную ось.
perspective-origin применяется к родителю, но управляет проекцией его дочерних элементов — сам элемент, к которому оно применено, не трансформируется.
| Начальное значение | 50% 50% |
|---|---|
| Применяется к | Трансформируемым элементам. |
| Наследуется | Нет. |
| Анимируемо | Да. Трансформация перспективы поддаётся анимации. |
| Версия | CSS3 |
| DOM Syntax | object.style.perspectiveOrigin = "20px 70%"; |
Синтаксис
Синтаксис CSS perspective-origin
perspective-origin: x-position y-position | x | y | closest-side | farthest-side | initial | inherit;Пример свойства perspective-origin:
Пример кода CSS perspective-origin
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
.element1 {
position: relative;
height: 150px;
width: 150px;
margin-left: 60px;
border: 1px solid #666;
perspective: 130px;
perspective-origin: 50% 50%;
}
.element2 {
padding: 50px;
position: absolute;
border: 1px solid #000;
background: #8ebf42;
transform-style: preserve-3d;
transform: rotateX(45deg);
}
</style>
</head>
<body>
<h2>Perspective-origin property example</h2>
<h3>Perspective-origin: 50% 50%:</h3>
<div class="element1">
Box1
<div class="element2">Box2</div>
</div>
</body>
</html>Результат

При значении по умолчанию 50% 50% точка схода находится по центру, поэтому повёрнутый Box2 выглядит равномерно сжатым. В следующих примерах мы сдвигаем эту точку к одному из краёв и наблюдаем, как меняется кажущийся угол обзора.
Пример свойства perspective-origin со значением "left":
Пример CSS perspective-origin со значением left
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
.element1 {
position: relative;
height: 150px;
width: 150px;
margin-left: 20px;
border: 1px solid #666;
perspective: 80px;
perspective-origin: left;
}
.element2 {
padding: 50px;
position: absolute;
border: 1px solid #000;
background: #8ebf42;
transform-style: preserve-3d;
transform: rotateX(45deg);
}
</style>
</head>
<body>
<h2>Perspective-origin property example</h2>
<h3>Perspective-origin: left:</h3>
<div class="element1">
Box1
<div class="element2">Box2</div>
</div>
</body>
</html>Пример свойства perspective-origin со значением "right":
Пример CSS perspective-origin со значением right
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
.element1 {
position: relative;
height: 150px;
width: 150px;
margin-left: 160px;
border: 1px solid #666;
perspective: 80px;
perspective-origin: right;
}
.element2 {
padding: 50px;
position: absolute;
border: 1px solid #000;
background: #8ebf42;
transform-style: preserve-3d;
transform: rotateX(45deg);
}
</style>
</head>
<body>
<h2>Perspective-origin property example</h2>
<h3>Perspective-origin: right:</h3>
<div class="element1">
Box1
<div class="element2">Box2</div>
</div>
</body>
</html>Пример свойства perspective-origin со значением "bottom right":
Пример CSS perspective-origin bottom
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
<style>
.element1 {
position: relative;
height: 150px;
width: 150px;
margin-left: 60px;
border: 1px solid #666;
perspective: 130px;
perspective-origin: bottom right;
}
.element2 {
padding: 50px;
position: absolute;
border: 1px solid #000;
background: #8ebf42;
transform-style: preserve-3d;
transform: rotateX(45deg);
}
</style>
</head>
<body>
<h2>Perspective-origin property example</h2>
<h3>Perspective-origin: bottom right:</h3>
<div class="element1">
Box1
<div class="element2">Box2</div>
</div>
</body>
</html>Значения
| Значение | Описание |
|---|---|
| x-position | Горизонтальное положение точки схода. Принимает <length>, процент или одно из ключевых слов: left (= 0), center (= 50%) или right (= 100%). |
| y-position | Вертикальное положение точки схода. Принимает <length>, процент или одно из ключевых слов: top (= 0), center (= 50%) или bottom (= 100%). |
| initial | Устанавливает для свойства значение по умолчанию (50% 50%). |
| inherit | Наследует значение свойства от родительского элемента. |
Процентные и длинные значения разрешаются относительно собственного блока элемента, с началом координат в левом верхнем углу. Таким образом, 0 0 помещает точку схода в левый верхний угол, 100% 100% — в правый нижний; допускаются отрицательные значения и значения больше 100%, выводящие камеру за пределы блока.
Поддержка браузерами
perspective-origin поддерживается во всех современных браузерах. Использование вендорных префиксов, таких как -webkit-perspective-origin, для актуальных версий Chrome, Edge, Firefox и Safari больше не требуется.
Связанные свойства
perspective— задаёт расстояние до точки схода и обязательно для того, чтобыperspective-originимело какой-либо эффект.transform— применяет трансформацииrotateX,rotateYиtranslateZ, к которым применяется перспектива.transform-style— используйтеpreserve-3d, чтобы вложенные дочерние элементы сохраняли свои 3D-позиции в рамках перспективы.backface-visibility— управляет отображением обратной стороны повёрнутого элемента.