[CSSチュートリアル】CSSのトリッキーなグラデーションで高度な背景光アニメーションの感覚を実現
実装する
この効果をCSSで正確に再現するのは難しく、CSSでの光の影のシミュレーションは比較的少ないので、再現を試みるしかない。
各照明セットは基本的に同じものなので、どれか1つを実装するだけでほぼ全ての効果を得ることができます。
この効果を観察してください。
その核心は、まさに円錐グラデーション()であり、これを使うと、おおよそ次のような効果を得ることができます。
<div></div>
div {
width: 1000px;
height: 600px;
background:
conic-gradient(
from -45deg at 400px 300px,
hsla(170deg, 100%, 70%, .7),
transparent 50%,
transparent),
linear-gradient(-45deg, #060d5e, #002268);
}
<スパン 効果を見てください。
それはちょっと楽しみですね。もちろん、よく見るとグラデーションは1色→透明で終わるのではなく、色A -- 透明 -- 色Bで、光源の残り半分がそれほど硬くならないように、修正したCSSコードになっているんですよ。
div {
width: 1000px;
height: 600px;
background:
conic-gradient(
from -45deg at 400px 300px,
hsla(170deg, 100%, 70%, .7),
transparent 50%,
hsla(219deg, 90%, 80%, .5) 100%),
linear-gradient(-45deg, #060d5e, #002268);
}
コーナーグラデーションの端に色を追加して、見栄えをよくしています。
ここで、角度グラデーションのconic-gradient()だけでは、光の影の効果をシミュレートするには不十分なので、他のプロパティを使って光の影の効果を実現しなければならないことがわかります。
ここで、自然とボックスシャドウを思い浮かべますが、複数のボックスシャドウを使ってネオンライト効果を実現するトリックを紹介します。
ライトシャドウを実装するdivを通しで追加してみましょう。
<div class="shadow"></div>
.shadow {
width: 200px;
height: 200px;
background: #fff;
box-shadow:
0px 0 .5px hsla(170deg, 95%, 80%, 1),
0px 0 1px hsla(170deg, 91%, 80%, .95),
0px 0 2px hsla(171deg, 91%, 80%, .95),
0px 0 3px hsla(171deg, 91%, 80%, .95),
0px 0 4px hsla(171deg, 91%, 82%, .9),
0px 0 5px hsla(172deg, 91%, 82%, .9),
0px 0 10px hsla(173deg, 91%, 84%, .9),
0px 0 20px hsla(174deg, 91%, 86%, .85),
0px 0 40px hsla(175deg, 91%, 86%, .85),
0px 0 60px hsla(175deg, 91%, 86%, .85);
}
さて、光はあるのですが、問題は片側だけ光らせればいいということです。切り抜きにはいろいろな方法がありますが、ここではclip-pathを使って要素上の任意のスペースを切り抜く方法を紹介します。
.shadow {
width: 200px;
height: 200px;
background: #fff;
box-shadow: ..... ;
clip-path: polygon(-100% 100%, 200% 100%, 200% 500%, -100% 500%);
}
原理はこうだ。
このように、光の片面:を得ることができます。
ここで、実はCSSで片側だけの影を実現する方法もあるのですが、実際にはうまくいかないので、結局、上記のような解決策になりました。
次に、位置合わせや回転などを使って、上の1つのサイドライトと角度のあるグラデーションを重ねると、次のようなものが出来上がります。
この時点で、すでにかなり似ていますね。次にやることは、パターン全体を、動かすことです。いろいろな仕掛けがありますが、CSSの@Propertyを使ってコーナーフェードをアニメーションさせることと、ライトのアニメーションをコーナーフェードに重ねることが核心です。
CSS @Propertyを使ってコードのフェードを変形させる必要があるのですが、そのコアとなるコードは以下の通りです。
<div class="wrap">
<div class="shadow"></div>
</div>
@property --xPoint {
syntax: '<length>';
inherits: false;
initial-value: 400px;
}
@property --yPoint {
syntax: '<length>';
inherits: false;
initial-value: 300px;
}
.wrap {
position: relative;
margin: auto;
width: 1000px;
height: 600px;
background:
conic-gradient(
from -45deg at var(--xPoint) var(--yPoint),
hsla(170deg, 100%, 70%, .7),
transparent 50%,
hsla(219deg, 90%, 80%, .5) 100%),
linear-gradient(-45deg, #060d5e, #002268);
animation: pointMove 2.5s infinite alternate linear;
}
.shadow {
position: absolute;
top: -300px;
left: -330px;
width: 430px;
height: 300px;
background: #fff;
transform-origin: 100% 100%;
transform: rotate(225deg);
clip-path: polygon(-100% 100%, 200% 100%, 200% 500%, -100% 500%);
box-shadow: ... This omits a lot of shadow code;
animation: scale 2.5s infinite alternate linear;
}
@keyframes scale {
50%,
100% {
transform: rotate(225deg) scale(0);
}
}
@keyframes pointMove {
100% {
--xPoint: 100px;
--yPoint: 0;
}
}
こうして、ライトの完全なアニメーションが実現しました。
このようなアニメーションを実現するためのステップをリフレッシュしてみましょう。
- 基本的なフレームは、角型グラデーションの円錐型グラデーションを使用して構築されており、ここでも複数のグラデーションが使用されており、角型グラデーションの後ろに暗い背景色が使用されています。
- 複数のボックスシャドウを使用して、光と影の効果を実現する(ネオン効果とも呼ばれる)
- clip-pathを使用して、要素の任意の領域を切り取ることができます。
- CSSの@Propertyでグラデーションをアニメーション化する
あとは、上記の手順を繰り返し、他のグラデーションや光源を追加し、アニメーションをデバッグして、ようやく以下のような簡単なシミュレーションができるようになりました。
元のエフェクトが.mp4なので、色をスウォッチから直接取って、影をよりランダムにシミュレーションしているところ、正確なパラメータを持つソースファイルがあれば、よりリアルにシミュレーションできるのですが、正確な色とパラメータを得ることができません。
<スパン 全コードはこちらをご覧ください。 CodePen -- iPhone 13 Pro グラデーション
<スパン 最後に
この記事はどちらかというと楽しむためのもので、実際には上記の効果に対してもっとエレガントな解決策があるのは間違いありませんし、CSSエミュレーションの使い方にももっと良い方法があるはずなので、それを投げかけてみただけです。
上記は、背景光のアニメーションの高度な感覚を達成するためにCSSフェードの詳細であり、CSSフェード背景アニメーションについての詳細は、スクリプトの家の他の関連記事に注意を払うしてください![OK]をクリックします。
関連
-
[CSSチュートリアル】CSS たった1行のコードでアバターと国旗の一体化を実現
-
[CSSチュートリアル】CSSのfloatとunfloatについて
-
[CSSチュートリアル】CSS擬似要素::マーカー解説
-
[CSSチュートリアル】CSSで炎のエフェクトを記述する方法
-
[CSSチュートリアル】background-positionプロパティのパーセンテージ値の使い方を探る
-
[css3] CSS3を使ってヘッダーアニメーション効果を作成する
-
[CSSチュートリアル】CSSで実現できるのなら、わざわざJavaScriptを使う必要はない
-
[CSSチュートリアル]モバイルにおけるviewportの具体的な使い方
-
[css3]CSS3アニメーションによるグラフィックドロップ効果
-
[css3】cssのmarginとvertical marginの重なりの値について
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[CSSチュートリアル】シングルセレクトの折りたたみメニュー機能を実現するCSS
-
[css3]css3はtransform-originを使用して、大きな円上のドット分布のレイアウトと回転を実現します。
-
[CSSチュートリアル】クールなネオン効果を実現するピュアCSS(デモあり)
-
[css3]css3は、背景画像の色を変更するためのさまざまな方法を実現するために
-
[CSSチュートリアル】CSS clear float clear:both サンプルコード
-
[CSSチュートリアル】ピュアCSS3による水平無限スクロールのサンプルコード
-
[css3]CSS3の画像ボーダーを学ぶための記事
-
[CSSチュートリアル]マウスをスライドさせてカードを浮かせるCSSの例
-
[CSSチュートリアル】cssのボックスモデルを解説 余白のパディングと省略について
-
[CSSチュートリアル】CSS疑似要素を使って、連続する複数の要素のスタイルを制御する