CSSでpxまたはrem値の単位を使用する必要がありますか?[閉まっている]


375

新しいWebサイトを設計していますが、できる限り多くのブラウザーおよびブラウザー設定と互換性があるようにしたいと考えています。フォントと要素のサイズに使用する測定単位を決定しようとしていますが、決定的な答えを見つけることができません。

私の質問は:私のCSS を使用するpx必要remがありますか?

  • これまでのところ、使用pxはブラウザで基本フォントサイズを調整するユーザーと互換性がないことを知っています。
  • sはカスケードするので、s emと比較して、remsは維持するのが面倒なので、無視しました。
  • remsは解像度に依存しないため、より望ましいと言う人もいます。しかし、最新のブラウザのほとんどがすべての要素を均等にズームするため、使用にpx問題はないという人もいます。

CSSで最も望ましい距離の尺度は何であるかについてさまざまな意見があり、どちらが最適であるかわかりません。


4
これは紛争と議論と意見の問題であり、SOが得意とする技術的な問題ではありません。ちなみに正解は「いいえ」です。☺
ユッカ・K. Korpela

2
コメントでさえ時代遅れです。OPが正しい意見を求めているからといって、私たちが自分の意見だけを述べるつもりはありません。ほぼ8年後、この質問は、主題がどのように進化するかにまだ関心があることを示しています。現在の回答は実証されており、技術的に十分であり、意見は出されていません。そのため、私は「意見」という単語を「経験」に編集して、質問を何度も繰り返し開いたり閉じたりするこの罠に陥らないようにすることをお勧めします。
Tim Vermaelen

2
@TimVermaelenこの質問は、その有効期間中に一度だけ閉じられました。行われた変更は実質的なものではありませんでした。OPが特定のシナリオについて尋ねる質問を編集しない限り、答えはまだ完全に提供できないコンテキストに依存しているためです。すべてのケースに「最適な」オプションはありません。したがって、この質問は意見に基づいています。
TylerH

回答:


418

TL; DR:を使用しますpx

事実

  • まず、仕様に従って、CSS pxユニット 1つの物理的なディスプレイピクセルと等しくないことを知ることは非常に重要です。これは、1996年のCSS 1仕様でさえ、常に真実でした。

    CSSは、96 dpiディスプレイ上のピクセルのサイズを測定する参照ピクセルを定義します。96dpiとは実質的に異なるdpi(Retinaディスプレイなど)のディスプレイでは、ユーザーエージェントはpxユニットのサイズを変更して、サイズが参照ピクセルのサイズと一致するようにします。言い換えると、この再スケーリングが、1 CSSピクセルが2つの物理的なRetinaディスプレイピクセルと等しい理由です。

    つまり、2010年まで(およびモバイルズームの状況にもかかわらず)、px広く利用可能なすべてのディスプレイが約96dpiであったため、ほとんどの場合、1物理ピクセルに等しくなりました。

  • emsで指定されるサイズは、親要素を基準にしています。これによりem、ネストされた要素が次第に大きくまたは小さくなる「の複合問題」が発生します。例えば:

    body { font-size:20px; } 
    div { font-size:0.5em; }

    私たちに与える:

    <body> - 20px
        <div> - 10px
            <div> - 5px
                <div> - 2.5px
                    <div> - 1.25px
  • CSS3 remは常にルートhtml要素にのみ相対的であり、使用中のすべてのブラウザーの96%でサポートされるようになりました

意見

私は、ページをすべての人に配慮してデザインし、視覚障害者に配慮することは良いことだと誰もが同意していると思います。そのような考慮事項の1つ(1つだけではありません!)は、ユーザーがサイトのテキストを大きくして読みやすくすることを許可することです。

当初、ユーザーにテキストサイズを拡大縮小する方法を提供する唯一の方法は、相対サイズ単位(ems など)を使用することでした。これは、ブラウザのフォントサイズメニューが単にルートフォントサイズを変更したためです。したがって、でフォントサイズを指定した場合px、ブラウザのフォントサイズオプションを変更しても、それらのフォントサイズはスケーリングされません。

