フレームごとに再描画したり、ページのパフォーマンスに深刻な影響を与えたりすることなく、CSS で box-shadow プロパティをアニメーション化するにはどうすればよいでしょうか?答えは「達成できない」です。 box-shadow でのアニメーション化された変更はパフォーマンスに悪影響を与える可能性があるためです。
上記の問題を解決する簡単な方法を次に示します。再描画を最小限に抑えたい場合は、擬似要素を作成し、その不透明要素をアニメーション化して、1 秒あたり 60 フレームでアニメーション化して、移動オブジェクトと同じ効果を模倣する必要があります。
例
この例をよく見て、そこで使用したさまざまなテクニックを比較してください。 2 つの効果は同じに見えると思いますか?唯一の違いは、影を適用してアニメーション化する方法です。左側の例では、マウスホバー時にボックスシャドウをアニメーション化します。右側の例では、::after を使用して疑似要素を追加し、それに影を設定し、要素の不透明要素をアニメーション化します。
開発ツールを使用してこれらのいずれかを試してみると、次のようなものが表示されるはずです (緑色のバーは描画されていることを意味し、少ないほど良いです):
右側にカーソルを置いたカード (擬似要素の不透明度でアニメーション) と比較して、左側のカード (ボックスの影でアニメーション) をマウスオーバーすると、より多くの再描画があることが明らかです。
なぜこのような効果が見られるのでしょうか? CSS プロパティのうち、 opacity と transform など、アニメーション化されたときにフレームごとに一定の再描画がトリガーされないものはほとんどありません。再描画 (ブラウザが行う必要がある作業) を最小限に抑えるために、アニメーションではこれら 2 つのプロパティのみを変更することを推奨します。
他のレイアウト スタイルはさておき、これが これら 2 つのテクノロジーの主な違い ︰
/* The slow way */.make-it-slow { box-shadow: 0 1px 2px rgba(0,0,0,0.15); transition: box-shadow 0.3s ease-in-out:}/* 鼠标悬停实现更大阴影的过渡 */.make-it-slow:hover { box-shadow: 0 5px 15px rgba(0,0,0,0.3);}/* The fast way */.make-it-fast { box-shadow: 0 1px 2px rgba(0,0,0,0.15);}/* 设置更大的阴影并将之隐藏 */.make-it-fast::after { box-shadow: 0 5px 15px rgba(0,0,0,0.3); opacity: 0; transition: opacity 0.3s ease-in-out:}/* 鼠标悬停时实现更大阴影的过渡显示 */.make-it-fast:hover::after { opacity: 1;}
詳細な内訳
上記に基づくそれはさておき、上の例で示した 3D カード効果を作成する方法を見てみましょう。最初のステップは、上で行ったのと同じように、シャドウを擬似要素に転送することです。また、作成したすべてのカードにレイアウト コードを追加しましょう:
/* 创建一个简单白色盒子,并添加阴影 */.box { position: relative; display: inline-block; width: 100px; height: 100px; border-radius: 5px; background-color: #fff; box-shadow: 0 1px 2px rgba(0,0,0,0.15); transition: all 0.3s ease-in-out;}/* 创建隐藏的伪元素 *//* 最终样式包含阴影 */.box::after { content: ''; position: absolute; z-index: -1; width: 100%; height: 100%; opacity: 0; border-radius: 5px; box-shadow: 0 5px 15px rgba(0,0,0,0.3); transition: opacity 0.3s ease-in-out;}
これら 2 つの要素をアニメーション化したいため、transition 要素を .box と .box::after に追加していることに注意してください。 .box と .box::after への不透明要素
これらのスタイルは、微妙なボックスシャドウ スタイルを持つ白いボックスを示しています。ここでは、 .box::after のシャドウは完全に非表示になっており、ボックス効果と相互作用することはできません。
デモと同じ効果を作成するには、次に行う必要があるのは、マウスが .box 上にあるときに拡大効果を作成し、擬似要素と影にフェードを実装することです。
/* 放大盒子 */.box:hover { transform: scale(1.2, 1.2);}/* 伪元素更大阴影的淡化 */.box:hover::after { opacity: 1;}
とにかく、これは、さまざまなブラウザーの互換性のあるスタイルといくつかの追加のカスタム イージング効果を含むすべての CSS スタイルです:
.box { position: relative; display: inline-block; width: 100px; height: 100px; background-color: #fff; border-radius: 5px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); border-radius: 5px; -webkit-transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1); transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);}.box::after { content: ""; border-radius: 5px; position: absolute; z-index: -1; top: 0; left: 0; width: 100%; height: 100%; box-shadow: 0 5px 15px rgba(0, 0, 0, 0.3); opacity: 0; -webkit-transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1); transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);}.box:hover { -webkit-transform: scale(1.25, 1.25); transform: scale(1.25, 1.25);}.box:hover::after { opacity: 1;}
適用された box-shadow を使用するだけと比較すると、明らかにここです。同じアニメーション効果を実現するために多くの CSS が使用され、パフォーマンスが向上しました。なぜわざわざ?
デスクトップがボックス シャドウ アニメーションを問題なく処理できるとしても、携帯電話もおそらく問題なく処理できません。しかし、より複雑なレイアウトに取り組むと、デスクトップに症状が現れ始めることがあります。
トランジションとアニメーションにのみ変換要素と不透明度要素を適用し続けると、最高のパフォーマンス、つまり最高のユーザー エクスペリエンスが達成されます。
この記事は、@Tobias 氏の「How to animate "box-shadow" with Silky Smooth Performance」を基に翻訳したものであり、翻訳が不十分な場合や、翻訳内容に独自の解釈が含まれています。間違っています 同僚にアドバイスを求めてください。この翻訳を転載したい場合は、英語の出典を明記してください: http://tobiasahlin.com/blog/how-to-animate-box-shadow/。
Jingzi
現役学生、コンピューターサイエンスを専攻する学部生。積極的で笑いが大好きな女の子。フロントエンドが大好きで、他の人とコミュニケーションしたり共有したりするのが好きです。自分の心の中の自分を自分の努力で実現したいと思っています。 Weibo: @京-如秋叶

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。1。HTMLは、Webページ構造を定義し、2。CSSはWebページスタイルを制御し、3。JavaScriptは動的な動作を追加します。一緒に、彼らは最新のウェブサイトのフレームワーク、美学、および相互作用を構築します。

HTMLの将来は、無限の可能性に満ちています。 1)新機能と標準には、より多くのセマンティックタグとWebComponentsの人気が含まれます。 2)Webデザインのトレンドは、レスポンシブでアクセス可能なデザインに向けて発展し続けます。 3)パフォーマンスの最適化により、応答性の高い画像読み込みと怠zyなロードテクノロジーを通じてユーザーエクスペリエンスが向上します。

