perspective-origin

版本: CSS3

CSS 属性 perspective-origin 指定了观察者的位置,用作 perspective 属性的消失点。

示例

perspective-origin: center;
perspective-origin: top;
perspective-origin: bottom right;
perspective-origin: 500% 200%;
perspective-origin: -170%;

/* global values */
perspective-origin: inherit;
perspective-origin: initial;
perspective-origin: unset;

浏览器支持

IE浏览器 火狐浏览器 opera浏览器 chrome浏览器 safari浏览器
IE10以上版本的浏览器都支持 perspective-origin

语法

perspective-origin : x-position | y-position

取值

  • x-position :指定 消失点 的横坐标,其值有以下形式:
    • <length-percentage> 长度值或相对于元素宽度的百分比值,可为负值。
    • left ,关键字,0值的简记。
    • center ,关键字,50%的简记。
    • right ,关键字,100%的简记。
  • y-position :指定 消失点 的纵坐标,其值有以下形式:
    • <length-percentage> 长度值或相对于元素高度的百分比值,可为负值。
    • top ,关键字,0值的简记。
    • center ,关键字,50%的简记。
    • bottom ,关键字,100%的简记。
默认值 50% 50%,效果等同于center center
适用于 变换元素
继承性
动画性 当值为数值时
计算值 除了指定绝对值,否则都为百分比

说明:

指定透视点的位置。

  • 该属性提供2个参数值。
  • 如果提供两个,第一个用于横坐标,第二个用于纵坐标。
  • 如果只提供一个,该值将用于横坐标;纵坐标将默认为center。
  • 对应的脚本特性为 perspactiveOrigin

CSS属性 perspective-origin 指定了观察者的位置,用作 perspective 属性的消失点。

实例

//html

<table>
  <tbody>
    <tr>
      <th>
        <code>perspective-origin: top left;</code>
      </th>
      <th>
        <code>perspective-origin: top;</code>
      </th>
      <th>
        <code>perspective-origin: top right;</code>
      </th>
    </tr>
    <tr>
      <td>
        <div class="container">
          <div class="cube potl">
            <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>
        </div>
      </td>
      <td>
        <div class="container">
          <div class="cube potm">
            <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>
        </div>
      </td>
      <td>
        <div class="container">
          <div class="cube potr">
            <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>
        </div>
      </td>
    </tr>
    <tr>
      <th>
        <code>perspective-origin: left;</code>
      </th>
      <th>
        <code>perspective-origin: 50% 50%;</code>
      </th>
      <th>
        <code>perspective-origin: right;</code>
      </th>
    </tr>
    <tr>
      <td>
        <div class="container">
          <div class="cube poml">
            <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>
        </div>
      </td>
      <td>
        <div class="container">
          <div class="cube pomm">
            <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>
        </div>
      </td>
      <td>
        <div class="container">
          <div class="cube pomr">
            <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>
        </div>
      </td>
    </tr>
    <tr>
      <th>
        <code>perspective-origin: bottom left;</code>
      </th>
      <th>
        <code>perspective-origin: bottom;</code>
      </th>
      <th>
        <code>perspective-origin: bottom right;</code>
      </th>
    </tr>
    <tr>
      <td>
        <div class="container">
          <div class="cube pobl">
            <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>
        </div>
      </td>
      <td>
        <div class="container">
          <div class="cube pobm">
            <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>
        </div>
      </td>
      <td>
        <div class="container">
          <div class="cube pobr">
            <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>
        </div>
      </td>
    </tr>
  </tbody>
</table>

//CSS

/* shorthand classes for perspective-origin values */
.potl {
  perspective-origin: top left;
  -webkit-perspective-origin: top left;
}

.potm {
  perspective-origin: top;
  -webkit-perspective-origin: top;
}

.potr {
  perspective-origin: top right;
  -webkit-perspective-origin: top right;
}

.poml {
  perspective-origin: left;
  -webkit-perspective-origin: left;
}

.pomm {
  perspective-origin: 50% 50%;
  -webkit-perspective-origin: 50% 50%;
}

.pomr {
  perspective-origin: right;
  -webkit-perspective-origin: right;
}

.pobl {
  perspective-origin: bottom left;
  -webkit-perspective-origin: bottom left;
}

