ホームページ  >  記事  >  ウェブフロントエンド  >  CSS3のパースペクティブ属性を使用した3D変換距離の設定方法例を共有します

CSS3のパースペクティブ属性を使用した3D変換距離の設定方法例を共有します

高洛峰
高洛峰オリジナル
2017-03-10 09:49:002067ブラウズ

パースペクティブ属性と関連するパースペクティブ原点属性は、3D グラフィックス空間の座標軸上の距離を制御するために使用されます。もちろん、CSS3 パースペクティブ属性を使用して 3D 変換距離を設定する方法の例を共有します。パースペクティブについては後ほど説明します。 -origin の使用法:

パースペクティブ属性は 3D 変形に重要です。このプロパティは、ビューアの位置を設定し、ビジュアル コンテンツをビュー フラスタムにマップし、それを 2D ビュー平面に投影します。パースペクティブを指定しない場合、Z 空間内のすべての点が同じ 2D ビュー平面に並べて表示され、変換結果には被写界深度の概念がありません。

上記の説明は理解しにくいかもしれませんが、実際には、パースペクティブ属性については、ユーザーと要素の 3D 空間の Z 平面の間の距離を設定するために使用される視距離として単純に理解できます。効果はその値によって決まります。値が小さいほど、ユーザーは 3D 空間の Z 平面に近くなり、逆に、ユーザーが Z 平面から離れるほど、視覚効果はより印象的になります。 3D 空間の平面、視覚効果は非常に小さいです。

3D 変形では、以下の例で示す Z 軸に沿った変形など、一部の変形では、変形の効果を確認するために遠近法属性が不可欠です。

まず、トランプの 3D 回転効果を作成する簡単な例を見てみましょう。1 つはトランプの親要素にビュー距離の視点を追加し、もう 1 つはそれを設定しません:

HTML

<p>
    <img src="images/cardKingClub.png" alt="" width="142"    style="max-width:90%" />
    <img src="images/cardKingClub.png" alt="" width="142"    style="max-width:90%" />
</p>
<p>
    <img src="images/cardKingClub.png" alt="" width="142"    style="max-width:90%" />
    <img src="images/cardKingClub.png" alt="" width="142"    style="max-width:90%" />
</p>

CSS

p {   
    width: 500px;   
    height: 300px;   
    margin: 30px auto;   
    position: relative;   
    background: url(images/bg-grid.jpg) no-repeat center center;   
    background-size: 100% 100%;   
}   
p img {   
    position: absolute;   
    top: 50%;   
    left: 50%;   
    margin-left: -71px;   
    margin-top: -100px;    
    transform-origin: bottombottom;   
}   
p img:nth-child(1){   
    opacity: .5;   
    z-index: 1;   
}   
p img:nth-child(2){   
    z-index: 2;   
    transform: rotateX(45deg);   
}   
p:nth-of-type(2){   
    perspective: 500px;   
}

その効果は次のとおりです:
CSS3のパースペクティブ属性を使用した3D変換距離の設定方法例を共有します

上の写真の効果はすべてを完全に説明しています。親ノードが視点を設定していない場合、梅の花王の 3D 回転効果は明ら​​かではありませんが、親ノードが視点を設定すると、梅の花王は 3D 回転のように見えます。

上記の例は、パースペクティブの使用方法を示しているだけです。戻ってパースペクティブの使用構文を見てみましょう:

perspective:none | <length>

パースペクティブ属性には、なしと単位付きの長さの値の 2 つの属性が含まれています。パースペクティブ属性のデフォルト値は none です。これは、3D オブジェクトが無限の角度から表示されますが、平面的に見えることを意味します。別の値 は、0 より大きい長さ単位の値を受け入れます。また、その単位をパーセント値にすることはできません。 の値が大きいほど、角度がより遠くに表示され、強度がかなり低くなり、3D 空間の変化はほとんどなくなります。逆に、この値が小さいほど角度が近くなり、角度が強くなり、立体的な変化が大きくなります。

たとえば、高さ 10 フィートと 1000 フィートに立って、10 フィートの立方体を見ます。 10 フィートでは、立方体から離れると同じサイズになります。したがって、視点の変化は 1,000 フィートの高さに立っている場合よりもはるかに大きくなり、立体のサイズは立方体からの距離の 100 分の 1 になります。同じ考え方がパースペクティブの 値にも当てはまります。この側面についての理解を深めるために、例を見てみましょう:

HTML

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

CSS

.wrapper {   
    width: 50%;   
    float: left;   
}   
.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);   
}   
.rightright {   
    transform: rotateY(90deg) translateZ(1em);   
}   
.left {   
    transform: rotateY(-90deg) translateZ(1em);   
}   
.bottombottom {   
    transform: rotateX(-90deg) translateZ(1em);   
}   

.back {   
    transform: rotateY(-180deg) translateZ(1em);   
}   
.w1 {   
    perspective: 100px;   
}   
.w2{   
    perspective: 1000px;   
}

その効果は以下のようになります:
CSS3のパースペクティブ属性を使用した3D変換距離の設定方法例を共有します