最近のブラウザー(そして、それほど現代的ではないIE7でも)はすべて、デフォルトのスケーリング方法を変更して、画像やボックスサイズを含むすべてのものにズームインしました。基本的に、それらは参照ピクセルを大きくまたは小さくします。

はい、誰かがまだデフォルトのフォントサイズ(古いスタイルフォントサイズのオプションに相当)を微調整するために、ブラウザのデフォルトのスタイルシートを変更することができ、それはそれについて行くのは非常に難解な方法だと私は賭け誰もいただきたい1はそれをしません。(Chromeでは、詳細設定、Webコンテンツ、フォントサイズの下に埋め込まれています。IE9では、さらに非表示になっています。Altキーを押して、[表示]、[テキストサイズ]に移動する必要があります。)で[ズーム]オプションを選択する方がはるかに簡単です。ブラウザのメインメニュー(またはCtrl+ +/ -/マウスホイールを使用)。

1-当然、統計誤差内

ほとんどのユーザーがズームオプションを使用してページを拡大縮小すると仮定すると、相対単位はほとんど関係ないことがわかります。すべてを同じ単位で指定すると(画像はすべてピクセル単位で処理されます)、合成を心配する必要がない場合、ページの開発がはるかに簡単になります。(「私は数学がないと言われました」 – 1.5emが実際にうまくいくものを計算しなければならないことに対処しています。)

フォントサイズに相対単位のみを使用する場合のもう1つの潜在的な問題は、ユーザーがサイズを変更したフォントが、レイアウトの想定を崩す可能性があることです。たとえば、これによりテキストが切り取られたり、実行時間が長すぎたりする場合があります。絶対単位を使用する場合は、レイアウトが崩れることによる予期しないフォントサイズについて心配する必要はありません。

だから私の答えはピクセル単位を使用することです。私pxはすべてに使用します。もちろん、状況はさまざまで、IE6をサポートする必要がある場合(RFCの神々があなたを憐れんでくれる場合があります)、emとにかくs を使用する必要があります。


43
ピクセルとレムを使用する必要があります。そのため、新しいブラウザーはremを取得し、古いブラウザーはピクセルにフォールバックします(WordPress 2012のように)。これはSassまたはLessで自動化できるので、px値を入力するだけで、pxとremが自動的に出力されます。
cchiera 2012年

63
この引数の私の大きな問題は、レスポンシブブレークポイントでフォントサイズと間隔を調整するときに、html要素に新しいフォントサイズを設定でき、remで設定したすべての測定値が自動的に調整される一方で、pxを使用する必要があることです。微調整したいすべての測定の新しいルール。もちろん、おそらくremを使用する場合でもさらに調整が必要になりますが、巧妙な計画を立てると、無料で大量の比例スケーリングが得られます。特定のボックスの間隔の測定値をタイプに関連付け、コードを軽くし、複雑さを減らし、保守性を高めることは、私にとっての明確な勝利につながります。
RobW

16
font-size設定を変更するユーザーがいないとすると、かなり太字になります。そのような主張はデータで裏打ちされるべきです。それ以外の場合は、すでに脆弱なユーザー(視覚障害のある人)を疎外する方法にすぎません。可能であれば、pxの代わりにremを使用します。IMO、アプリはインターフェイスとフォントサイズを個別にスケーリングできる必要があります。「pxを使用する」は、emsの問題に取り組んでいる多くの開発者が聞きたいものですが、Webに対する正しい答えではありません。
Olivvv 2013年

18
これについてフォローアップがあれば素晴らしいでしょう。Remは現在95%以上をサポートしています。
例による統計の学習2015

10
間違って、私はIEを気にしません(誰もすべきではありません)。
Vahid Amiri 2017年

194

優れた歴史的背景を提供するための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は、事実上の標準であるため、値を使用します。ptinおよび理論的には他のさまざまな単位を使用することできますが、小さい値をうまく処理できなかったため、分数にすばやく対応する必要がありました。