.pobm {
  perspective-origin: bottom;
  -webkit-perspective-origin: bottom;
}

.pobr {
  perspective-origin: bottom right;
  -webkit-perspective-origin: bottom right;
}

/* define the container div, the cube div, and a generic face */
.container {
  width: 100px;
  height: 100px;
  margin: 24px;
  border: none;
}

.cube {
  width: 100%;
  height: 100%;
  backface-visibility: visible;
  perspective: 300px;
  transform-style: preserve-3d;
  -webkit-backface-visibility: visible;
  -webkit-perspective: 300px;
  -webkit-transform-style: preserve-3d;
}

.face {
  display: block;
  position: absolute;
  width: 100px;
  height: 100px;
  border: none;
  line-height: 100px;
  font-family: sans-serif;
  font-size: 60px;
  color: white;
  text-align: center;
}

/* define each face based on direction */
.front {
  background: rgba(0, 0, 0, 0.3);
  transform: translatez(50px);
  -webkit-transform: translatez(50px);
}

.back {
  background: rgba(0, 255, 0, 1);
  color: black;
  transform: rotatey(180deg) translatez(50px);
  -webkit-transform: rotatey(180deg) translatez(50px);
}

.right {
  background: rgba(196, 0, 0, 0.7);
  transform: rotatey(90deg) translatez(50px);
  -webkit-transform: rotatey(90deg) translatez(50px);
}

.left {
  background: rgba(0, 0, 196, 0.7);
  transform: rotatey(-90deg) translatez(50px);
  -webkit-transform: rotatey(-90deg) translatez(50px);
}

.top {
  background: rgba(196, 196, 0, 0.7);
  transform: rotatex(90deg) translatez(50px);
  -webkit-transform: rotatex(90deg) translatez(50px)
}

.bottom {
  background: rgba(196, 0, 196, 0.7);
  transform: rotatex(-90deg) translatez(50px);
  -webkit-transform: rotatex(-90deg) translatez(50px);
}

/* make the table a little nicer */
th, p, td {
  background-color: #eeeeee;
  padding: 10px;
  font-family: sans-serif;
  text-align: left;
}
perspective-origin: top left; perspective-origin: top; perspective-origin: top right;
1
2
3
4
5
6
1
2
3
4
5
6
1
2
3
4
5
6
perspective-origin: left; perspective-origin: 50% 50%; perspective-origin: right;
1
2
3
4
5
6
1
2
3
4
5
6
1
2
3
4
5
6
perspective-origin: bottom left; perspective-origin: bottom; perspective-origin: bottom right;
1
2
3
4
5
6
1
2
3
4
5
6
1
2
3
4
5
6

实例

<!DOCTYPE html>
<html>
<head>
<style>
#div1
{
position:relative;
height:200px;
width:200px;
margin:50px;
padding:10px;
border:1pxsolidblack;
}

#div2
{
padding:50px;
position:absolute;
border:1pxsolidblack;
background-color:red;
transform:rotatex(45deg);
-webkit-transform:rotatex(45deg);/*safari and chrome*/
}
</style>
<script>
functionchangepersp(value)
{
document.getelementbyid('div1').style.webkitperspective=value;
document.getelementbyid('persp').innerhtml=value;
}

functionchangeorgpersp()
{
varx=document.getelementbyid('operspx').value;
vary=document.getelementbyid('operspy').value;
document.getelementbyid('div1').style.webkitperspectiveorigin=x+'%'+y+'%';
document.getelementbyid('opersp').innerhtml=x+"%"+y+"%";
}
</script>
</head>

<bodyonload="changepersp(200);updateorigperpective()">

<div id="div1">
<div id="div2">hello</div>
</div>

changeperspective:<br>
<input type="range"min="45"max="5000"value="200"onchange="changepersp(this.value)"/><br>
webkit-perspective:<spanid="persp"></span>;<br>
<br>
changetheorigins:<br>
x-axis:<input type="range"min="-100"max="200"value="50"onchange="changeorgpersp()"id="operspx"/><br>
y-axis:<input type="range"min="-100"max="200"value="50"onchange="changeorgpersp()"id="operspy"/><br>
webkit-perspective-origin:<spanid="opersp">50%50%</span>;
</body>
</html>