Spec-Zone.ru › CSS

Функция CSS `perspective()`

Базовая поддержка Широко доступна

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и в различных версиях браузеров. Она доступна во всех браузерах с марта 2022 года.

perspective() CSS функция задаёт преобразование, которое устанавливает расстояние между пользователем и плоскостью z=0 — перспективу, с которой пользователь видел бы двухмерный интерфейс, будь он трёхмерным. Результатом является тип данных <transform-function>.

Попробуйте

transform: perspective(0);
transform: perspective(none);
transform: perspective(800px);
transform: perspective(23rem);
transform: perspective(6.5cm);
<section class="default-example" id="default-example">
  <div class="transition-all" id="example-element">
    <div class="face front">1</div>
    <div class="face back">2</div>
    <div class="face right">3</div>
    <div class="face left">4</div>
    <div class="face top">5</div>
    <div class="face bottom">6</div>
  </div>
</section>
#default-example {
  background: linear-gradient(skyblue, khaki);
  perspective: 800px;
  perspective-origin: 150% 150%;
}

#example-element {
  width: 100px;
  height: 100px;
  perspective: 550px;
  transform-style: preserve-3d;
}

.face {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 100%;
  height: 100%;
  position: absolute;
  backface-visibility: inherit;
  font-size: 60px;
  color: white;
}

.front {
  background: rgb(90 90 90 / 0.7);
  transform: translateZ(50px);
}

.back {
  background: rgb(0 210 0 / 0.7);
  transform: rotateY(180deg) translateZ(50px);
}

.right {
  background: rgb(210 0 0 / 0.7);
  transform: rotateY(90deg) translateZ(50px);
}

.left {
  background: rgb(0 0 210 / 0.7);
  transform: rotateY(-90deg) translateZ(50px);
}

.top {
  background: rgb(210 210 0 / 0.7);
  transform: rotateX(90deg) translateZ(50px);
}

.bottom {
  background: rgb(210 0 210 / 0.7);
  transform: rotateX(-90deg) translateZ(50px);
}

Функция преобразования perspective() является частью значения transform, применяемого к преобразуемому элементу. Это отличается от свойств perspective и perspective-origin, которые задаются родительскому элементу дочернего элемента, преобразуемого в трёхмерном пространстве.

Синтаксис

perspective(d)

Значения

d

Представляет собой <length>, задающую расстояние от пользователя до плоскости z=0. Плоскость z=0 — это плоскость, в которой всё отображается в двухмерном виде, то есть на экране. Значения меньше 1px (включая ноль) ограничиваются значением 1px. Отрицательные значения являются синтаксическими ошибками.

Значения, отличные от none, заставляют элементы с положительными координатами z выглядеть крупнее, а элементы с отрицательными координатами z — мельче. Элементы с координатами z, равными значению перспективы или превышающими его, исчезают, как если бы находились за пользователем. Большие значения перспективы соответствуют небольшому преобразованию; малые значения perspective() — большому преобразованию; perspective(none) соответствует перспективе с бесконечного расстояния и отсутствию преобразования.

Декартовы координаты на ℝ^2 Однородные координаты на ℝℙ^2 Декартовы координаты на ℝ^3 Однородные координаты на ℝℙ^3

Это преобразование применяется к трёхмерному пространству и не может быть представлено на плоскости.

Это преобразование не является линейным преобразованием в ℝ^3 и не может быть представлено матрицей в декартовых координатах. (10000100001000−1/d1)\left( \begin{array}{cccc} 1 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ 0 & 0 & -\frac{1}{d} & 1 \\ \end{array} \right)

Формальный синтаксис

<perspective()> = 
  perspective( [ <length [0,∞]> | none ] )

Примеры

HTML

<p>Without perspective:</p>
<div class="no-perspective-box">
  <div class="face front">A</div>
  <div class="face top">B</div>
  <div class="face left">C</div>
</div>

<p>With perspective (9cm):</p>
<div class="perspective-box-far">
  <div class="face front">A</div>
  <div class="face top">B</div>
  <div class="face left">C</div>
</div>

<p>With perspective (4cm):</p>
<div class="perspective-box-closer">
  <div class="face front">A</div>
  <div class="face top">B</div>
  <div class="face left">C</div>
</div>

CSS

.face {
  position: absolute;
  width: 100px;
  height: 100px;
  line-height: 100px;
  font-size: 100px;
  text-align: center;
}

p + div {
  width: 100px;
  height: 100px;
  transform-style: preserve-3d;
  margin-left: 100px;
}
.no-perspective-box {
  transform: rotateX(-15deg) rotateY(30deg);
}

.perspective-box-far {
  transform: perspective(9cm) rotateX(-15deg) rotateY(30deg);
}

.perspective-box-closer {
  transform: perspective(4cm) rotateX(-15deg) rotateY(30deg);
}

.top {
  background-color: skyblue;
  transform: rotateX(90deg) translate3d(0, 0, 50px);
}

.left {
  background-color: pink;
  transform: rotateY(-90deg) translate3d(0, 0, 50px);
}

.front {
  background-color: limegreen;
  transform: translate3d(0, 0, 50px);
}

Результат

Спецификации

Спецификация
Модуль CSS Transforms, уровень 2
# funcdef-perspective

Совместимость с браузерами

Компьютеры Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome для Android Firefox для Android Opera для Android Safari для iOS Samsung Internet WebView для Android WebView для iOS
perspective
12
12
10
15
4
18
10
14
3.2
1.0
3
3.2
none
97
97
93
83
15.4
97
93
68
15.4
18.0
97
15.4

См. также

  • transform
  • <transform-function>
  • Отдельные свойства преобразования:
    • translate
    • scale
    • rotate

© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Values/transform-function/perspective

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API