であなたは、細い境界線を望んでいた場合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設定さ32px640pxたユーザーは16px320pxワイドブラウザでユーザーに表示されるようにサイトを効果的に表示します。RWDを使用しても損失はまったくありませんrem

見かけのpx価値の変化

はノードのにrem基づいているため、何を表すかを変更したい場合font-sizeは、以下:rootを変更するだけです。1remfont-size

:root {
  font-size: 100px;
}
body {
  font-size: 1rem;
}
<p>Don't ever actually do this, please</p>

何をする場合でも、:root要素の値font-sizeを設定しないでくださいpx

font-sizeon htmlpx値を設定すると、ユーザーの設定を取り戻す方法なしにユーザーの設定を吹き飛ばしてしまいます。

見かけの値を変更する場合は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/160.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-sizebody使用はrem

:root {
  font-size: 62.5%;
}

body {
  font-size: 1.6rem;
}
<p>I'm the default font-size</p>

この調整が適切に行われている場合、の見かけの値はrem10pxあることに注意することが重要です。つまり、書き込んだ値は、小数点以下をバンプする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つのブラウザでは多少のこれまで発散したとのために、すべてのこと難しいこと言わないだろう15px18px。ただし、テストでは、デフォルト設定を使用しているシステムでデフォルト設定を使用しているブラウザが以外の値を持っている単一の例を見たことはありません16px。そのような例を見つけたら、私と共有してください。


私はこれが遅いことを知っていますが、REMの使用方法は好きですが、remの使用で最も問題がmatrix()あるのは、マトリックス変換値が使用しているjavascript を使用する ときpxです(間違っている場合は修正してください)。 。
アンパサンダ2018

3
@ Ampersanda、JavaScriptでは主に計算されたピクセル値を使用します。CSSが状況を管理できるように、可能な限りクラスを切り替えることをお勧めします。JSを使用してピクセル値を計算することを避けることができないものがあるため、最善の策はDOM状態からピクセル値を計算することです。
zzzzBov 2018

なるほど、そうしなければならないのですgetComputedStyle()が、結果は常にピクセルになっているので、結果をrem値(16など)で除算する必要があります。CMIIW
Ampersanda

@Ampersandaは、実際にrem値を生成している場合にのみ、すでに正しいpx値をremにのみ、特定のコンテキストに対してすでに計算されているものの単位に切り替える必要はありません。
zzzzBov 2018

1
1remは1ピクセル等しく持っているため、Chromeの最小フォントサイズにこの原因のトラブルを:stackoverflow.com/questions/44378664/... stackoverflow.com/questions/24200797/...を
ポール・

44

この記事ではかなりうまくの長所と短所を説明しpxemrem

最終的に著者は、最良の方法はおそらく両方を使用することであると結論し pxしてrem、宣言px古いブラウザのための第1および再宣言rem以降のブラウザのために:

html { font-size: 62.5%; } 
body { font-size: 14px; font-size: 1.4rem; } /* =14px */
h1   { font-size: 24px; font-size: 2.4rem; } /* =24px */

1
ええ、そもそもレムに興味を持ったきっかけです。私が理解していない2つのこと:彼はそれをフォントの測定単位として(要素ではなく)アドバイスするだけであり、私が彼を正しく理解した場合、(r)emを使用する唯一の本当の理由は、IEユーザーがテキストのサイズを変更できるようにするためですか?

1
@サミュエル私はそう信じています。テキストのサイズを変更しない場合は、を使用することをお勧めしますpx。要素の単位については、px通常は要素のサイズを正確に設定したいので、こだわりが良いでしょう。
uzyn

しかし、それを行うと、基本のfont-sizeを再定義するブラウザ設定がレイアウトを台無しにするでしょうか?なぜレムは何のためでもないのですか?