Web開発におけるHTML、CSS、およびJavaScriptの役割は次のとおりです。HTMLはコンテンツ構造を担当し、CSSはスタイルを担当し、JavaScriptは動的な動作を担当します。 1。HTMLは、セマンティクスを確保するためにタグを使用してWebページの構造とコンテンツを定義します。 2。CSSは、セレクターと属性を介してWebページスタイルを制御して、美しく読みやすくします。 3。JavaScriptは、動的でインタラクティブな関数を実現するために、スクリプトを通じてWebページの動作を制御します。

htmlisnotaprogramminglanguage; itisamarkuplanguage.1)htmlStructuresandformatswebcontentusingtags.2)ItworkswithcsssssssssdjavascriptforInteractivity、強化を促進します。

HTMLは、Webページ構造の構築の基礎です。 1。HTMLは、コンテンツ構造とセマンティクス、および使用などを定義します。タグ。 2. SEO効果を改善するために、などのセマンティックマーカーを提供します。 3.タグを介したユーザーの相互作用を実現するには、フォーム検証に注意してください。 4. JavaScriptと組み合わせて、動的効果を実現するなどの高度な要素を使用します。 5.一般的なエラーには、閉じられていないラベルと引用されていない属性値が含まれ、検証ツールが必要です。 6.最適化戦略には、HTTP要求の削減、HTMLの圧縮、セマンティックタグの使用などが含まれます。

HTMLは、Webページを構築するために使用される言語であり、タグと属性を使用してWebページの構造とコンテンツを定義します。 1)htmlは、などのタグを介してドキュメント構造を整理します。 2)ブラウザはHTMLを分析してDOMを構築し、Webページをレンダリングします。 3)マルチメディア関数を強化するなど、HTML5の新機能。 4)一般的なエラーには、閉じられていないラベルと引用されていない属性値が含まれます。 5)最適化の提案には、セマンティックタグの使用とファイルサイズの削減が含まれます。

webdevelopmentReliesOnhtml、css、andjavascript:1)htmlStructuresContent、2)cssStylesit、および3)Javascriptaddsinteractivity、形成、

HTMLの役割は、タグと属性を使用してWebページの構造とコンテンツを定義することです。 1。HTMLは、読みやすく理解しやすいようなタグを介してコンテンツを整理します。 2。アクセシビリティとSEOを強化するには、セマンティックタグなどを使用します。 3. HTMLコードの最適化により、Webページの読み込み速度とユーザーエクスペリエンスが向上する可能性があります。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

ドリームウィーバー CS6
ビジュアル Web 開発ツール

WebStorm Mac版
便利なJavaScript開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

メモ帳++7.3.1
使いやすく無料のコードエディター
