Transform-style和Perspective属性

perspective属性

perspective属性对于3D变形来说至关重要。

其实对于perspective属性,我们可以简单的理解为视距,用来设置用户和元素3D空间Z平面之间的距离。而其效应由他的值来决定,值越小,用户与3D空间Z平面距离越近,视觉效果更令人印象深刻;反之,值越大,用户与3D空间Z平面距离越远,视觉效果就很小。

perspective:none | <length>

perspective属性包括两个属性:none和具有单位的长度值。其中perspective属性的默认值为none,表示无限的角度来看3D物体,但看上去是平的。另一个值<length>接受一个长度单位大于0的值。而且其单位不能为百分比值<length>值越大,角度出现的越远,从而创建一个相当低的强度和非常小的3D空间变化。反之,此值越小,角度出现的越近,从而创建一个高强度的角度和一个大型3D变化。

有一点需要特别提醒大家,如果你的元素设置了transform-style值为preserve-3d,就不能为了防止子元素溢出容器而设置overflow值为hidden如果设置了overflow:hidden同样可以迫死子元素出现在同一平面(和元素设置了transform-styleflat一样的效果),如下图所示:

 

在3D变形中,除了perspective属性可以激活一个3D空间之外,在3D变形的函数中的perspective()也可以激活3D空间。他们不同的地方是:perspective用在舞台元素上(变形元素们的共同父元素);perspective()就是用在当前变形元素上,并且可以与其他的transform函数一起使用。

 

<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>test</title>
<meta name="description" content="">
<meta name="keywords" content="">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.3, user-scalable=no">
<meta content="yes" name="apple-mobile-web-app-capable">
<meta content="black" name="apple-mobile-web-app-status-bar-style">
<meta content="telephone=no" name="format-detection">
<meta content="email=no" name="format-detection">
<style>
    *{margin:0;padding:0;}
    .clearfix{zoom:1;}
    .clearfix:after{content:'\20';display:block;height:0;clear:both;}
    body{font-size:62.5%;padding:0;}

    .wrap{
        float:left;
        width:50%;
    }

    .cube {
        font-size: 4em;
        width: 2em;
        margin: 1.5em auto;
        transform-style: preserve-3d;
        transform: rotateX(-40deg) rotateY(32deg);
    }
    .side {
        position: absolute;
        width: 2em;
        height: 2em;
        background: rgba(255, 99, 71, 0.6);
        border: 1px solid rgba(0, 0, 0, 0.5);
        color: white;
        text-align: center;
        line-height: 2em;
    }
    .front {transform: translateZ(1em);}
    .top{transform: rotateX(90deg) translateZ(1em);}    /*3d变形函数中如果有多个变形函数,需要先旋转再位移,先位移再旋转的好像看不出来效果,具体原因不明,谁知道的话多谢告知下*/
    .right{transform:rotateY(90deg) translateZ(1em);}
    .left{transform: rotateY(-90deg) translateZ(1em);}
    .bottom{transform:rotateX(-90deg) translateZ(1em);}
    .back {transform: rotateY(-180deg) translateZ(1em);}
    .w1 {perspective: 100px;}
    .w2{perspective: 1000px;}               /* 还可以用此种方式   ---->  .w2 .cube >div{transform:perspective:(1000px);}*/
</style>
</head>
<body>


<div class="wrap w1">
    <div class="cube">
        <div class="side front">1</div>
        <div class="side back">6</div>
        <div class="side right">4</div>
        <div class="side left">3</div>
        <div class="side top">5</div>
        <div class="side bottom">2</div>
    </div>
</div>

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

posted on 2015-02-27 15:53  鬼鬼丫404  阅读(365)  评论(0编辑  收藏  举报

导航