1
多くのコメントがここで言及しているように、私たちが捨てる必要があった理由はpx、サイズ変更を可能にするためです。ここで、を使用する場合remでも、pxフォールバックを提供する必要があります(古いブラウザー)。基本的に、それが意味することはpxサポートのサイズを変更することはよりも優れているということですrem。新しいブラウザはpxサイズ変更をサポートし、古いブラウザはフォールバックする方法をサポートしpxます。この結論に基づいて、私は知ることに非常に興味がありますrem。なぜ使用するのですか?トンネルの終わりに光が見えるかもしれません。
fusionstrings

3
62.5%= 10pxのような値であるという保証はありません。これは、ブラウザーのデフォルトのフォントサイズが16pxに設定されている場合にのみ当てはまります。これはデフォルトですが、保証されていません。
cimmanon

7

必要に応じてドキュメント全体の「ズームレベル」を一度に変更できるため、反射的な回答として、私はremの使用をお勧めします。場合によっては、サイズを親要素に相対的にしたい場合、emを使用します。

しかし、 remのサポートはむらがあり、IE8はポリフィルを必要とし、Webkitはバグを示しています。さらに、サブピクセル計算では、1つのピクセルラインなどが消えることがあります。解決策は、そのような非常に小さな要素をピクセルでコーディングすることです。これにより、さらに複雑になります。

したがって、全体的に、それが価値があるかどうかを自問してください。CSS内でドキュメント全体の「ズームレベル」を変更することはどれほど重要でありそうですか。

ある場合にはそれはイエスであり、ある場合にはそれはノーになるでしょう。

したがって、それはニーズに依存し、長所と短所を重み付けする必要があります。なぜなら、remとemを使用すると、「通常の」ピクセルベースのワークフローと比較していくつかの追加の考慮事項が導入されるためです。

次の2つのCSSコードブロックは同じ結果を生成するため、CSSをpxからrem(JavaScriptは別の話です)に切り替える(または変換する)のは簡単です。

html {
}

body {
  font-size:14px;
}

.someElement {
  width: 12px;
}

html {
  font-size:1px;
}

body {
  font-size:14rem;
}

.someElement {
  width: 12rem;
}

6

はい、REMとPXは相対的ですが、他の回答がPXではなくREMに進むことを提案しています。また、アクセシビリティの例を使用してこれをバックアップしたいと思います。
ユーザーがブラウザで異なるフォントサイズを設定すると、REMはフォント、画像などの要素をWebページで自動的に拡大および縮小しますが、PXではそうではありません。


下のgifでは、左側のテキストはフォントサイズREMユニットを使用して設定され、右側のフォントはPXユニットによって設定されています。

ここに画像の説明を入力してください

ご覧のとおり、Webページのデフォルトのフォントサイズを変更すると、REMが自動的に拡大/縮小します(右下)。

Webページのデフォルトのフォントサイズは16ピクセルで、1レムに相当します(デフォルトのHTMLページの場合のみ) html{font-size:100%} 16ピクセルで、)に等しいため、1.25レムは20ピクセルに等しくなります。

PS:他に誰がREMを使用していますか?CSSフレームワーク!Bootstrap 4、Bulma CSSなどのように、うまくやっていきます。


3

josh3736の答えは良いものですが、3年後に対抗点を提供するには:

remフォントの単位を使用することをお勧めします。これは、開発者であるユーザーがサイズを変更しやすくなるためです。ユーザーがブラウザのデフォルトのフォントサイズを変更することはめったになく、最新のブラウザズームはpx単位を拡大することは事実です。しかし、上司が来て「画像やアイコンを拡大せず、すべてのフォントを大きくする」と言ったらどうでしょう。ルートフォントサイズを変更し、他のすべてのフォントをそれに比例して拡大縮小してからpx、数十または数百のCSSルールでサイズを変更する方がはるかに簡単です。

px一部の画像、またはデザインのスケールに関係なく常に同じサイズである必要がある特定のレイアウト要素にユニットを使用することは、依然として理にかなっていると思います。

Caniuse.comは、2012年にjosh3736が回答を投稿したとき、ブラウザの75%しかないと言っていたかもしれませんが、3月27日現在、93.78%のサポートを主張しています。IE8のみが、追跡するブラウザー間でサポートしていません。


