emとremの違いって__

【完全保存版】emとremの違いを理解する

はじめに

cssで文字サイズを指定するには、2つの方法があります。

① px指定の絶対指定

② em/rem/%による相対指定

多くの方はpx指定による絶対指定が多いかと思います。

ほぼ問題にはなりませんが、案件で細かいところまで対応していると、実はpxだとブラウザによって微妙に表示サイズが異なる問題が起きます。

そのため、em/rem/%などによる相対指定を使うケースが多くなってきています。

ただ、emとremって言葉も似てるし、違いがよくわからないですよね。

なので、今回は分かりやすく解説していきます。

emは親要素のfont-sizeを基準にする

相対指定であるemは、親要素のfont-sizeを基準にします。

これはどういうことか、実際のコードを見たほうが早いので見てみましょう。

<p class="p-em">
 これは2em(64px)です
 <span class="span-em">これは0.5em(32px)です</span></p>
html {
 font-size: 32px;
}
/** em 指定 **/
.p-em {
 font-size: 2em; /* -> 64px; */
}
.span-em {
 font-size: 0.5em; /* -> 32px; */
}

この場合の関係を見てみます。

spanタグから見た時の親 👉 pタグのfont-sizeを基準 (font-size: 32px (64px x 0.5))

pタグから見た時の親 👉 htmlタグのfont-sizeを基準 (font-size : 64px (32px x 2))


これが実行結果です。

スクリーンショット 2020-02-27 01.02.30

rem(root em)はルート(一番上の親(html))要素のfont-sizeを基準にする

では全く同じことをremを使ってやってみましょう。

<p class="p-rem">
 これは2rem(64px)です
 <span class="span-rem">これは0.5rem(16px)です</span></p>
html {
 font-size: 32px;
}

/** rem 指定 **/
.p-rem {
 font-size: 2rem; /* -> 64px */
}
.span-rem {
 font-size: 0.5rem; /* -> 16px */
}

remを使うと、基準値が親とか関係なく、HTML要素のfont-sizeになるので、全て32pxを基準に考えられます。

よってm今回はこのようになります。

spanタグから見た時の親 👉 htmlタグのfont-sizeを基準 (font-size: 16px (32px x 0.5))

pタグから見た時の親 👉 htmlタグのfont-sizeを基準 (font-size : 64px (32px x 2))

スクリーンショット 2020-02-27 01.06.36

先程と違うのは、spanはpタグの子要素ですが、親のfont-sizeは関係なく、htmlのfont-sizeである32pxを基準に考えられているとこです。

結局emとremはどっちの方が良いの?

ときと場合によりますが、分かりやすいのはremです。

emを使うと、入れ子構造が深くなってきた時に、想定外のfont-sizeになってきたりします。

その時、どの親要素が影響してるのか?がわかりづらくなってくるので、原因調査に時間がかかったりするので、remの方がシンプルで分かりやすいです。

62.5%ってなに?

よく、こんな表記を見かけませんか?

html {
 font-size: 62.5%; /* -> 10px */ 
}

これは、ブラウザのデフォルトfont-sizeである、16pxを利用したテクニックです。

16pxの62.5%は10pxになりますが、こうすることで、以下の様にremで指定する時もpx指定する時と同じ感覚で、無駄な計算をせずに直感的に指定できるようになります。

16px > 1.6rem

32px > 3.2rem

という感じですね。

HTMLのfont-sizeを62.5%にしておいて、他のfont-sizeはrem指定。

が一番無難で分かりやすいですね!



実践編で利用するための基礎編はすべて無料公開してます。 基礎編のモチベーション向上のためにサポートして頂けるとめちゃくちゃ喜びます!! だいたい作業工数は1記事あたり4-5時間程度かけて【分かりやすい】【知識が身につく!】を意識して作っておりますので、今後も頑張っていきます!