検索
ホームページウェブフロントエンドhtmlチュートリアルCSS を使用して 3D 効果を作成する方法cloud_html/css_WEB-ITnose

はじめに

この記事では、いくつかの高度な属性を使用して、いくつかの 3D 効果雲を作成する方法を段階的に紹介します。さらに詳しく知りたい場合は、ここを参照してください。悪くないスタートだ。

静的レンダリング

このチュートリアルはいくつかの部分に分かれており、各部分には HTML、CSS、JavaScript の動作を理解するための詳細な手順が含まれています。コードの単一セクション。

チュートリアルのコードは最終デモの簡略化されたバージョンですが、主な違いは各部分で説明されています

    1. 新しい世界と視点を作成します
  • 2. 作成した世界にオブジェクトを追加します
  • 4. 3D 効果を実行します
  • 5.新しいワールドと視点を作成します
  • まず、ビューポートとワールドという 2 つの div 要素が必要です。残りの部分は後で動的に追加されます。
  • ビューポートには画面全体とカメラが含まれます。 CSS の 3D 変換ではカメラ自体が存在しないため、透明なガラススクリーンを通して視野を見ていることを前提とし、視野の方向を変更することもできます。すべてのオブジェクトをそこに配置して変換します。

world は、すべてのオブジェクトを修正するために使用される div ボックスです。 回転、変形、拡大縮小すると、すべての要素が変形します。

簡単にするために、CSS プロパティのプレフィックスは使用しませんが、ブラウザーのプレフィックス (-webkit、-moz、-0、-ms など) を使用します

これが必要なボックス モデルのすべてです:

<div id="viewport">    <div id = "world" ></div></div>

以下は、定義した 2 つの CSS スタイルです。ここで、ワールド div をビューポート div 内に配置することが非常に重要です。そうしないと、シーンがレンダリングされません。他の 2D 要素と同様に、ドキュメント内に配置された要素も回転することに注意してください。 そうだね 次に、オブジェクトを初期化し、mousemove イベントをバインドし、updateView() 関数を定義するコードを記述します。

#viewport{    bottom:0;    left:0;    overflow:hidden;    perspective:400;    position:absolute;    right:0;    top:0;}#world{    height: 512px;    left: 50%;    margin-left: -256px;    margin-top: -256px;    position: absolute;    top: 50%;    transform-style: preserve-3d;    width: 512px;}

世界は赤で、ビューポートには空をシミュレートする背景色があり、マウスホイール イベントはカメラの距離を監視するために使用されます。マウスを移動して、赤い div の方向がどのように変化するかを確認します。

この部分のデモリンクはこちらです

2. 作成した世界にオブジェクトを追加します

次に、実際の 3D コンテンツを追加します。新しい div をいくつか追加し、ワールド空間に配置します。絶対に配置されたいくつかの div をワールドの子として追加する必要がありますが、デフォルトでワールドの中心に表示される左と上の代わりに 3D 変換を使用します。これらの新しいコンテナは実際のクラウドが配置されるレイヤーであるため、幅と高さのプロパティは重要ではありません。正式なアプリケーションの場合は、(margin-left プロパティと margin-top プロパティを幅と高さの負の値の半分に設定することにより) 中央に配置するのが最善です。

すごい

世界を具体化するために、generate() メソッドと createCloud() メソッドを追加します。

random_{var} は実際の変数値ではなく、指定された範囲内の乱数を返すコード プレースホルダーであることに注意してください

/*    Defining our variables    world and viewport are DOM elements,    worldXAngle and worldYAngle are floats that hold the world rotations,    d is an int that defines the distance of the world from the camera */var world = document.getElementById( 'world' ),    viewport = document.getElementById( 'viewport' ),    worldXAngle = 0,    worldYAngle = 0,    d = 0;/*    Event listener to transform mouse position into angles     from -180 to 180 degress, both vertically and horizontally*/window.addEventListener( 'mousemove', function( e ) {    worldYAngle = -( .5 - ( e.clientX / window.innerWidth ) ) * 180;    worldXAngle = ( .5 - ( e.clientY / window.innerHeight ) ) * 180;    updateView();} );/*    Changes the transform property of world to be    translated in the Z axis by d pixels,    rotated in the X axis by worldXAngle degrees and    rotated in the Y axis by worldYAngle degrees.*/function updateView() {    world.style.transform = 'translateZ( ' + d + 'px ) \    rotateX( ' + worldXAngle + 'deg) \    rotateY( ' + worldYAngle + 'deg)';}

ページ上のピンク色の四角いレイヤーは、viewport.style.perspective の値をより簡単に変更するための p 変数があります。この変数を変更して、カメラがどのように変化するかを確認してください。この値が大きいほど、視野角はより垂直になります。

