CSS3 中 3D 變換效果概述

1.transform-style 指定某元素的子元素是(看起來)位於三維空間內,還是在該元素所在的平面內被扁平化

取值:flat | preserve-3d

  • flat:默認值,指定子元素位於此元素所在平面內
  • preserve-3d:指定子元素定位在三維空間內

示例代碼:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>transform-style</title>
<style>
  body {
    perspective: 1000px;
  }
  .cube {
    position: relative;
    font-size: 80px;
    width: 2em;
    margin: 1.5em auto;
    transform-style: preserve-3d;
    transform: rotateX(-30deg) rotateY(30deg);
  }
  .cube > div {
    position: absolute;
    width: 2em;
    height: 2em;
    background: rgba(0, 0, 0, .3);
    border: 1px solid #999;
    color: white;
    text-align: center;
    line-height: 2em;
  }
  .front {
    transform: translateZ(1em);
  }
  .top {
    transform: rotateX(90deg) translateZ(1em);
  }
  .right {
    transform: rotateY(90deg) translateZ(1em);
  }
  .left {
    transform: rotateY(-90deg) translateZ(1em);
  }
  .bottom {
    transform: rotateX(-90deg) translateZ(1em);
  }
  .back {
    transform: rotateY(-180deg) translateZ(1em);
  }
</style>
</head>
<body>
  <div class="cube">
    <div class="front">1</div>
    <div class="back">2</div>
    <div class="right">3</div>
    <div class="left">4</div>
    <div class="top">5</div>
    <div class="bottom">6</div>
  </div>
</body>
</html>

示例代碼效果截圖:

11.png

2.perspective 指定觀察者與「z=0」平面的距離,使具有三維位置變換的元素產生透視效果

「z>0」的三維元素比正常大,而「z<0」時則比正常小,大小程度由該屬性的值決定。當該屬性值爲「非none」時,元素將會創建局部堆疊上下文。

取值:none | <length>

  • none:不指定透視
  • <length>:指定觀察者距離「z=0」平面的距離,爲元素及其內容應用透視變換。不允許負值
3.perspective-origin 指定透視點的位置

取值:[ <percentage> | <length> | left | center | right ] [ <percentage> | <length> | top | center | bottom ]

該屬性提供2個參數值。如果提供兩個,第一個用於橫座標,第二個用於縱座標。如果只提供一個,該值將用於橫座標;縱座標將默認爲center。

(1)<percentage>:用百分比指定透視點座標值,相對於元素寬度。可以爲負值。

(2)<length>:用長度值指定透視點座標值。可以爲負值。

  • left:指定透視點的橫座標爲left
  • center:指定透視點的橫座標爲center
  • right:指定透視點的橫座標爲right
  • top:指定透視點的縱座標爲top
  • center:指定透視點的縱座標爲center
  • bottom:指定透視點的縱座標爲bottom
4.backface-visibility 指定元素背面面向用戶時是否可見

取值:visible | hidden

決定一個元素背面面向用戶時是否可見,需要直接在該元素上定義 <' backface-visibility '> 屬性,而不能在其父元素上,因爲該屬性默認爲不可繼承。

  • visible:指定元素背面可見,允許顯示正面的鏡像
  • hidden:指定元素背面不可見

示例代碼:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <title>backface-visibility</title>
  <style>
    body {
      perspective: 800px;
      perspective-origin: 50%;
    }
    .wrapper{
      width: 500px;
      margin:30px auto 0;
    }
    .cube {
      display: inline-block;
      width: 100px;
      height: 100px;
      margin: 50px;
      transform-style: preserve-3d;
      animation: rotate 5s infinite;
    }
    .cube > div {
      position: absolute;
      width: 100%;
      height: 100%;
      border:1px #ff0 solid;
      background-color: rgba(0, 0, 0, .3);
      color: gray;
      font-size: 40px;
      line-height: 100px;
      text-align: center;
      color: #ff0;
      font-family: Arial;
    }
    .front {
      transform: translatez(50px);
    }
    .back {
      transform: rotatey(180deg) translatez(50px);
    }
    .right {
      transform: rotatey(90deg) translatez(50px);
    }
    .left {
      transform: rotatey(-90deg) translatez(50px);
    }
    .top {
      transform: rotatex(90deg) translatez(50px);
    }
    .bottom {
      transform: rotatex(-90deg) translatez(50px);
    }
    @keyframes rotate {
      from {
        transform: rotatey(0);
      }
      to {
        transform: rotatey(360deg);
      }
    }
    .c1 > div {
      backface-visibility: visible;
    }
    .c2 > div {
      backface-visibility: hidden;
    }
  </style>
</head>
<body>
  <div class="wrapper">
    <div class="cube c1">
      <div class="front">1</div>
      <div class="back">2</div>
      <div class="right">3</div>
      <div class="left">4</div>
      <div class="top">5</div>
      <div class="bottom">6</div>
    </div>

    <div class="cube c2">
      <div class="front">1</div>
      <div class="back">2</div>
      <div class="right">3</div>
      <div class="left">4</div>
      <div class="top">5</div>
      <div class="bottom">6</div>
    </div>
  </div>
</body>
</html>

示例代碼效果截圖:

22.png

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章