1
Only IE8 doesn't support it among the browsers they track.えっ?リンク先のページには、「IE9とIE10は、フォントの簡略プロパティで使用した場合、または疑似要素で使用した場合、rem単位をサポートしていません。IE9、10、11は、:beforeおよび:after疑似要素で使用した場合、line-heightプロパティで使用すると、remユニットをサポートしません。Chromeでページがズームアウトされると、レムサイズの枠が消えます。Samsung Note II Android 4.3ブラウザーおよびAndroid 4.2のSamsung Galaxy Tab 2では動作しません。Chrome 31-34およびChromeベースのAndroid(4.4など)には、ルート要素がパーセントベースのサイズである場合にフォントサイズのバグが発生します。」
e-sushi

また、as of March 27 they claim 93.78% support.このコメントを書いている時点では、caniuseはブラウザの完全なサポートを91.79%しか示していません。パーセンテージを見ると、バグのあるブラウザのサポートも含まれていると思います(現在は2.8%で、全体的なカバレッジは94.6%と楽観的に解釈できますが、実際には2.8%にバグがあり、不完全または完全に含まれています。失敗したサポート…以前のコメントで述べたように、各バグは、異なるブラウザーバージョンとオペレーティングシステムの組み合わせの結果です。)それに応じて回答を修正することができます…
e-sushi

1

Webサイトのフォントサイズをプログラムする最良の方法は、のベースフォントサイズを定義し、bodyその後font-sizeに宣言する他のすべてのフォントにem(またはrem)を使用することです。それは個人的な好みだと思いますが、それは私によく役立ち、より応答性の高いデザインを組み込むことも非常に簡単にしました。

remユニットの使用に関する限り、コードでプログレッシブにすることの間のバランスを見つけることは良いことだと思いますが、古いブラウザーのサポートを提供することもできます。 ブラウザーでのremユニットのサポートについては、こちらのリンクをご覧ください。これは、決定に役立つはずです。


OK。しかし、レスポンシブデザインは、pxユニットを使用して同様に簡単に実行できます(emの代わりにpxに基づいてメディアクエリを作成するだけです)。

ただし、Webサイトのビューポートの幅が小さくなるにつれてfont-sizeを小さくしたい場合は、bodyfont-sizeを変更すると、それに伴ってすべてが変更されます。
シリアル08

ブラウザのサポートについては特に心配していません。すべてのサイズのフォールバックpxサイズを含めるだけなので、古いブラウザーで解釈する必要があります。

次に、remを使用してプログレッシブな方法に進みます。フォールバックを提供する限り、害はありません。私にはそれは余分な作業のように思えますが、おそらくあなたの状況ではありません。
シリアルラルケニー

0

ptに似ていますがrem、比較的固定されていますpxが、準拠していないブラウザがデバイスに依存する方法で処理する場合でも、ほとんどの場合DPIに依存しません。 remルート要素のフォントサイズによって異なりますが、Sass / Compassなどを使用して、でこれを自動的に行うことができますpt

これがあったら:

html {
    font-size: 12pt;
}

その後、1rem常にになります12ptremそして、emそれらが依存する要素と同じくらいデバイスに依存しません。一部のブラウザは仕様どおりに動作せず、px文字どおりに処理されます。Webの古い時代でさえ、1ポイントは一貫して1/72インチと見なされました。つまり、1インチには72ポイントがあります。

古い非準拠ブラウザを使用していて、次のものが存在する場合:

html {
    font-size: 16px;
}

その後、1remデバイスに依存します。htmlデフォルトで継承する要素の場合、1emデバイスにも依存します。 12ptだろううまくいけば:保証デバイスに依存しない同等の16px / 96px * 72pt = 12pt96px = 72pt = 1in