randowm_{var} は実際の変数ではないことをもう一度思い出してください。

クリックしてデモのこの部分をご覧ください

3. オブジェクトにレイヤーを追加します ここで興味深いことが起こり始めます。雲を表すために絶対に配置されたいくつかの「雲レイヤー」div ボックスを追加します。雲のテクスチャを保持するために使用されます。

.cloudBase {    height: 20px;    left: 256px;    margin-left: -10px;    margin-top: -10px;    position: absolute;    top: 256px;    width: 20px;}

古い createCloud() 関数が少し変更され、クラウド層に乱数が追加されました。

/*    objects is an array of cloud bases    layers is an array of cloud layers*/    var objects = [],    layers = [];/*    Clears the DOM of previous clouds bases     and generates a new set of cloud bases*/    function generate() {        objects = [];        layers = [];        if ( world.hasChildNodes() ) {            while ( world.childNodes.length >= 1 ) {                world.removeChild( world.firstChild );               }         }        for( var j = 0; j <; 5; j++ ) {            objects.push( createCloud() );        }    }/*    Creates a single cloud base: a div in world    that is translated randomly into world space.    Each axis goes from -256 to 256 pixels.*/    function createCloud() {        var div = document.createElement( 'div'  );        div.className = 'cloudBase';        var t = 'translateX( ' + random_x + 'px ) \        translateY( ' + random_y + 'px ) \        translateZ( ' + random_z + 'px )';        div.style.transform = t;        world.appendChild( div );        return div;    }

クリックしてデモの 3 番目の部分をご覧ください

雲は、少し白いエッジが付いた青い部分で、かなり層になっているように見えます。マウスを移動して、各レイヤーがどのように配置され、回転するかを確認します。

4. 3D 効果を実行してみます

次のステップは奇跡を目撃することです! layers[] を使用して、世界の個々のクラウド レイヤーの参照を作成します。 worldXangle と worldYAngle を使用して、空間全体の選択変換を表します。

各レイヤーを逆回転に設定すると、ビューポート内でレイヤーのサイズが変更されます。ビルボードができました。最初にワールドを X 方向に回転させ、次に Y 方向に回転させるため、最初に Y 方向に、次に X 方向に各レイヤーを逆の順序で回転する必要があります。変換の順序は非常に重要です。順序を正しく設定しないと、要素の方向が間違ってしまいます。

.cloudLayer {    height: 256px;    left: 50%;    margin-left: -128px;    margin-top: -128px;    position: absolute;    top: 50%;    width: 256px;}

マウスを前後に動かすと、青い雲が垂直になっていることがわかります (常にカメラの方向を向いています)。ただし、世界と他の雲のベースは 3D 空間内のオブジェクトのままです。

クリックして魔法の効果を目撃してください

最終的なまとめ

最終的な効果を実現するには、デバッグに使用した色を削除し、雲レイヤー div に雲の画像を img とともに貼り付けるだけです。 画像はアルファチャンネル付きの PNG 形式である必要があることに注意してください。そうでない場合は効果がありません。

クリックして最終的な効果を確認してください

クリックして最終バージョンを確認してください

もちろん、煙の跡、プラズマ雲、緑の葉、空飛ぶパン製造機など、他の写真も変更できます。背景画像を変更するだけです。異なる割合のテクスチャ素材を混合すると、魔法のような効果が得られます。

要素をランダムに追加することは問題ありませんが、木、アヒルの形をした雲、複雑なビッグバンなどの規則正しい構造を作成することもできます。 3D 曲線を試したり、固定された雲の軌道を作成したり、3D 雲の形状を推測するマルチプレイヤー ゲームを作成したりすることができます。可能性は無限です。

注: 記事内のコードはすべて簡略化されており、段階的に練習したい場合は、サンプルエフェクトのリンクページを保存してソースコードを表示することをお勧めします。

この記事は https://www.clicktorelease.com/blog/how-to-make-clouds-with-css-3d# から翻訳されたものです。3D などの専門用語の翻訳に誤りがある場合はご容赦ください。視点を変えて、修正を歓迎します。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
HTMLを超えて:Web開発のための重要なテクノロジーHTMLを超えて:Web開発のための重要なテクノロジーApr 26, 2025 am 12:04 AM

強力な機能と優れたユーザーエクスペリエンスを備えたWebサイトを構築するには、HTMLだけでは十分ではありません。次のテクノロジーも必要です。JavaScriptは、Webページに動的とインタラクティブ性を与え、リアルタイムの変更がDOMを操作することで達成されます。 CSSは、美学とユーザーエクスペリエンスを向上させるために、Webページのスタイルとレイアウトを担当しています。 React、Vue.JS、Angularなどの最新のフレームワークとライブラリは、開発効率とコード組織構造を改善します。

