優れた歴史的背景を提供するためのjosh3736の回答を称賛したいと思います。明確に表現されていますが、この質問が出されてから約5年間でCSSの状況は変化しました。この質問がなされたとき、それは正解px
でしたが、今日はもはや当てはまりません。
tl; dr:使用rem
ユニットの概要
歴史的に、px
単位は通常、1つのデバイスピクセルを表していました。ピクセル密度がますます高くなるデバイスでは、これはAppleのRetinaディスプレイなどの多くのデバイスには当てはまりません。
rem
単位は表し、R OOTの全角サイズを。font-size
一致するものは何でも:root
です。HTMLの場合は<html>
要素です。SVGの場合は、<svg>
要素です。font-size
すべてのブラウザ* のデフォルトは16px
です。
執筆時点でrem
は、約98%のユーザーがサポートしています。他の2%が心配な場合は、約98%のユーザーがメディアクエリもサポートしていることを思い出します。
ご利用にあたって px
インターネット上のCSSの例の大部分px
は、事実上の標準であるため、値を使用します。pt
、in
および理論的には他のさまざまな単位を使用することもできますが、小さい値をうまく処理できなかったため、分数にすばやく対応する必要がありました。
であなたは、細い境界線を望んでいた場合px
、あなたが使用することができ1px
て、pt
あなたが使用する必要があると思い0.75pt
一貫した結果のために、それはちょうど非常に便利ではありません。
ご利用にあたって rem
rem
のデフォルト値は16px
、その使用に関してあまり強力な議論ではありません。書き込みが0.0625rem
あるより悪い書き込みよりも0.75pt
、なぜ誰も使用がでしょうかrem
?
rem
他のユニットと比べての利点には2つの部分があります。
- ユーザーの好みが尊重されます
- の見かけの
px
値をrem
好きなように変更できます
ユーザー設定の尊重
ブラウザのズームは、長年にわたって大幅に変化しました。歴史的には多くのブラウザはスケールアップするだけでしたがfont-size
、誰かがズームインまたはズームアウトすると、ピクセルパーフェクトな美しいデザインが機能しなくなったことにWebサイトが気づいたとき、それは急速に変化しました。この時点で、ブラウザはページ全体を拡大縮小しているため、フォントベースのズームは画面外にあります。
ユーザーの希望を尊重することは、視野の外ではありません。ブラウザーが16px
デフォルトで設定されているからといって、ユーザーが好みを変更し24px
たり32px
、低視力や視界不良(画面の眩しさなど)を修正したりできないということではありません。に基づいてユニットを作成するとrem
、フォントサイズが大きいユーザーには比例して大きいサイトが表示されます。ボーダーが大きくなり、パディングが大きくなり、マージンが大きくなり、すべてがスムーズに拡大されます。
メディアクエリをに基づいているrem
場合は、ユーザーに表示されるサイトが画面に適合していることを確認することもできます。ワイドブラウザでにfont-size
設定さ32px
れ640px
たユーザーは16px
、320px
ワイドブラウザでユーザーに表示されるようにサイトを効果的に表示します。RWDを使用しても損失はまったくありませんrem
。
見かけのpx
価値の変化
はノードのにrem
基づいているため、何を表すかを変更したい場合font-size
は、以下:root
を変更するだけです。1rem
font-size
:root {
font-size: 100px;
}
body {
font-size: 1rem;
}
<p>Don't ever actually do this, please</p>
何をする場合でも、:root
要素の値font-size
を設定しないでくださいpx
。
font-size
on html
にpx
値を設定すると、ユーザーの設定を取り戻す方法なしにユーザーの設定を吹き飛ばしてしまいます。
の見かけの値を変更する場合はrem
、%
単位を使用します。
この計算はかなり簡単です。
の見かけのフォントサイズは:root
ですが16px
、に変更したいとし20px
ます。必要なのは16
、取得する値を乗算することだけ20
です。
方程式を設定します。
16 * X = 20
そしてのために解決するX
:
X = 20 / 16
X = 1.25
X = 125%
:root {
font-size: 125%;
}
<p>If you're using the default font-size, I'm 20px tall.</p>
の倍数ですべてを行うこと20
はそれほど素晴らしいことではありませんが、一般的な提案は、見かけのサイズをにrem
等しくすること10px
です。そのためのマジックナンバー10/16
は0.625
、または62.5%
です。
:root {
font-size: 62.5%;
}
<p>If you're using the default font-size, I'm 10px tall.</p>
問題は、今、あなたのデフォルトということですfont-size
ページの残りの部分については、集合あまりにも小さいですが、それを修正する簡単な方法があります:セットA font-size
のbody
使用はrem
:
:root {
font-size: 62.5%;
}
body {
font-size: 1.6rem;
}
<p>I'm the default font-size</p>
この調整が適切に行われている場合、の見かけの値はrem
で10px
あることに注意することが重要です。つまり、書き込んだ値は、小数点以下をバンプするpx
ことで直接変換できますrem
。
padding: 20px;
になる
padding: 2rem;
選択する見かけのフォントサイズはあなた次第なので、もしあなたが望むなら、あなたが使用できない理由はありません:
:root {
font-size: 6.25%;
}
body {
font-size: 16rem;
}
と1rem
等しい1px
。
CSSが複雑になりすぎないようにしながら、ユーザーの希望を尊重するための簡単な解決策があります。
待って、キャッチは何ですか?
あなたはそれを尋ねるのではないかと心配でした。それrem
が魔法であり、すべてを解決するふりをしたいのと同じくらい、まだいくつかの注目すべき問題があります。私の意見では何の問題もありませんが、私はあなたに警告しなかったとは言えないので、それらを呼び出します。
メディアクエリ(を使用em
)
最初に遭遇する問題の1つrem
はメディアクエリです。次のコードを検討してください。
:root {
font-size: 1000px;
}
@media (min-width: 1rem) {
:root {
font-size: 1px;
}
}
ここで、rem
メディアクエリが適用されるかどうかに応じて値が変化し、メディアクエリがの値に依存するrem
ため、いったい何が起こっているのでしょうか。
rem
メディアクエリでは、の初期値を使用し、要素のに発生した可能性のある変更を考慮に入れてはfont-size
なりません(Safariセクションを参照)。つまり、見かけ上の値は常にです。font-size
:root
16px
これは、いくつかの分数計算を行う必要があることを意味するので、少し煩わしいですが、ほとんどの一般的なメディアクエリは、16の倍数の値を既に使用していることがわかりました。
| px | rem |
+------+-----+
| 320 | 20 |
| 480 | 30 |
| 768 | 48 |
| 1024 | 64 |
| 1200 | 75 |
| 1600 | 100 |
さらに、CSSプリプロセッサを使用している場合は、ミックスインまたは変数を使用してメディアクエリを管理できます。これにより、問題が完全に隠されます。
サファリ
残念ながら、Safariには、:root
フォントサイズを変更するrem
とメディアクエリ範囲の計算値が実際に変更されるという既知のバグがあります。:root
メディアクエリ内で要素のfont-size が変更された場合、これは非常に奇妙な動作を引き起こす可能性があります。幸い、修正は簡単です。メディアクエリに単位を使用しますem
。
コンテキストの切り替え
プロジェクトをさまざまな異なるプロジェクトに切り替えると、見かけ上のfont-sizeのrem
値が異なる可能性があります。あるプロジェクトでは、見かけのサイズを使用している可能性が10px
あり、別のプロジェクトでは見かけのサイズがである可能性があります1px
。これは混乱を招き、問題を引き起こす可能性があります。
ここでの私の唯一の推奨事項は、見かけのサイズ62.5%
に変換するrem
ことに固執すること10px
です。これは、私の経験ではより一般的であるためです。
共有CSSライブラリ
埋め込みウィジェットなど、制御できないサイトで使用されるCSSを作成している場合、実際のサイズrem
がどの程度かを知るための良い方法はありません。その場合は、引き続きご利用くださいpx
。
それでも使用したい場合はrem
、SassまたはLESSバージョンのスタイルシートを変数とともにリリースして、の見かけのサイズのスケーリングをオーバーライドすることを検討してrem
ください。
*の使用をだまして欲しくないのですがrem
、すべてのブラウザが16px
デフォルトで使用していることを正式に確認できていません。あなたが見る、ブラウザがたくさんあり、それは1つのブラウザでは多少のこれまで発散したとのために、すべてのこと難しいこと言わないだろう15px
か18px
。ただし、テストでは、デフォルト設定を使用しているシステムでデフォルト設定を使用しているブラウザが以外の値を持っている単一の例を見たことはありません16px
。そのような例を見つけたら、私と共有してください。