CSS - perspective()



The CSS function perspective() is used in the context of 3D transformations. It is used to define the perspective depth for an element, creating a 3D space in which transformations can occur. It takes a single value as an argument, which represents the distance of the viewer from the z=0 plane. The result is a <transform-function> data type.

The CSS function perspective() is a part of the transform value that is applied on an element, which is to be transformed. The difference between the perspective() function and the properties, perspective and perspective-origin is that, the latter two are related to the parent element of a child that is transformed in a three-dimensional space.

Possible value

The perspective() function takes a single parameter, which can be one of the following:

  • d: It is a <length> value that represents the distance between the user and the z=0 plane. When the value of d is either 0 or negative, then no perspective transform is applied on the element.

  • none: No perspective is set on the element.

Syntax

perspective(d)
  • Either a <length> value or none is passed to the function.

  • z=0 is the space where everything appears in the two-dimensional view.

  • Negative values are considered invalid and are syntax errors.

  • Values less than or equal to zero are clamped to 1px.

  • Any value other than none result in elements with positive z positions to appear larger, and those with negative z positions to appear smaller.

  • The elements with z positions equal to or larger than the perspective value, disappear.

  • When perspective() holds larger values, the transformation is small and vice-versa.

  • perspective(none) specifies perspective from an infinite distance and thus no transformation applied.

CSS perspective() - Basic Example

Following example demonstrates the use of perspective() function, which shows the various values of parameter d:

<html>
<head>
<style>
   .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;
      padding: 25px;
   }
   .without-perspective {
      transform: rotateX(-15deg) rotateY(30deg);
   }

   .with-perspective-none {
      transform: perspective(none) rotateX(-15deg) rotateY(30deg);
   }

   .with-perspective-larger {
      transform: perspective(8cm) rotateX(-15deg) rotateY(30deg);
   }

   .with-perspective-smaller {
      transform: perspective(3.1cm) rotateX(-15deg) rotateY(30deg);
   }

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

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

   .front {
      background-color: cadetblue;
      transform: translate3d(0, 0, 50px);
   }
</style>
</head>
<body>
   <p>Without perspective:</p>
   <div class="without-perspective">
      <div class="face front">1</div>
      <div class="face top">2</div>
      <div class="face left">3</div>
   </div>

   <p>With perspective (none):</p>
   <div class="with-perspective-none">
      <div class="face front">1</div>
      <div class="face top">2</div>
      <div class="face left">3</div>
   </div>

   <p>With perspective (8cm):</p>
   <div class="with-perspective-larger">
      <div class="face front">1</div>
      <div class="face top">2</div>
      <div class="face left">3</div>
   </div>

   <p>With perspective (3.1cm):</p>
   <div class="with-perspective-smaller">
      <div class="face front">1</div>
      <div class="face top">2</div>
      <div class="face left">3</div>
   </div>
</body>
</html>
Advertisements