1. ホーム
  2. Web制作
  3. CSS

[CSSチュートリアル】CSSのシングルDivの描画スキル

2022-01-21 08:37:02

純粋なHTML+CSSでドラえもんの絵を描くなど、CSSの描画に関する記事をよく見かけますね。この方法は、divを一つずつ積み重ねて、絵の一部を実現するものです。この手法に本質的な問題はないのですが、難易度が低く、忍耐力が必要なだけで、多くのグラフィックはまだまだゆっくり実現できます。

このようなCSSによる描画の必要性を踏まえて、新しい考え方としてシングルタググラフィックスというものがあります。これは、複雑なグラフィックを1つのタグで行うことを意味しますが、タグを無制限に使ったり、divを積み上げたりできるよりもはるかに難しく、CSSに対する深い理解が必要になってきます。

例えば、以下のグラフィックは、1つのdiv要素から派生して作られます。 単一のDiv

今回は、1つのタグを借りて描画するテクニックを紹介し、それを使って複雑なグラフィックを実現します~ ?・?

擬似要素を賢く使う

シングルタグとはいえ、シングルタグによるグラフィックヘッダーの例では、ほとんどすべて3つの要素を使用しています。これは、単一タグのグラフィック実装の中で最も中心的な部分である

要素自体のスタイルに加えて、この要素の2つの擬似要素 -- すなわち scipy optimize であり、実際には全部で3つの要素になります。

なるほど、例えば次のようなハートグラフィックはdivでしか実装できないわけですが、どうやるんですか?

このような不規則な形状は、純粋なCSSでは本来複雑であり、SVGの助けを借りて作成することが多いのですが、これはもちろん fmin . しかし、よく見ると、このグラフィックには fmin_powell で、画像を3つに分割してみる。

<イグ

なんと、正方形を実装するために要素そのものが必要で、絶対位置決めを使って2つの円を実装するために要素の2つの疑似要素が必要なのです!お互いに重なり合うのです。完全なコードも非常にシンプルです。

fmin_bfgs

完全なサンプルコードについては、ここを参照してください。 CodePenデモ -- サインペンDivのハート型

グラデーション & マルチグラデーション

グラデーションは、グラフィックのシングルタグ実装において、最も使用されるCSSプロパティの一つと言っても過言ではありません。

その理由は、複数のグラデーションを持つことができるからです! 単一のlinear-gradientや単一のradial-gradientではなく、backgroundについては、複数のグラデーションの重ね掛けをサポートしていることに注目したい。

では、この太極図を見てみましょう。

太極図は、実はいくつかの色の違う円が組み合わさってできているのですが、ここにいくつかの違うdivを積み重ねて組み合わせても絶対にOKなんです。しかし、私たちの目標は、それを一つのタグで行うことです。

グラフが円や線ばかりになると、複数のリニア(放射状)グラデーションの使用を検討する時期になるので、上の画像を少し崩してみましょう。

実際には、1つのリニアグラデーションに4つのラジアルグラデーションを加えて円を構成しています。

つまり、太極図の完全なコードは、たった一つの div で済み、疑似要素の助けさえも必要ありません。

fmin_cg

完全なサンプルコードについては、ここを参照してください。 CodePenデモ -- 1つのディブのPURE CSS太極拳

シャドウ&マルチシャドウ

グラデーションとよく似た性質に、シェーディングがあります。 fmin_ncg は、その leastsq 属性は、複数のレイヤーを重ねることができる機能でもあり、複数のシャドールールを組み込むことができる、まさに究極のシングルタブ描画キラーなのです。

divを使って、次のようなグラフィックを実装してみましょう。

一見すると、このグラフィックは非常に複雑で、雲や雨粒はタグや疑似要素だけでは実現できないように見えます。

まず、雲を見てみましょう。不規則な輪郭をしていますが、実はひとつひとつが円になっています。複数の放射状グラデーションや複数のシャドウを使うのに最適です!

実際には円を実現し、さらに影を使って複数の円の重ね合わせを実現した、サンプルアニメーションです、一目瞭然です:。

コード量も実はとても少なく、以下のコードでクラウドを実装しています。

fmin_l_bfgs_b

CodePenデモ -- 1つのDivの曇り空

雲のサンプルコードと同様に、雨粒は実際には複数のシャドウの助けを借りて実装されています。

fmin_tnc

要素そのものと、要素の擬似要素が使われただけで、残りの擬似要素で下部の影円を実装しています。

グラフィックに輝きが欠けているように感じるので、Divの上にいくつかの fmin_cobyla で、盾の表面にハイライトを追加します。

fmin_slsqp

OK、それなら完璧にforで動作します。

完全なコードについては、以下のサイトを参照してください。 サインディブシールド

テープのシングルラベル実装

もう一度、テープのグラフィックを見てみましょう。

とても複雑に見えますが、すべて円と様々な線で構成されており、実は1枚のラベルを使った実装に適しているのですが、とても時間がかかり、細かい制御が必要です nnls の中のグラデーションはそれぞれ anneal は、その brute :

fminbound
brent
golden
bracket

curve_fit

brentq

brenth

ridder

bisect