Bodyタグにスタイルを適用すると、ページ全体に適用されるため、
body { font-family: Verdana }
ページ全体に適用されます。これは、
* {font-family: Verdana}
これはすべての要素に適用されるため、同じ効果があるように見えます。
最初の例ではスタイルがページ全体の1つのタグ、本文に適用されるのに対し、2番目の例ではフォントが個々のhtml要素に対して適用されるという原則を理解しています。私が求めているのは、それを行うことの実際的な違いは何か、意味は何か、そして相互に使用する理由、状況、またはベストプラクティスは何か、ということです。
1つの副作用は確かに速度です(+1ロブ)。機能の面でどちらか一方を選択する実際の理由に最も興味があります。
CSSセレクターのこれら2つの選択の機能的な違い...(私の見解)
ボディ
ユニバーサルセレクタ*(すべての要素)
提案
このようなものを試してください
body { font-family: Verdana }
table { font-family: Arial }
に対して
* { font-family: Verdana }
table { font-family: Arial }
そして、どのスタイルがテーブルのセルに適用されているかを確認します。
cascadingスタイルシートを扱っている場合、「ドキュメント全体に適用」と「ドキュメントのすべての要素に適用」には違いがあります。
カスケードスタイルを本文に適用すると、タグで上書きされるまで、本文内のすべてのタグに適用されます。次に、上書きされたスタイルがそのタグ内のすべてのタグに適用されます。
ただし、マージンやパディング(通常は意味をなさない場所)など、カスケードされないいくつかのスタイルがあります。これらは特定のタグにのみ適用でき、ワイルドカードが役立つ場合があります(まれですが)。
ほとんどの非カスケードスタイルも、継承の値を持っています(例:margin: inherit
)は、「親タグの値を取る」ことを意味します。
完全な詳細を忘れましたが、*セレクターを使用すると、ブラウザーがCSSを解析してスタイルを適用するときにすべての要素が評価されるため、パフォーマンスが低下します。 iirc、この場合、親のみにフォントを設定すると、要素ごとに1つの参照が作成され、追加の作業は必要ありません。
他にもいくつか問題がありますが、繰り返しますが、すべてを思い出すことはできず、何年も*使用していません。
他の人が述べたように、body { font-family: Verdana }
は、すべての親が最終的にプロパティのフォームを継承するように、親からfont-style
プロパティinheritである要素のみにフォントVerdenaを選択しますbody
要素、および* {font-family: Verdana}
は、フォントVerdenaをall要素に選択します。違いを例で説明します:
ボディセレクターを使用:
body
{
font-family: courier;
}
<p> This is paragraph with courier font </p>
<form>
<label for="X">Please type inside me: </label><input type="text" naem="X" value="Not Courier :(">
</form>
ユニバーサルselelctorを使用*
:
*
{
font-family: courier;
}
<p> This is paragraph with courier font </p>
<form>
<label for="X">Please type inside me: </label><input type="text" naem="X" value="Courier :)">
</form>
<input>
要素はフォントスタイルをまったく継承しないため、フォームに入力したものはすべて、ユーザーエージェントスタイルシートのデフォルトのフォントスタイルを取得するので、サンプルのcssおよびhtmlコードを使用してください。 。 2番目の例では、ユニバーサルセレクター*
は、input
要素を含むすべての要素のフォントスタイルを明示的に設定します。
優れたCSS設計の一般的なガイドラインは、できるだけ具体的にすることですが、それ以上ではありません。
したがって、あなたの例では、スタイルをbody要素に適用することはできるだけ具体的であり、「*」セレクターよりも確かに具体的です。