ホームページ  >  記事  >  ウェブフロントエンド  >  純粋な CSS3 を使用して 3D 回転を実装する book_html/css_WEB-ITnose

純粋な CSS3 を使用して 3D 回転を実装する book_html/css_WEB-ITnose

WBOY
WBOYオリジナル
2016-06-24 11:23:361173ブラウズ

一部の最先端の電子商取引 Web サイトでは、3D モデルを使用して商品を表示し、オンラインのカスタマイズをサポートし始めています。その中で書籍の表示は最も単純なものです

画像と CSS3 変換を使用する複雑なモデリング プロセスは必要ありませんシンプルで実用的な、より良い表示効果を実現できます。


本の 3D モデルは、基本的に表/裏表紙と左側のシールが付いた立方体であるため、すべての製品の中で最も単純です。

したがって、3D 本の表示を構築するには、問題は立方体 + 回転 + 画像の背景の構築に分解されます。

1. 立方体を構築する

立方体を作成するには、まず仮想 3 次元視覚空間を作成する必要があります。これは、コンテナ要素のパースペクティブ属性を設定することで取得できます。


.stage {    width: 200px;    height: 260px;    perspective: 1000px;    perspective-origin: center center;// 缺省值,可忽略}
上記のコードは、要素を観測点 (Z 軸) から 1000 ピクセル離れた位置に、X/Y 軸の中心に配置します。

<div class="stage">    <div class="cube">        <figure class="back"></figure>        <figure class="top"></figure>        <figure class="bottom"></figure>        <figure class="left"></figure>        <figure class="right"></figure>        <figure class="front"></figure>  </div></div>
次に、コンテナ要素の中に上下左右前後の 6 面を持つ立方体要素を追加します。Figure を使用する理由は、テクスチャをサポートする必要があるためです。

本の厚さ、長さ、幅に基づいて立方体の各面の座標位置を決定する必要があります。この例では、使用される本のモデル (MySQL 本) の絶対的な厚さは 18.2 ピクセルです。高さは260px、幅は197.6pxです。

したがって、単純な幾何学的知識に基づくと、立方体の中心から表と裏の間の距離は 18.2/2=9.1 ピクセルであり、「裏」要素を裏返す (つまり、「裏返す」) 必要があります。

.front {    transform: translateZ(9.1px);}.back {    transform: rotateY(180deg) translateZ(9.1px);}
同様の計算方法を使用して、他の 4 つの辺 (移動 + 回転変換) をそれぞれの位置に配置して、仮想立方体を組み立てることができます。

.front {    transform: translateZ(9.1px);}.back {    transform: rotateY(180deg) translateZ(9.1px);}.top {    transform: rotateX(90deg) rotateZ(90deg) translateZ(98.8px) translateY(-89.7px);    width: 18.2px;    height: 197.6px;}.bottom {    transform: rotateX(-90deg) rotateZ(90deg) translateZ(161.2px) translateY(-89.7px);}.left {    transform: rotateY(-90deg) translateZ(9.1px);    width: 18.2px;}.right {    transform: rotateY(90deg) translateZ(188.5px);    width: 18.2px;}
2. カバーを追加します。次に、前面、背面、左側の要素に背景画像を追加し (1 つの画像を使用して、別の位置からキャプチャすることができます)、他の 3 つの側面に背景色を追加します。 「底部」を与える 表面に影の効果を追加します:

.front {    transform: translateZ(9.1px);    background: url("//wow.techbrood.com/uploads/160301/mysql.png") top right;    background-size: auto 100%;}.back {    transform: rotateY(180deg) translateZ(9.1px);    background: url("//wow.techbrood.com/uploads/160301/mysql.png") top left;    background-size: auto 100%;}.top {    transform: rotateX(90deg) rotateZ(90deg) translateZ(98.8px) translateY(-89.7px);    background: #fafafa;    width: 18.2px;    height: 197.6px;}.bottom {    transform: rotateX(-90deg) rotateZ(90deg) translateZ(161.2px) translateY(-89.7px);    background: #ccc;    width: 18.2px;    height: 197.6px;    -webkit-filter: drop-shadow(0 0 26px rgba(0, 0, 0, 0.75));}.left {    transform: rotateY(-90deg) translateZ(9.1px);    background: url("//wow.techbrood.com/uploads/160301/mysql.png") top center;    background-size: auto 100%;    width: 18.2px;}.right {    transform: rotateY(90deg) translateZ(188.5px);    background: #ddd;    background-size: auto 100%;    width: 18.2px;}
このようにして、リアルな 3D 本のビジュアル モデルを実現しました。

3. 回転アニメーションを追加します

これは比較的簡単で、rotateY メソッドを使用するだけです。

@-webkit-keyframes rotate {    0% {        transform: rotateY(0) translateX(-18.2px);    }    100% {        transform: rotateY(360deg) translateX(-18.2px);    }}
の最終的なレンダリングは次のとおりです:



Tade.com (http://wow.techbrood.com/fiddle/17587) で自分で試すことができます。


by iefreer

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