ボタンのhtmlタグでボタンを作成しました。今、高さと幅をemで作ろうとしています。16pxは1emに等しいことを知っています。そのルールは、ボタンを除いて、これまで見てきたすべてに適用されます。ボタンの高さを 45px にしたい場合、ボタンの高さは 45px になります。45px を em に変更したい場合、これは 2.8125em になります。それはずっと短いでしょう。em で 45px に近づけるには、実際には 3.5em 前後になり、px では実際には 56px になります。何故ですか?それはブラウザの問題ですか?ちなみに私はサファリを使っています。
6 に答える
em
問題の要素の font-size に等しい。ボタンの font-size が16pxとem
異なる場合、同様に異なります。
これまで見てきた要素はすべて、font-size を 16px に設定する必要があります。これは多くのブラウザのデフォルトであるため、それほど驚くべきことではありません。
私は16pxが1emに等しいことを知っています。
それは違うの。unil1em
は特定のピクセル値に対応しておらず、要素の現在のフォントの文字サイズに対応しています。
ボタンのフォントはデフォルトで異なります。ボタンのフォントを設定すると、慣れたサイズになります。
ただし、サイズを特定のピクセル数にしたい場合は、のpx
代わりに単位を使用する必要がありem
ます。同じフォントファミリとフォントサイズを指定したem
場合でも、ブラウザとオペレーティングシステムによって単位が多少異なる場合があります。
他の人は、em 単位がピクセルにどのように関係しているかについての誤解について話していますが、根底にある問題は十分に解決されていません。
今日、同じ問題について投稿しましたが、ここで showdev から回答がありました。
基本的に、ボタンには「システムフォント」が適用されており、親のフォントサイズを継承するのを防ぎます。これは、私が見る限り、すべての主要なブラウザーで発生し、「予期される動作」です。
これを克服するには、CSS で、ボタン タグ (または特定のボタンのみ) がフォント サイズを明示的に継承するように指定します。
button {
font-size:inherit;
}
これにより、扱っている他の要素と同じように em サイズを扱うようになります。もちろん、それによってテキストのサイズも変更されますが、これは問題になる場合とそうでない場合があります...
ボタンのline-heightは、他の要素のline-heightとは異なる場合があります。さらに、設定したベースが1emの場合、1emは16pxになります。それは非常にうまくいくかもしれませんが、あなたが与えた説明では私にははっきりしなかったので、私はそれを指摘したいと思います。
CSS の単位に関するこのページから:
em と ex の単位はフォントによって異なり、ドキュメント内の要素ごとに異なる場合があります。emは単にフォントサイズです。
em
ユニットの詳細については、素晴らしい em ユニットとその他のベスト プラクティスを参照してください。
「em」の意味は、長年にわたって変化してきました。すべてのフォントに「M」という文字が含まれているわけではありませんが (中国語など)、すべてのフォントに高さがあります。したがって、この用語は文字「M」の幅ではなく、フォントの高さを意味するようになりました。
CSS では、em 単位は長さを測定するための一般的な単位です。たとえば、ページの余白や要素の周囲のパディングなどです。
最後に、W3 仕様からの定義:
em単位
それが使用されている要素の 'font-size' プロパティの計算値に等しい。
1em 等しい font-size デフォルトは 16px に等しい (ブラウザのデフォルトの font-size オプション)
例
<button style="padding:0;border:0;background:#2f55c3;color:#fff;min-width:4em;height:3em;font-size:1em;">Text</button>