HTMLのブール属性とは何ですか?いくつかの例を挙げてください。HTMLのブール属性とは何ですか?いくつかの例を挙げてください。Apr 25, 2025 am 12:01 AM

ブール属性は、値なしでアクティブ化されるHTMLの特別な属性です。 1.ブール属性は、無効化された入力ボックスを無効にするなど、存在するかどうかによって、要素の動作を制御します。 2.彼らの実用的な原則は、ブラウザが異なっているときに属性の存在に応じて要素の動作を変更することです。 3.基本的な使用法は、属性を直接追加することであり、高度な使用法はJavaScriptを介して動的に制御できます。 4.一般的な間違いは、値を設定する必要があると誤って考えており、正しい執筆方法は簡潔にする必要があります。 5.ベストプラクティスは、コードを簡潔に保ち、ブールのプロパティを合理的に使用して、Webページのパフォーマンスとユーザーエクスペリエンスを最適化することです。

HTMLコードをどのように検証できますか?HTMLコードをどのように検証できますか?Apr 24, 2025 am 12:04 AM

HTMLコードは、オンラインバリデーター、統合ツール、自動化されたプロセスを使用するとクリーンになります。 1)w3cmarkupvalidationserviceを使用して、HTMLコードをオンラインで確認します。 2)リアルタイム検証のためにVisualStudiocodeにhtmlhint拡張機能をインストールして構成します。 3)HTMLTIDYを使用して、建設プロセスでHTMLファイルを自動的に検証およびクリーニングします。

HTML対CSSおよびJavaScript:Webテクノロジーの比較HTML対CSSおよびJavaScript:Webテクノロジーの比較Apr 23, 2025 am 12:05 AM

HTML、CSS、およびJavaScriptは、最新のWebページを構築するためのコアテクノロジーです。1。HTMLはWebページ構造を定義します。2。CSSはWebページの外観に責任があります。

マークアップ言語としてのHTML:その機能と目的マークアップ言語としてのHTML:その機能と目的Apr 22, 2025 am 12:02 AM

HTMLの機能は、Webページの構造とコンテンツを定義することであり、その目的は、情報を表示するための標準化された方法を提供することです。 1)HTMLは、タイトルやパラグラフなどのタグや属性を使用して、Webページのさまざまな部分を整理しています。 2)コンテンツとパフォーマンスの分離をサポートし、メンテナンス効率を向上させます。 3)HTMLは拡張可能であり、カスタムタグがSEOを強化できるようにします。

HTML、CSS、およびJavaScriptの未来:Web開発動向HTML、CSS、およびJavaScriptの未来:Web開発動向Apr 19, 2025 am 12:02 AM

HTMLの将来の傾向はセマンティクスとWebコンポーネントであり、CSSの将来の傾向はCSS-in-JSとCSShoudiniであり、JavaScriptの将来の傾向はWebAssemblyとServerLessです。 1。HTMLセマンティクスはアクセシビリティとSEO効果を改善し、Webコンポーネントは開発効率を向上させますが、ブラウザの互換性に注意を払う必要があります。 2。CSS-in-JSは、スタイル管理の柔軟性を高めますが、ファイルサイズを増やす可能性があります。 CSShoudiniは、CSSレンダリングの直接操作を可能にします。 3. Webassemblyブラウザーアプリケーションのパフォーマンスを最適化しますが、急な学習曲線があり、サーバーレスは開発を簡素化しますが、コールドスタートの問題の最適化が必要です。

HTML:構造、CSS:スタイル、JavaScript:動作HTML:構造、CSS:スタイル、JavaScript:動作Apr 18, 2025 am 12:09 AM

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。1。HTMLは、Webページ構造を定義し、2。CSSはWebページスタイルを制御し、3。JavaScriptは動的な動作を追加します。一緒に、彼らは最新のウェブサイトのフレームワーク、美学、および相互作用を構築します。

HTMLの未来:ウェブデザインの進化とトレンドHTMLの未来:ウェブデザインの進化とトレンドApr 17, 2025 am 12:12 AM

HTMLの将来は、無限の可能性に満ちています。 1)新機能と標準には、より多くのセマンティックタグとWebComponentsの人気が含まれます。 2)Webデザインのトレンドは、レスポンシブでアクセス可能なデザインに向けて発展し続けます。 3)パフォーマンスの最適化により、応答性の高い画像読み込みと怠zyなロードテクノロジーを通じてユーザーエクスペリエンスが向上します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール