Unnamed Notes

まーぼーです

縦方向の余白

#website

このウェブサイトの縦方向の余白は、行間の高さを単位にして組み立てている。行間の高さを、文字の大きさによらず一定にした上で、要素間の余白がその整数倍で表示されるようにしている。

body {
    font-size: 1rem;
    line-height: calc((16 + 12) / 16);
}

h1 {
    font-size: calc(23 / 16 * 1em);
    line-height: calc((23 + 12) / 23);
}

figcaption {
    font-size: calc(13 / 16 * 1em);
    line-height: calc((13 + 12) / 13);
}

要素間の余白は、実際に表示される結果を意図した大きさにしたいので、内容が文字の要素には line-height 分を差し引いた margin を指定したい。

p {
    margin-bottom: calc((12 * 3 - 12 / 2) / 16 * 1em);
    margin-top: calc((12 * 3 - 12 / 2) / 16 * 1em);
}

輪郭がはっきりした要素は line-height 分を差し引く必要がないので、欲しい margin をそのまま指定したい。

figure,
pre {
    margin-bottom: calc(12 * 3 / 16 * 1em);
    margin-top: calc(12 * 3 / 16 * 1em);
}

これらを両立させるために、どの要素も表示上の margin-bottom をゼロにして辻褄を合わせている。

p {
    margin-bottom: calc(12 / 2 / 16 * 1em * -1);
    margin-top: calc((12 * 3 - 12 / 2) / 16 * 1em);
}

figure,
pre {
    margin-bottom: 0;
    margin-top: calc(12 * 3 / 16 * 1em);
}

文字自体も多少の余白を持っているので、文字が大きいほど表示上の余白は大きくなるが、実際に使われるフォントは OS やブラウザーによっても違うので、そこまでは気にしないことにしている。