CSSの「box-sizing: border-box;」の設定をするにあたり
参考書によって、セレクタを「*」とするものと、「html *」とするものとがありました。
「」と記載されていたところでは、
『「box-sizing: border-box;」は、全体に設定すべきものなので「」にする』
とあり、
「html 」と記載されていたところでは、
『「」は、古いバージョンに対応していない場合があるので一般的に「html *」に設定する。「head」タグには影響がないので心配なし』とありました。
ここまで来て、疑問が1点出たのですが、セレクタを「body」にしてはいけないのでしょうか。
ご回答いただけると幸いです。
全ての要素に指定したい時、という要件でよろしいでしょうか。
それとも、bodyのみに適用でいいのでしょうか。
言葉足らずですみません。
『「box-sizing: border-box;」の性質上、全体に指定する』と受け取れる記載がどちらにもありました。
全体に設定するのであれば、セレクタを「*」に設定するというのはわかるのですが、
『「html *」で設定するのだが、「head」には影響がない』
→『「body」に影響がある』と解釈しました
ということは、「html *」=「body」にはならないのでしょうか。
↓の様な考えをしました。
<html>
<head>~</head>
<body>~</body>
</html>
とした際
<head>~</head>
には影響がない…
<body>~</body>
には影響がある
→ということは、セレクタ「body」に設定すれば良いのではないか?と疑問に思ったのです
>『「*」は、古いバージョンに対応していない場合があるので一般的に「html *」に設定する。「head」タグには影響がないので心配なし』とありました。
この記載ってどこにありました?
headはCSSでコントロールする要素ではないからです。
(つまり必要ない)
質問者さんの意図を反映するなら、
body,
body * { box-sizing: border-box; }
と、bodyと、body内の全ての要素に対して適用すればいいかと。
その記事の筆者は、それが冗長だから、
headには影響ないし、html *でいんじゃね?って意図もあるかと。
参考書の著作者さんに質問した際の回答文からの抜粋です。
@質問者さん
ありがとうございます。
miyabi_takatsuk さん
つまり…継承できないものについて、
「html *」=「body」+「body *」ということになり、
CSSに書く際、手間を考慮して「html *」でいいんじゃね?
ってことでしょうか。
> 「html *」=「body」+「body *」
は少し違います。
"html *"は、"html内の全ての子要素"というセレクタになります。
つまり、"head"も含まれます。
しかし、"head"はそもそもCSSを適用させる要素ではないため、適用されても表示に影響がないため、
"body含めた全ての要素"、という意図で、"html *"でいい、となります。
質問者さんの疑問は、headを含めなくていいなら、bodyでいいじゃないか、って考えってことですよね?
ですが、"body"では、子要素には適用されませんし、
"body *"では、"body"自体には適用されません。
なので、意図を反映させるには、
"body,body *"、となるわけです。
それが冗長だから、"head"には効いても問題ないから、
"html *" でいいだろう、となります。
「継承される」or「継承されない」がキーになると。
例えば、「継承される」ものならば、『body』に設定すれば良いが、
「継承されない」ものならば、『*』や『html *』や『body と body *』に設定すべし
との理解でよろしいでしょうか。
(何度もすみません)
> 「継承される」or「継承されない」がキーになると。
今回の質問に関しては、そこがキーになるで合っています。
> 例えば
「表示に関わる全ての要素に適用したい」のであれば、その理解で大丈夫です。
継承されるプロパティの代表としては、
"font-size"がありますが、
これは、bodyに対してだけ効かせれば、
bodyと、body内の全ての要素に適用されます。(継承される)
他にも、いくつか、継承される、されないプロパティは各々ありますので、
やっていく中で、調べたりして、勉強されるとよいかと。
ご回答ありがとうございます。
「継承」について、勉強になりました。
ひとつ、教えていただければと思います。
『「表示に関わる全ての要素に適用したい」のであれば』とは、それ以外にどのようなパターンが考えられるのでしょうか。
継承なしのプロパティを、
bodyのみに効かせたい時などです。
paddingや、marginは割と指定する時があります。
また、positionとか。
miyabi_takatsukさん
ありがとうございます!
ベストアンサーを…と思ったら、このスレッド、質問欄のため設定できません!
あ、よろしければ、私の既回答にBAいただければと。
回答の内容に、上記やりとりの内容も凝縮されていると思うので。
継承の部分も回答に含めますね。
回答2件
あなたの回答
tips
プレビュー