特定の単位に固執したい場合は、数学を行うのがかなり複雑になる可能性があります。たとえば、、.75em of html = .75rem = 9ptおよび.66em of .75em of html = .5rem = 6pt。良い経験則:

  • pt絶対サイズに使用します。 これがルート要素に対して動的であることが本当に必要な場合は、CSSの要求が多すぎます。Sass / SCSSのように、CSSにコンパイルできる言語が必要です。
  • em相対サイズに使用します。「左側の余白を文字の最大幅程度にしたい」、または「この要素のテキストを周囲よりも少し大きくする」と言えると便利です。 <h1>emsでフォントサイズを使用するのに適した要素です。さまざまな場所に表示される可能性がありますが、常に近くのテキストよりも大きくする必要があります。このように、適用されるすべてのクラスに個別のフォントサイズを設定する必要はありませんh1。フォントサイズは自動的に調整されます。
  • px非常に小さなサイズに使用します。 非常に小さいサイズでptは、96 DPIの一部のブラウザーでぼやける可能性がptありpxます。1ピクセルの細い境界線を作成したいだけの場合は、そのようにします。高DPIディスプレイを使用している場合、これはテスト中には明らかではないので、ある時点で汎用96 DPIディスプレイでテストしてください。
  • 高DPIディスプレイで見栄えをよくするためにサブピクセルを扱わないでください。一部のブラウザーは、特に高DPIディスプレイでこれをサポートする可能性がありますが、それはできません。ほとんどのユーザーは大きくて明快なものを好みますが、ウェブは開発者に他の方法を教えてきました。最先端の画面を使用してユーザーに詳細を追加したい場合は、ベクターグラフィックス(読み取り:SVG)を使用できます。

1
ptは印刷されたメディア用であり、スクリーンには使用しないでください
sf

@sf CSSは、ptとpxを定義していますが、これらの用語の技術的に正確な使用法ではありません(72pt = 96px = 1in)。実際、CSSでは、pxは実際には単一のデバイスピクセルではありません。私の画面では、1pxは2デバイスピクセルです。pxではなくptを使用する利点は、テキスト関連のサイズを基準にして要素のサイズを簡単に指定できることです。
Zenexer 2017年

-2

半分(ただし半分だけ)のぎくしゃくした答え(残りの半分は官僚制度の現実を厳しく軽蔑しています):

vhを使用

すべてが常にブラウザウィンドウに合わせてサイズ調整されます。

常に横にスクロールしないでください。

本体の幅を静的な50vhに設定します。親divからフロートしたりブレークアウトしたりするものはありません。また、テーブルのみを使用してスタイルを設定することで、すべてが期待どおりに固定されます。ユーザーが実行するctrl +/-アクティビティを元に戻すJavaScript関数を含めます。

物事をモックアップに合わせるように言うあなたを除いて、誰もがあなたを憎み、彼らは有頂天になります。そして、誰もが彼らの意見が重要な唯一のものであることを知っています。


-3

はい。または、むしろ、いいえ。

えー、つまり、それは問題ではありません。特定のプロジェクトに適したものを使用してください。PXとEM、または両方とも同等に有効ですが、ページ全体のCSSアーキテクチャに応じて動作が少し異なります。

更新:

明確にするために、私は通常、どちらを使用しても問題ではない可能性が高いと述べています。場合によっては、どちらか一方を特に選択することもできます。EMは、ゼロから始めて、基本フォントサイズを使用し、それに関連してすべてを作成したい場合に適しています。

PXは、再設計を既存のコードベースに後付けする場合によく必要で、ネストの問題を防ぐためにpxの特定性が必要です。


だからあなたの答えはそれは問題ではないということですか?それとも、どちらか一方を高く評価する特定の状況はありますか?もしそうなら、どのような状況でこれが当てはまりますか?

@Samuelはい、どちらか一方を使用したい場合があります。回答を詳細に更新しました。
DA。

申し訳ありませんが、元の表現と少し混乱しました。タイトルにREM、本文にEMがあったと思います。REMについて具体的に質問しているようです。答えはまだほとんど同じですが、REMには考慮すべきいくつかの追加の利点がありますが、主にEMと同じように使用されます。これにより、「基本」フォントサイズを使用できます。
DA。

