#3 REMsとEMs
4525 ワード
rem
またはem
のような相対単位の使用は、ウェブページレイアウト(typography)のベストプラクティスの1つである.どちらを使うべきかは様々な論争が続いている.次の記事では、この2つの相対単位rem,em、およびモジュールコンポーネントで使用する方法について詳しく説明します.
一.EMとは
1.font-sizeの値を設定する
セレクタの
font-size
属性が20 pxの場合、1em = 20px
h1 { font-size: 20px } // 1em = 20px
p {font-size: 16px} // 1em = 16px
Em単位はfont-sizesを宣言するのに使えますが、次のような状況はどういう意味ですか?
h1 { font-size: 2em } // h1 ?
h 1フォントサイズを計算するには、h 1の親要素を表示する必要があります.親要素が
html
(デフォルトのフォントサイズは16 px)であると仮定すると、h 1フォントサイズは:16 px * 2 = 32px
、すなわち:html { font-size: 16px }
h1 { font-size: 2em } // 32px
これは可能ですが、これは良い考えではありません.これはユーザーブラウザの設定を書き換えるので、
percentage
値を選択することができます.html { font-size: 100% } // 16px
2.emを使用してmargin,padding値を設定する
font-size
の値を設定できるほか、emはpadding
とmargin
の値を設定できるのも多くの人が迷っているところです.次のコードを見てください.
h1
とp
のmargin-bottom
の値はそれぞれいくらですか.(htmlのfont-sizeを100%に設定するとします):h1
font-size: 2em // 1em = 16px, 2em = 32px
margin-botton: 1em // 1em = 32px
p
font-size: 1em // 1em = 16px
margin-bottom: 1em // 1em = 16px
驚くべきことに、2つの要素のmargin-bottom値が異なるのではないでしょうか.
この現象は、
1em
が自身のfont-size
の値に等しいため、h 1の現在のフォントサイズは32 pxであるため、1em = 32px
、以下のp要素1em = 16px
である.異なるコード環境では
1em
の値もそれぞれ異なり,emを使用し始めた人は困惑しているが,これがemである.二.REMとは何か
rem
はROOT EMを表し、em
の複雑な計算から人々を解放するために現れた.これは、ルートフォントサイズに相当するページ設計単位であり、
1rem
はhtml
のfont-size
の1rem
のサイズに永遠に等しいことを意味します.次のコードを見てください.
h1
font-size: 2rem
margin-bottom: 1rem // 1rem = 16px
p
font-size: 1rem
margin-bottom: 1rem // 1rem = 16px
html
font-size
の値を変更しない限り、rem
は永遠に16 pxに等しく、どこで設定しても構いません.これは
em
で、理解しやすく、環境が独立していて、rem | em
とは何かを知ったら、簡単に理解できます.三.REMsを使うかEMsを使うか
この話題は論争的だ.
一部の人はremの使用を完全に避け、コンポーネントのモジュール性を低下させると考えている.簡潔性のためremをほとんど使用している人もいます.
Emはモジュール化コンポーネントを助けることができるが、コードに複雑さをもたらす.remは計算を簡単にしますが、モジュール化コンポーネントには友好的ではありません.従って、
font-size
はそれぞれメリットとデメリットがあるので、具体的な使用状況に応じて使用する.基本的な2つの原則:
em
に従ってスケーリングする場合は、rem
.header
次のjadeコード
h2.header this is a header
remのみを使用:
.header
font-size: 1rem
padding: 0.5rem 0.75rem
background: pink
少し大きいヘッダー要素を作成すると、フォントサイズとpadding値は上のh 2の2倍になります.
a.header.large-header this is big header
a
display: block
.large-header
font-size: 2rem
このように設定するだけで、padding値はh 2の2倍になっていないことがわかりますので、paddingを書き直します.
.large-header
font-size: 2rem
padding: 1rem 1.5rem
これで完了しますが、コードの重複が発生することを発見しました.もしこのようなサイズの違いが必要な要素があれば、重複するコードがより多くなることを発見しました.
em
のサイズに従ってスケールするpadding値を.header--large
に設定することができます.これにより、繰り返し宣言する必要はありません..header
font-size: 1rem
padding: 0.5em 0.75em
background: pink
.large-header
font-size: 2em
// font-size ,padding
2.ヘッダー要素にEMsのみ使用
例:
.header.header--large A header element
p lorem
p lorem
.header A header element smaller
p lorem
emのみ使用:
.header
font-size: 1em
padding: 0.5em 0.75em
background: pink
.header--large
font-size: 2em
p
margin-left: 0.75em
margin-right: 0.75em
font-size
の文字が左のpadding値からもスケーリングされているため、2つのタイトルが左からずれているため、以下の設定が可能であることがわかります..header--large
font-size: 2em
padding-left: 0.375em
// font-size 2 , 1/2
padding-right: 0.375em
これによりコード冗長性も生じることがわかり、padding-left,padding-rightの値をremに設定することで自動スケールが行われなくなります
.header
font-size: 1em
padding: 0.5em 0.75rem // 0.75em 0.75rem
background: pink
.header--large
font-size: 2em
まとめ
使用する単位は使用状況によって異なり、一般的に属性が
em
に基づいてスケーリングされる場合はrem
、残りの場合はem
を使用する.また、メディアクエリーを使用する場合は、safariブラウザでバグが発生するため、rem
を使用することが望ましい.原文のリンク: