CSS3 アドバンス LESS で星空アニメーションを実装するサンプルコード

CSS3 アドバンス LESS で星空アニメーションを実装するサンプルコード

この記事では、星空アニメーションを実現するための高度な CSS3 LESS のサンプルコードを次のように紹介します。

エフェクトアニメーションは以下のとおりです。

私のコードペンのプレビューリンクとコード: https://codepen.io/lio-mengxiang/pen/YzKrEde

ナレッジポイントプレビュー

この記事の Less スキル + CSS スキルの知識ポイントは次のとおりです。

  • lessでループを書く方法
  • LessでJS式を使用する方法
  • CSS3 プロパティ: box-shadow が何百もの星を生成する仕組み
  • CSS3 プロパティ: background: radius-gradient、グラデーション背景色を生成する方法

HTML ドキュメント構造

まず、HTML ファイルの構造は次のように非常にシンプルです。

<div>
    <div id="start1"></div>
    <div id="start2"></div>
    <div id="start3"></div>
</div>

ステップ1: 放射状グラデーションはグラデーション背景を生成します

htmlタグとbodyタグに設定する

* {
    パディング: 0;
    マージン: 0;
}

html、本文{
    背景: 放射状グラデーション(下部に楕円、#1B2735 0%、#090A0F 100%);
    オーバーフロー: 非表示;
    高さ: 100%;
}

効果は以下のとおりです。

比較のため、私が描いた背景画像は真っ黒ではないので、比較用に真っ黒な画像を置いておきます。上の画像はそこまで黒ではなく、少しグレーになっているのが分かります。

放射状勾配パラメータの紹介です

楕円は、楕円形のグラデーションを使用していることを示します。使い方は以下の図をご覧ください。

// 上の画像のパラメータは、radial-gradient(ellipse,#ffffff, #6a6a6a) です。

つまり、色は白 #ffffff から灰色 #6a6a6a までの楕円形のグラデーションです。

下部 これは、楕円グラデーションの中心が下部にあることを意味します。具体的な効果については、次の図を参照してください。

// 上の画像のパラメータは、radial-gradient(ellipse at bottom,#ffffff, #6a6a6a) です。

さて、この時点でグラデーションは完成しました

ステップ2: ボックスシャドウが何百もの星を生成する仕組み

まず、3つの問題を解決する必要があります。1つ目は、lessを使用してループを記述する方法です。次のlessコードを参照してください(詳細な説明はコードの下にあります)。

2.1 lessでループを実装する方法

以下にいくつか例を挙げます。

.loop(@counter) @counter > 0 の場合 {
  .h@{カウンター} {
    パディング: (10px*@counter);
  }
  .loop((@counter - 1)); // 自分自身を再帰的に呼び出す}
div{
  .ループ(5);
}

//コンパイルして出力 div .h5 {
  パディング: 50px;
}
div.h4 {
  パディング: 40px;
}
div.h3{
  パディング: 30px;
}
div.h2{
  パディング: 20px;
}
div.h1{
  パディング: 10px;
}
  • .loop(@counter) when(@counter > 0) はlessの関数であり、ループ関数が定義されていることを意味します。
  • @counterは関数に渡される変数です
  • when(@counter > 0)は、変数@counterの値が0より大きい場合にこの関数が実行されることを意味します。
  • .loop((@counter - 1)) これは再帰呼び出しです

したがって、less がループを実装する方法は、定義された関数を再帰的に呼び出すことであると結論付けられます。

次に、2 番目の問題、つまり、less で JS 式を記述する方法を解決しましょう。

2.2 LessでJS式を書く方法

.loop(@counter) @counter > 0 の場合 {
  パディング: ~`@{counter} + Math.round(2.4)`;
  .loop(@counter - 1); // 自分自身を再帰的に呼び出す}
div{
  .ループ(2);
}

//次のコードを生成します div {
  パディング: 4;
  パディング: 3;
}

そこで、lessでjs式を使用するには、~で始めて、その式を``で囲むのがよいという結論に至りました。

次に、box-shadow プロパティを使用して何百もの星を生成するという 3 番目の問題を解決します。

2.3 ループを少なくしてbox-shadowプロパティに何百もの星を生成する方法

これらの星は実際には小さな四角い点です。まず 4 つの小さな四角い点を生成します。

// 
分割
{
	幅:10px;
	高さ:10px;
	ボックスの影: 10px 0px #9bcded、50px 0px #9bcded、10px 40px #9bcded、50px 40px #9bcded;
}

効果は以下のとおりです

ここでは、複数のbox-shadow値を使用して正方形を生成します。

// たとえば、次の属性 10px 0px #9bcded は、div 要素を基準として、x 軸の 10px と y 軸の 0px に #9bcded 色の小さな点があることを意味します。 // div 自体は幅 10px、高さ 10px の正方形であるため、そのボックス シャドウも正方形のボックス シャドウです: 10px 0px #9bcded、
幅:10px;
高さ:10px;

次に、less ループを組み合わせて、ボックスシャドウ上にさらに多くのブロック (星) を生成する必要があります。

// まず、パラメータ@nを持つミックスイン関数を定義します。条件は、関数内のコードが@n > 0の場合にのみ実行されることです。mixin(@n) when(@n > 0) {
    box-shadow+ : ~`Math.round(Math.random() * 2000) + 'px' + ' ' +Math.round(Math.random() * 2000) + 'px #FFF' `;
    .mixin((@n - 1));
 }

