今回の概要と目標
CSS入門講座3回目は、いよいよ次回からプロパティをたくさん学習していくのですが、これからプロパティのことを学習する上で知っておいた方がいい 値の継承と初期値について学習しましょう。最終的には下記のように設定されたスタイルが、どのように表示されるかを判断できるようになりましょう。
継承プロパティと非継承プロパティ
CSSのプロパティは、 継承プロパティと 非継承プロパティに分類されます。
継承プロパティは、もしそのプロパティに値が指定されていない場合は、親要素の値を継承して設定されるプロパティで、非継承プロパティは、もしそのプロパティに値が指定されていない場合は、そのプロパティに定められている初期値が設定されるプロパティになります。
継承プロパティ
以前使ったcolor
プロパティは、継承プロパティになります。
仮に以下のようなHTMLがあったとします。
そして、body
要素にcolor
プロパティで文字の色を変更したとします。
すると、body
要素にしか文字の色を指定していないのに、その子要素であるp
要素や、さらにその子要素である、em
要素まで文字の色が変わります。
これは、p
要素や、em
要素はcolor
プロパティが指定されていない為、p
要素は、親要素であるbody
要素の文字の色を継承し、em
要素は、そのp
要素の色を継承して色が設定されたということになります。
このように継承プロパティでは、そのプロパティに値が指定されていない場合には、親要素の値を継承して設定されます。
ちなみに、以前から使っていたfont-size
プロパティも継承プロパティになります。
非継承プロパティ
要素に境界線を引くことができるborder
というプロパティがあるのですが、このborder
プロパティは、非継承プロパティになります。
例えば先ほどのHTMLにborder
プロパティを使って、
solid(実線)
という境界線を指定するCSSを書いたとします。
この場合は、セレクタとして指定したbody
要素にのみ境界線が引かれており、p
要素の周りや、その中にあるem
要素自体の周りには境界線が引かれていません。
これは、今回使ったborder
プロパティには
none(境界線なし)
という初期値があり、 border
プロパティを指定していない、p
要素や、em
要素には、暗黙的にこの初期値が設定されているからです。
このように非継承プロパティでは、そのプロパティに値が指定されていない場合には、「初期値」が設定されます。
なお、非継承プロパティであっても、「
inherit
」という値を指定すると、その要素は親要素の値を継承することができます。(「inherit
」はどのプロパティでも指定可能)
初期値の扱い
CSSの各プロパティには「 初期値」が割り当てられています。
例えば以前使った、文字の大きさを変更するfont-size
というプロパティの初期値は「
medium」という値が割り当てられています。
この「medium」の大きさブラウザで設定されている基準のフォントサイズになるのですが、一般的なブラウザの初期値では
16px
となります。
ただこの初期値がどのように使われるかは、そのプロパティが継承プロパティか非継承プロパティなのかで変わります。
-
継承プロパティの場合の初期値は、ルート要素(
html
要素 )に対してのみ利用される - 非継承プロパティの場合の初期値は、全ての要素に対して利用される
という感じです。
例えば先ほど例に題したfont-size
プロパティは継承プロパティなので、この初期値が適用されるのはルート要素(ドキュメントの最も親要素)であるhtml
要素のみということです。
つまり、html
要素 にfont-size
プロパティを指定していなかった場合は、 html
要素に、初期値である「
medium
」が適用され、その子要素たちはこの「medium
」を継承して 16px の大きさになっています。
もちろん、html
要素 にfont-size
プロパティを使って文字サイズを変更した場合はその大きさとなり、子要素たちもその変更された値を継承します。
なお、継承プロパティであっても、「
initial
」という値を指定すると、その要素に初期値を指定することができます。(「initial
」はどのプロパティでも指定可能)
練習問題
以下のHTMLとCSSを見て、値の継承と初期値の扱いについての理解度を確認してみましょう。なお、解けた問題は問題文の横のチェックボックスをオンにしましょう。
-
font-size
: 文字の大きさを変更するプロパティ。
初期値は「medium
」で、値を継承する -
border
: 境界線を引くプロパティ。
初期値は「none(なし)
」で、値を継承しない
まとめ
値の継承と初期値の扱いについては理解できましたか?
- 継承プロパティは、プロパティの指定がない場合、親要素の値を継承する
- 非継承プロパティは、プロパティの指定がない場合、初期値が指定される
- 初期値がどのように使われるかは、継承プロパティと非継承プロパティとで変わる