上記の紹介によれば、次のことができます。視点の値 簡単な結論:

1. 視点の値がなし、または設定されていない場合、実際の 3D 空間は存在しません。
2. 遠近法の値が小さいほど、3D 効果がより明白になります。つまり、目が真の 3D に近づきます。
3. パースペクティブの値は無限大、または値が 0 の場合、none の値と同じ効果があります。
パースペクティブ属性をよりよく理解するには、その関係をtranslateZと組み合わせる必要があります。実際、遠近感の値は人間の目からモニターまでの距離として単純に理解することもでき、平行移動は 3D オブジェクトとソース点の間の距離です。以下は、遠近感の関係を説明するための W3C の図です。そしてZを翻訳します。
CSS3のパースペクティブ属性を使用した3D変換距離の設定方法例を共有します

上の図はパースペクティブ属性とtranslateZの位置比率を示しています。図の上では、Z が半分の d で、Z 軸上に表示される元の円 (輪郭) (破線の円) を使用するために、キャンバス上の実線の円が、水色の円のように 2 つの部分に拡張されます。丸。下の画像に示すように、円が縮小されて、破線の円がキャンバスの後ろに表示され、Z サイズが元の位置の 3 分の 1 になります。

3D変形では、3D空間を活性化できるパースペクティブ属性に加え、3D変形関数のperspective()でも3D空間を活性化できます。それらの違いは、perspective はステージ要素 (変形された要素の共通の親要素) で使用され、perspective() は現在の変形された要素で使用され、他の変換関数と併用できることです。たとえば、

.stage {   
    perspective: 600px
}

を次のように書くことができます:

.stage .box {   
    transform: perspective(600px);   
}

来看一个简单示例:

HTML

<p class="stage">
    <p class="container">
        <img src="images/cardKingClub.png" alt="" width="142"    style="max-width:90%" />
    </p>
</p>
<p class="stage">
    <p class="container">
        <img src="images/cardKingClub.png" alt="" width="142"    style="max-width:90%" />
    </p>
</p>

CSS

.stage {   
    width: 500px;   
    height: 300px;   
    margin: 30px auto;   
    position: relative;   
    background: url(images/bg-grid.jpg) no-repeat center center;   
    background-size: 100% 100%;   
}   
.container {   
    position: absolute;   
    top: 50%;   
    left: 50%;   
    width: 142px;   
    height: 200px;   
    border: 1px dotted orange;   
    margin-left: -71px;   
    margin-top: -100px;    
}   
.container img{   
    transform: rotateY(45deg);   
}   
.stage:nth-child(1) .container{   
    perspective: 600px;   
}   
.stage:nth-child(2) img {   
    transform:perspective(600px) rotateY(45deg);   
}

效果如下所示:
CSS3のパースペクティブ属性を使用した3D変換距離の設定方法例を共有します

上图效果可以看出,虽然书写的形式,属性名称不一致,但是效果却一样。

虽然perspective属性和perspective()函数所起的功能是一样的,但其取值以及以运用的对像有所不同:

1. perspective属性可以取值为none或长度值;而perspective()函数取值只能大于0,如果取值为0或比0小的值,将无法激活3D空间;
2.perspective属性用于变形对像父元素;而perspective()函数用于变形对像自身,并和transform其他函数一起使用。
 

perspective-origin属性

perspective-origin属性是3D变形中另一个重要属性,主要用来决定perspective属性的源点角度。它实际上设置了X轴和Y轴位置,在该位置观看者好像在观看该元素的子元素。

perspective-origin属性的使用语法也很简单:

代码如下:

perspective-origin:[<percentage> | <length> | left | center | right | top | bottom] | [[<percentage> | <length> | left | center | right] && [<percentage> | <length> | top | center | bottom]]


该属性的默认值为“50% 50%”(也就是center),其也可以设置为一个值,也可以设置为两个长度值:

 第一个长度值指定相对于元素的包含框的X轴上的位置。它可以是长度值(以受支持的长度单位表示)、百分比或以下三个关键词之一:left(表示在包含框的X轴方向长度的0%),center(表示中间点),或right(表示长度的100%)。
 第二个长度值指定相对于元素的包含框的Y轴上的位置。它可以是长度值、百分比或以下三个关键词之一:top(表示在包含框的Y轴方向长度的0%),center(表示中间点),或bottom(表示长度的100%)。
注意,为了指转换子元素变形的深度,perspective-origin属性必须定义父元素上。通常perspective-origin属性本身不做任何事情,它必须被定义在设置了perspective属性的元素上。换句话说,perspective-origin属性需要与perspective属性结合起来使用,以便将视点移至元素的中心以外位置,如下图所示:
CSS3のパースペクティブ属性を使用した3D変換距離の設定方法例を共有します

往往我们看一样东西不可能一直都在中心位置看,想换个角度,换个位置一看究竟,这个时候就离不开perspective-origin这个属性,下面来自于W3C官网的图可以简单阐述这一观点:
CSS3のパースペクティブ属性を使用した3D変換距離の設定方法例を共有します

以上がCSS3のパースペクティブ属性を使用した3D変換距離の設定方法例を共有しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。