ゼロから始めることができ、ベースフォントサイズを使用して、それに相対的なものをすべて作成したい場合、なぜ「emは[...]がいいですか?」(r)emのpxよりも優れている点は何ですか?IEユーザーがテキストのサイズを変更できるようにするのですか、それともpxよりも他の利点がありますか(これはより単純なようです)。

EMとREMには同じ利点があります。HTMLまたはBODYを特定のフォントサイズ(たとえば10px)に設定してから、その他すべてをEMまたはREMとして設定できます。このようにして、すべてのタイプを比例的に大きくしたい場合は、最初の10pxスタイルを11pxに変更するだけです。これは、5年前に私たち全員がカスタムのJSベースのフォントサイズ変更ウィジェットを作成していたときに、はるかに便利でした。最近のブラウザーは、ズーム(特にモバイル)において非常に優れた機能を果たしているため、あまりメリットがありません。PXの方がシンプルだと思うなら、それはあなたにとってメリットであり、PXを使う正当な理由です。
DA。

-4

emはフォントだけでなく、前進する方法でもありますが、ボックス、線の太さなどでも使用できます。なぜですか?

簡単に言えば、ブラウザでalt +キーとalt-キーを使用してズームするために同時に拡大縮小できるのは、emだけです。

他の測定値はスケールしますが、emほどきれいではありません。

補足として、最高のスケーリングが必要な場合は、可能な場合はグラフィックもベクターベースのSVGに変換します。これらもブラウザーのズーム率できれいにスケーリングされるためです。


3
しかし、最近のほとんどのブラウザーは(基本フォントサイズを調整しない限り)すべてのページ要素を等しくズームしているため、(r)emを使用する利点は最新のブラウザーには当てはまりませんか?

それはそうですし、そうではありません。あなたの言うことは正しいですが、それはスケーリングデルタではなく、スケーリングファクターについてです。デルタは、使用する測定値に関係なく常に一定ですが、スケールファクター(計算が正しく行われている場合)は、ワイドスクリーンモニターと標準モニター、または長方形ピクセルと正方形ピクセルなど、必要に応じて調整されます。REMSが実際にプリンタ真の測定値に基づいているため、常によりよいフィットになりますスケーリング、(例えば%など)などがしばしば最高の状態でデルタオフセット
shawtyの

(続き)両方向に適用された乗算で、その結果、場合によっては、非常に不均衡な表示比率が得られる可能性があります。
shawty

2
「単にemだけが、ズームのためにブラウザーのalt +およびalt-キーと一致してスケーリングする唯一のものです。」=不正解です。
DA。

わかりましたので、もっといい言葉で書いてもいいでしょう。修正については、以前のコメントを参照してください。
shawty 2012

-5

EMは+/-スケーリングを処理するメディアクエリに対してのみスケーリングするものであり、視覚障害者だけでなく、常に行うものです。これがなぜ重要なのかについて、非常によく書かれた専門的なデモンストレーションがもう1つあります

ちなみに、これがZurb Foundationがemsを使用する理由ですが、下位のBootstrap 3は依然としてピクセルを使用しています。


2
これは本当に正しくありません。昔は、IEの古いバージョンではピクセルをズームできませんでした。+/-は現在のすべてのブラウザでページ全体のズームを行うため、これは問題ではありません。さらに、この質問はpxではなくレムについてです-emとpxではありません。
リッチブラッドショー2014年

1
君たちは私を笑わせます。ピクセルを使用して+/-を使用してサイトをスケーリングしようとしましたか?ズームされるピクセルについての書き込みは完全に間違っています。欲しいものはすべて私に投票してください。投票は現実を変えません。
robmuh 2014年

1
おそらく、私たちは少し異なることについて取り組んでいるでしょう-違いを示すために簡単なデモを立てることができる可能性はありますか?
リッチブラッドショー

質問はメディアクエリでどのユニットを使用するかということではないと思います…
binki 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.