HTML の各要素の上下のマージンを、それぞれの要素の margin-top
や margin-bottom
で設定していると、ちょっとした調整が全体のレイアウトの崩れにつながります。
Owl セレクタ(ふくろうセレクタ) と呼ばれている * + *
という CSS セレクタを利用すると、全要素のマージンをまとめて設定することができるので、サイト全体のレイアウトに一貫性を持たせることができます。
* + *
という指定は、ユニバーサルセレクタ (*
) と隣接セレクタ (+
) の組み合わせから成っており、要するに、連続する 2 番目以降の要素をすべて選択するという意味になります。
* + *
によって選択された要素の上マージン (margin-top
) を設定してやることで、要素間のマージンをまとめて設定できます。
下記の例では、main
要素直下に配置された、すべての要素間に 1rem
のマージンを設定しています(つまり、そのページのフォントサイズで1行分のマージン)。
* {
margin: 0; /* ブラウザ依存のマージンはリセット */
}
html {
font-size: 100%; /* ユーザの指定した表示サイズを尊重する */
line-height: 1.5;
}
main > * + * {
margin-top: 1rem; /* サイト全体で上下マージンを統一 */
}
main > * + h2,
main > * + h3,
main > * + h4,
main > * + h5,
main > * + h6 {
margin-top: 1.5em; /* ヘッダ要素の上マージンは広めに取る */
}
ただし、h2
や h3
などのヘッダの上マージンまで同じサイズになってしまうと、セクションごとのまとまりが分かりにくくなってしまいます。
そこで、ヘッダに関しては特別に 1.5em
のマージンを設定しています。
このマージンには、単位として rem
ではなく、em
を使用していることに注意してください。
em
を使用することで、ヘッダ自身のフォントサイズを基準として、1.5 行分のマージンが設定されることになります。
つまり、h2
要素のマージンの方が、h3
要素のマージンよりも大きくなるということです(h2
のフォントサイズの方が大きければですが)。