CSSはグラデーションを巧みに利用して高度な背景光アニメーションを実現します

CSSはグラデーションを巧みに利用して高度な背景光アニメーションを実現します

成し遂げる

この効果は CSS を使用して完全に再現することは困難です。 CSS でシミュレートされた光の効果と影は比較的品質が低く、可能な限り復元しようとしているとしか言えません。

実際、各ライト セットは基本的に同じなので、ほぼ全体の効果を実現するには、そのうちの 1 つを実装するだけで済みます。

この効果を観察してください:

その核となるのは、実は角度グラデーション、つまり conic-gradient() です。角度グラデーションを使用すると、大まかに次のような効果を実現できます。

<div></div>
div {

    幅: 1000ピクセル;

    高さ: 600px;

    背景:

        円錐勾配(

            -45度から400ピクセル300ピクセル、

            hsla(170度, 100%, 70%, .7),

            透明50%、

            透明)、

            線形グラデーション(-45度、#060d5e、#002268);

}

効果をご覧ください:

ちょっとそんな感じです。もちろん、よく見ると、グラデーション カラーは 1 つの色から透明に終わるのではなく、色 A -- 透明 -- 色 B となっていることがわかります。このようにすると、光源の残りの半分はそれほど急激にはなりません。変更された CSS コードは次のとおりです。

div {
    幅: 1000ピクセル;
    高さ: 600px;
    背景:
        円錐勾配(
            -45度から400ピクセル300ピクセル、
            hsla(170度, 100%, 70%, .7),
            透明50%、
            hsla(219度、90%、80%、.5) 100%)、
            線形グラデーション(-45度、#060d5e、#002268);
}

見た目を良くするために、角度グラデーションの最後に追加の色を追加しました。

えーと、ここでは、角度グラデーション conic-gradient() だけでは不十分で、光源の影の効果をシミュレートできないため、光源の影の効果を実現するには他のプロパティを使用する必要があることがわかります。

ここでは、当然ながらbox-shadowを思い浮かべます。複数のボックスシャドウを使用してネオンライトの効果を実現するトリックを紹介します。

光源の影を実現するために別の div を追加してみましょう。

<div class="shadow"></div>
。影 {
    幅: 200ピクセル;
    高さ: 200px;
    背景: #fff;
    ボックスシャドウ: 
        0px 0.5px hsla(170度, 95%, 80%, 1),
        0px 0 1px hsla(170度, 91%, 80%, .95),
        0px 0 2px hsla(171度, 91%, 80%, .95),
        0px 0 3px hsla(171度, 91%, 80%, .95),
        0px 0 4px hsla(171度, 91%, 82%, .9),
        0px 0 5px hsla(172度, 91%, 82%, .9),
        0px 0 10px hsla(173度, 91%, 84%, .9),
        0px 0 20px hsla(174度, 91%, 86%, .85),
        0px 0 40px hsla(175度, 91%, 86%, .85),
        0px 0 60px hsla(175度, 91%, 86%, .85);
} 

わかりました。光はありますが、問題は片側からの光しか必要ないということです。どうすればいいでしょうか?切り取る方法はたくさんあります。ここでは、clip-path を使用して要素の任意のスペースを切り取る方法を紹介します。

。影 {
    幅: 200ピクセル;
    高さ: 200px;
    背景: #fff;
    ボックスシャドウ: .....;
    クリップパス: ポリゴン(-100% 100%、200% 100%、200% 500%、-100% 500%);
}

原則は次のとおりです。

このようにして、片側に光が当たります。

ここで、CSS には実際に片側影を実現する方法がありますが、実際の効果は良くないため、最終的に上記の解決策が採用されました。

次に、上記の片側光と角度グラデーションを配置、回転などによって重ね合わせると、次のような効果が得られます。

今ではかなり似ていますね。次に行うことは、パターン全体を動かすことです。ここには多くのテクニックがあります。中心となるのは、CSS @Property を使用して角度グラデーション アニメーションを実現し、ライト アニメーションと角度グラデーションを重ね合わせることです。

コードのグラデーションを変換するには、CSS @Property を使用する必要があります。コア コードは次のとおりです。

<div class="wrap">
    <div class="shadow"></div>
</div>
@property --xPoint {
  構文: '<長さ>';
  継承: false;
  初期値: 400px;
}
@property --yポイント {
  構文: '<長さ>';
  継承: false;
  初期値: 300px;
}

。包む {
    位置: 相対的;
    マージン: 自動;
    幅: 1000ピクセル;
    高さ: 600px;
    背景:
        円錐勾配(
            -45度からvar(--xPoint) var(--yPoint)、
            hsla(170度, 100%, 70%, .7),
            透明50%、
            hsla(219度、90%、80%、.5) 100%)、
            線形グラデーション(-45度、#060d5e、#002268);
    アニメーション: pointMove 2.5 秒無限交互線形;
}

。影 {
    位置: 絶対;
    上: -300px;
    左: -330px;
    幅: 430ピクセル;
    高さ: 300px;
    背景: #fff;
    変換の原点: 100% 100%;
    変換: 回転(225度);
    クリップパス: ポリゴン(-100% 100%、200% 100%、200% 500%、-100% 500%);
    box-shadow: ...ここでは多くのシャドウコードが省略されています。
    アニメーション: スケール 2.5 秒 無限 交互 線形;
}
 
@keyframesスケール{
    50%、
    100% {
        変換: 回転(225度) スケール(0);
    }
}

@keyframes ポイント移動 {
    100% {
        --xポイント: 100px;
        --yポイント: 0;
    }
}

このようにして、完全なライトアニメーションを実現しました。

このようなアニメーションを実現するための手順を確認しましょう。

  1. 基本的なフレームワークを作成するには、円錐グラデーションを使用します。ここでは、円錐グラデーションの背後に暗い背景がある複数のグラデーションも使用されています。
  2. 複数のボックスシャドウを使用して光と影の効果を実現する(ネオン効果とも呼ばれる)
  3. クリップパスを使用して要素の任意の領域をクリップする
  4. CSS @Property を使用してグラデーションアニメーション効果を実現する

残りの作業は、上記の手順を繰り返し、他のグラデーションと光源を追加し、アニメーションをデバッグすることです。最終的には、次のような簡単なシミュレーション効果が得られます。

元のエフェクトは .mp4 なので、正確な色と影のパラメータを取得することは不可能です。色はカラーパレットから直接取得し、影はよりカジュアルにシミュレートします。ソースファイルと正確なパラメータがあれば、シミュレーションはよりリアルになります。

完全なコードはここにあります: CodePen – iPhone 13 Pro Gradient

やっと

この記事は、どちらかと言うと楽しみのためのものです。実際には、上記の効果を生み出すにはもっと洗練されたソリューションがあるはずですし、CSS を使用してそれらをシミュレートするより良い方法もあるはずです。ここでは、いくつかのアイデアを紹介しています。プロセス内のテクニック 1、2、3、4 のいくつかは、学ぶ価値があります。

上記は、CSS グラデーションを使用して高度な背景ライトアニメーションを実現する方法の詳細です。CSS グラデーション背景アニメーションの詳細については、123WORDPRESS.COM の他の関連記事に注目してください。

<<:  Mysqlの同時パラメータ調整の詳細な説明

>>:  RHCEはApacheをインストールし、ブラウザでIPにアクセスします

推薦する

Linux netstatコマンドの詳細な説明

目次Linux netstat コマンド1. TCP接続ステータスの詳細な説明2. コマンド形式3....

CSS で「プラス記号」効果を実装するためのサンプルコード

以下に示すプラス記号の効果を実現するには: この効果を実現するには、div 要素だけが必要です。 b...

CSSでスペースを処理する方法

1. 宇宙のルールHTML コード内の空白は通常、ブラウザによって無視されます。 <p>...

Linuxでawkを使用する方法の詳細な説明

awk を学ぶ前に、sed、grep、tr、cut などのコマンドを学んでおく必要があります。これら...

CSS セレクタの 4 つのカテゴリ: 基本、組み合わせ、属性、疑似クラス

セレクターとは何ですか?セレクターの役割は、セレクターを介して要素を見つけ、CSS スタイルを要素に...

jQueryは検証コード送信のコントロールボタンを無効にする機能を実装します

必要な効果: 確認コードを送信するためにクリックした後、ボタンは無効になり、5 秒後に無効解除されま...

Docker 経由で Spring Boot アプリケーションを公開およびデプロイするプロセスの分析

目次手動展開1.アイデアを使ってSpring Bootプロジェクトを作成する2. プロジェクトをJa...

Centos 7 64 ビット デスクトップ バージョンのインストール グラフィック チュートリアル

システムが遅いと感じてソースを変更したい場合は、別の記事で整理しました https://blog.c...

デザインストーリー: ナンバープレートを覚えられない警備員

<br />私が住んでいる地域では、コミュニティに出入りする車両を管理するために、コミュ...

MySQL の「特殊キーが長すぎます」の解決策

目次解決策1解決策2テーブルを作成するときに、興味深い問題に遭遇しました。「指定されたキーが長すぎま...

JavaScript プロトタイプとプロトタイプチェーンの詳細

目次1. プロトタイプ(明示的なプロトタイプ) 2. __proto__ (暗黙のプロトタイプ) 3...

Vue3とTypeScriptを組み合わせたプロジェクト開発の実践の概要

目次概要1. コンポジションAPI 1. ref と reactive の違いは何ですか? 2. 周...

Linux SecureCRT の文字化けの解決方法

SecureCRT が文字化けした文字を表示する状況を見てみましょう。例えば: ではリセットしてみま...

Dockerのネットワークモードと設定方法

1. Dockerネットワークモードdocker run が Docker コンテナを作成するときに...

h1、h2、h3タグを適切に使用する

Web ページを作成する過程では、<h1>、<h2>、<h3> ...