[CSSチュートリアル】カラフルで知的なシャドウ効果を実現するCSS
背景
前景要素から特定の色を継承したシャドウ効果を作成する方法をご存知ですか?この記事を読んで、その方法を見つけてください。
先日、ホームセンターの前を通りかかりました(
Home Depot
ホームデポは、世界有数の住宅建築用品の小売業者)そこで、彼らが販売しているスマートライトを大々的に展示していたのです。
????
そのひとつが、テレビの後ろに設置する一連の電球で、下の画像にあるような、テレビの前景画面に表示される色に近い色の光を投射するものです。
テレビの後ろで何が起こっているのかに注目してください。テレビ画面の手前に表示されている色は、照明によって色のついた陰影のある背景に投影されています。画面の色が変わると、背景の投影色も変わるのです。実にクールでしょう?
これを見た後、当然ながら最初に頭に浮かんだのは、このように
web
開発技術により、前景色を模倣したカラフルな影を作ることができるのでしょうか?結論から言うと、前景色を模したカラフルな影を作るには
CSS
が、この効果を得ることは完全に可能です。今回は、その方法について見ていきましょう。
やってみよう
実現させる
次の段落で説明するように、一見すると
CSS
スマートなカラーシャドウを作るのは大変な作業に見えるかもしれませんが、段階を踏んで難しい部分を小さくしていくと、すべてが理解しやすく、消化しやすくなることがわかります。次のセクションでは、下図のような例を作成します。
見えているのは、お寿司
????
の画像に、前景色に対応した影が後ろに付いています。動いていることを強調するために、影には脈打つようなアニメーションの効果が加えられています。この効果的な例を使って、次に
HTML
と
CSS
を使えば、すべてに命が吹き込まれます。
画像を表示する
寿司を表示する場合
????
の
HTML
以下は特別なことではありません。
<div class="parent">
<div class="colorfulShadow sushi"></div>
</div>
私たちは、親
div
要素
.parent
を含み、子要素
.suchi
を表示するために使用されます。
????
. これをインスタンス化するために、背景画像を
????
は、その
.sushi
要素に対する具体的なスタイルルールは以下の通りです。
.sushi {
margin: 100px;
width: 150px;
height: 150px;
background-image: url("https://www.kirupa.com/icon/1f363.svg");
background-repeat: no-repeat;
background-size: contain;
}
上記のスタイル・ルールでは
div
から
150 * 150
の幅と高さのピクセルを設定し
background-image
と関連する属性で、今実現した結果を表示すると、以下のようなものになります。
シャドウの作成
さて、お寿司を表示したところで
????
の画像で、より興味深いのは影を定義することです。を指定する副疑似要素を使用します。
::after
を行い、影を定義します。
3
ひとつだけ。
-
画像のある場所に直接設置
div
画像に続く - 親要素と同じ背景を継承した背景画像です。
-
カラフルな
drop-shadow
シャドー効果
上記3つの機能は、以下の2つのスタイルルールで実装されています。
.colorfulShadow {
position: relative;
}
.colorfulShadow::after {
content: "";
width: 100%;
height: 100%;
position: absolute;
background: inherit;
background-position: center center;
filter: drop-shadow(0px 0px 10px rgba(0, 0, 0, 0, 0.50)) blur(20px);
z-index: -1;
}
この実装をざっと見て、それぞれのプロパティと対応する値に注意してください。最も注目すべきなのは
background
属性と
filter
属性があります。
background
の値は
inherit
つまり、親要素の背景の値を継承します。
background: inherit;
filter
属性は、2つのフィルタ値を定義する。
drop-shadow
と
blur
filter: drop-shadow(0px 0px 10px rgba(0, 0, 0, 0, 0.50)) blur(20px);
drop-shadow
私たちの
50%
フィルタは
blur
透明度のある黒い影
20px
フィルターが設定されるのは、要素
????
ぼかしの効果です。これら 2 つのフィルタの組み合わせは、最終的にカラフルな影を作り出します。これら 2 つのスタイル ルールが有効な場合、次のような画像が寿司に表示されることがわかります。
CSS
画像の後ろにある色のついた影。
<イグ
ここまでで、だいぶ達成できました。完全なものにするために、ズームインとズームアウトのアニメーションを使ったカラフルな影が欲しい場合は、次のような追加の
.colorfulShadow {
position: relative;
}
.colorfulShadow::after {
content: "";
width: 100%;
height: 100%;
position: absolute;
background: inherit;
background-position: center center;
filter: drop-shadow(0px 0px 10px rgba(0, 0, 0, 0, 0.50)) blur(20px);
z-index: -1;
/* animation time!
animation: oscillate 1s cubic-bezier(.17, .67, .45, 1.32) infinite alternate;
}
@keyframes oscillate {
from {
transform: scale(1, 1);
}
to {
transform: scale(1.3, 1.3);
}
}
を使えば実現できます。
CSS transition
ループするアニメーション効果を使わずに、インタラクティブ性を高めたい場合は
hover
のように、シャドウの挙動を変えることができます。
HTML
の操作で行うことができます。強調すべき難点は、擬似要素はあたかも
JavaScript
を作成したり
CSS
要素は、動的に作成される要素と同じですが、唯一の違いは、この要素は完全に
CSS
が作成されました!
まとめ
この擬似要素によって
HTML
で通常見られる擬似要素を作成します。
JavaScript
と
HTML
要素の作成作業をドメイン内で行います。カラフルなスマートシャドウの場合、親要素が背景画像のセットを持つことに依存しています。そのため、親の背景の詳細を継承し、ぼかしや投影効果を設定する子要素を簡単に定義することができます。これはとても良いことで、コピー&ペーストの作業も軽減されますが、この方法はあまり柔軟ではありません。
このようなシャドウを、背景画像だけでない空の要素に適用したい場合はどうすればいいのでしょうか。例えば
JavaScript
ボタンやコンボボックスのような要素で、このシャドウ効果を適用したいのですが?一つの解決策は
DOM
をコピーします。
DOM
を対応する要素の中に入れて、それを前景要素の下に置いて、フィルターを適用する、というのも一つの方法です。この方法でも効果は得られますが、ちょっと繰り返しが多いかなという気がしています。
JavaScript
要素は、身震いするほど重い処理です。さらに悪いことに、この
JavaScript
は、提供したい視覚的な意図をレンダリング対象のビットマップに変換する機能がないのです! ????
この記事は翻訳です。オリジナルは、こちらをご覧ください。
https://www.kirupa.com/html5/creating_colorful_smart_shadows.htm
この記事のアドレス
https://www.cnblogs.com/dragonir/p/14758359.html
著者:ドラゴニア
カラフルな、インテリジェントな影を達成するためにCSSに関するこの記事はここに導入され、より関連する影の内容を達成するためにCSSは、スクリプトホーム以前の記事を検索してくださいまたは次の関連記事を閲覧を継続、私はあなたが将来的にもっとスクリプトホームをサポートして願っています!.
関連
-
[CSSチュートリアル】よくある2D変換を5つ実現するCSS
-
[CSSレイアウト例】float(フロート)、position(ポジション)プロパティの差分によるCSSレイアウト
-
[CSSチュートリアル】CSSで実現するイメージマッピングメソッド
-
[CSSレイアウト例】CSSで中央揃えを実現する方法N種
-
[css3]Webコードのグレーまたはブラックモードを実現するCSS3フィルター(filter)
-
[css3] css3の擬似クラスについて、共通使用前と共通使用後で説明する。
-
[css3]css3 elastic box flexによる3カラムレイアウトの実装。
-
[css3】cssのmarginとvertical marginの重なりの値について
-
[css3]css3 use transform to create walking 2D clock.
-
[CSSチュートリアル】CSSマージンの重なりと解決策を詳しく探る
最新
-
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スコープ(スタイル分割)の使い方まとめ
-
[CSSチュートリアル】Chromeのタブバーを実装するためのCSSのコツ
-
[CSSチュートリアル】CSSのシングルDivの描画スキル
-
[CSSチュートリアル]cssのbackgroundとborderタグの例 詳細
-
[CSSチュートリアル】クールなネオン効果を実現するピュアCSS(デモあり)
-
[CSSチュートリアル】CSSカウンターを使った数字の並びの美化方法
-
[CSSチュートリアル】子要素のmargin-topが親要素の移動を引き起こす問題解決
-
cssにおけるpx, em, rem, ptの特徴や違い、変換の詳細について
-
[CSSチュートリアル]実装ステップの吸引上部と下部のH5レイアウトのための純粋なCSSソリューション
-
[css3]テキストタイポグラフィのためのCSS3テキストオーバーフローソリューション