上記の関数は主にbox-shadowにあり、主に3つのパラメータが含まれています。

  • x軸に0から2000までのランダムな値を生成します(Math.round(Math.random() * 2000) + 'px')
  • y軸に0から2000までのランダムな値を生成します(Math.round(Math.random() * 2000) + 'px #FFF' `)
  • 色は#FFFです

mixin(100)を呼び出すと、2000 * 2000の背景に100個の白い四角形(星)が生成されます。

ステップ3: HTMLを組み合わせて星を生成する

以前のHTML構造は次のようになります

<div>
    <div id="start1"></div>
    <div id="start2"></div>
    <div id="start3"></div>
</div>

以下は、その一部です。

// start1 は、長さ 1 ピクセル、幅 1 ピクセルの星を 700 個生成します。これらは小さな星です。// 小さな星は遠くにある星を表し、大きな星は近くにある星を表すため、空間の感覚が生まれます。#start1 {
    .mixin(700);
    幅: 1px;
    高さ: 1px;
    アニメーション: animStar 50 秒線形無限;
    アニメーション遅延:-10秒;
}
// start2 は長さ 2px、幅 2px の星を 200 個生成します #start2 {
    .mixin(200);
    幅: 2px;
    高さ: 2px;
    アニメーション: animStar 100 秒線形無限;
    アニメーション遅延:-8秒;
}
// start3 は長さ 3px、幅 3px の星を 100 個生成します #start3 {
    .mixin(100);
    幅: 3px;
    高さ: 3px;
    アニメーション:animStar 150秒線形無限;
    アニメーション遅延:-5秒;
}
// アニメーション効果は以下のとおりです @keyframes animStar {
    { transform: translateY(0px) } から
    { transform: translateY(-2000px) } に変更
}

この記事は終了です。codepen にアクセスして、自分で効果を試すことができます。

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

<<:  良いデザインについて

>>:  docker を使用して crownblog プロジェクトを Alibaba Cloud にデプロイする方法

推薦する

MySQLデータのエクスポートとインポートに関する知識ポイントの簡単な分析

多くの場合、ローカル データベースのデータをエクスポートしたり、他のデータベースからデータをインポー...

Reactイベントバインディングの詳細な説明

1. 何ですかreactアプリケーションでは、イベント名はキャメルケース形式で記述されます。たとえ...

Vue+js 矢印をクリックして画像を切り替える

この記事の例では、矢印をクリックして画像を切り替えるVue + jsの具体的なコードを共有しています...

Javascript における非同期待機の詳細な理解

この記事では、async/await がすべての JavaScript 開発者にとって非同期プログラ...

mysql 8.0.15 winx64 解凍バージョン グラフィック インストール チュートリアル

システムをインストールした後、毎回いくつかのソフトウェアを再インストールする必要があります。ソフトウ...

プロキシはVue3データの双方向バインディングの原理を実現します

目次1. proxy と Object.defineProperty の利点2. プロキシ監視オブジ...

html+cssレイアウトの3つの方法(ナチュラルレイアウト/フローレイアウト/ポジショニングレイアウト)

1. 自然なレイアウト<br />レイアウトは変更せずに自動的に左揃えになります。 2....

Docker ポート マッピングと外部アクセス不可の問題

Docker コンテナはサービスを提供し、ポート 8888 をリッスンします。外部からアクセスできる...

jQueryをベースにカルーセル効果を実現する

この記事では、カルーセルマップの効果を実現するためのjQueryの具体的なコードを参考までに共有しま...

WeChat アプレットカスタムタブバーステップ記録

目次1. はじめに2. タブバーのスタイルをカスタマイズする3. カスタムタブバーと関連設定を導入す...

CSS3 カスタムスクロールバースタイル::webkit-scrollbar サンプルコード詳細説明

Windows のデフォルトのスクロール バー スタイルは見苦しく、プロジェクト内でスクロール バー...

CSS3はシームレスなスクロールと手ぶれ防止を実現します

質問画像とテキストのシームレスなスクロールは、一般的に携帯電話では良い効果をもたらしますが、一部のモ...

パズル効果を実現するネイティブ js

この記事では、パズル効果を実現するためのネイティブjsの具体的なコードを参考までに共有します。具体的...

JavaScript初心者がよく犯す間違い

目次序文undefined と null の混同紛らわしい数値の加算と文字列の連結戻り文の改行の問題...