perspective()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2022.
The perspective()
CSS function defines a transformation that sets the distance between the
user and the z=0 plane, the perspective from which the viewer would be if the 2-dimensional interface were
3-dimensional. Its result is a <transform-function>
data type.
Try it
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: rgba(90, 90, 90, 0.7);
transform: translateZ(50px);
}
.back {
background: rgba(0, 210, 0, 0.7);
transform: rotateY(180deg) translateZ(50px);
}
.right {
background: rgba(210, 0, 0, 0.7);
transform: rotateY(90deg) translateZ(50px);
}
.left {
background: rgba(0, 0, 210, 0.7);
transform: rotateY(-90deg) translateZ(50px);
}
.top {
background: rgba(210, 210, 0, 0.7);
transform: rotateX(90deg) translateZ(50px);
}
.bottom {
background: rgba(210, 0, 210, 0.7);
transform: rotateX(-90deg) translateZ(50px);
}
The perspective()
transform function is part of the transform
value applied on the
element being transformed. This differs from the perspective
and perspective-origin
properties which are attached to the parent of a child transformed in 3-dimensional space.
Syntax
The perspective distance used by perspective()
is specified by a <length>
value,
which represents the distance between the user and the z=0 plane,
or by none
.
The z=0 plane is the plane where everything appears
in a 2-dimensional view, or the screen.
Negative values are syntax errors.
Values smaller than 1px
(including zero) are clamped to 1px
.
Values other than none
cause
elements with positive z positions to appear larger,
and elements with negative z positions to appear smaller.
Elements with z positions equal to or larger than the perspective value
disappear as though they are behind the user.
Large values of perspective represent a small transformation;
small values of perspective()
represent a large transformation;
perspective(none)
represents perspective from infinite distance
and no transformation.
perspective(d)
Values
- d
-
Is a
<length>
representing the distance from the user to the z=0 plane. If it is 0 or a negative value, no perspective transform is applied.
Cartesian coordinates on ℝ^2 | Homogeneous coordinates on ℝℙ^2 | Cartesian coordinates on ℝ^3 | Homogeneous coordinates on ℝℙ^3 |
---|---|---|---|
This transformation applies to the 3D space and can't be represented on the plane. |
This transformation is not a linear transformation in ℝ^3, and can't be represented using a Cartesian-coordinate matrix. |
|
Formal syntax
<perspective()> =
perspective( [ <length [0,∞]> | none ] )
Examples
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);
}
Result
Specifications
Specification |
---|
CSS Transforms Module Level 2 # funcdef-perspective |
Browser compatibility
BCD tables only load in the browser
See also
transform
<transform-function>
- Individual transform properties: