フォントサイズの指定、って

先日、デザイナの方からコーディングクロスチェックにおいてフォントサイズを突っ込まれました。漠然とではありますが、ちくと調べてみましたよ。

命題

  1. 見た目10pxで表示する
  2. WinIE6(以下IE)とWinFirefox1.5(以下Firefox)でフォントの見栄えを統一(できるだけ)
  3. ブラウザで文字サイズを小さくした時に小さくなりすぎるのを防ぐ

前提

  1. Firefoxのオプションにて既定フォントサイズを16pxにする(IEとの同期のため)
  2. 標準準拠モードでレンダリング(HTML書式はXHTML 1.0 tranditional)かつUTF-8
  3. 命題1を実現するためにCSSでフォントサイズを%もしくはemで指定する
  4. CSSでデフォルトサイズを以下のように指定
body {
font: small/160% "Hiragino Kaku Gothic Pro", "MS ゴシック", verdana, arial, Sans-Serif;
}

検証

命題2について

前提1と4より、通常ではフォントは見かけ12px位で表示されます。これを見かけ10pxで表示したいため、

10 / 12 = 0.8333

より、83%もしくは0.83emとすれば10pxで表示される・・・ハズであるが

Firefox
 想定通り、見かけ10pxで表示
IE
 文字間が詰まって小さく見えるが、見かけ12pxで表示

あら???IEサイズかわってないヨ!!
もうちょっと小さく(75%もしくは0.75em)してみると

12 * 0.75 = 9

で9pxで表示されると思ったのですが・・

Firefox
 見かけ10pxで表示
IE
 見かけ10pxで表示

君たち計算デキテナイヨ!!!

理論上の数字では上手くいかない。

Firefoxでは計算上のサイズになってくれるのですが、IEではそうも行かない。%やemで細かく指定しても、そのサイズが無ければブラウザは近似値のサイズを取るらしいのですが、その近似値の取り方に違いがあるみたい。

Firefox
 100〜89% - 12px
  88〜74% - 10px
  73〜    -  8px
IE
 100〜79% - 12px
  78〜64% - 10px
  63〜  - 8px
※emでの指定も同様

要するに命題1と2をクリアするにはフォントサイズを 78〜74%で指定しなければならないデス。

命題3について

上記検証のように75%もしくは0.75emで指定したときに、ブラウザで文字サイズを変更してみます。

Firefox - 文字サイズ 小さく
 見かけ8pxで表示
IE - 文字のサイズ「小」
 若干文字間は詰まるものの、見かけ10pxで表示

なんだこりゃ。IE感度悪し。
推測しますに、ブラウザが近似値を取るものの、実はバックグラウンドでは指定したパーセンテージを保持しているのでは。(実際、文字間が微妙に詰まっているのはそのため?)
例えばIEで命題1をクリアするために78%と指定したときと64%としたときでは命題3について問題が発生します。

78%で指定 + 文字サイズ「小」
 若干文字間が詰まるが、見かけ10pxで表示
64%で指定 + 文字サイズ「小」
 見かけ 8pxで表示(!!)

・・文字サイズ「中」→「小」→「最小」の縮小率まで出さないといけないのですか??Firefoxで「Ctrl + -」押したときの縮小率まで出さないといけないのですか??

結論

(X)HTMLにおいて見かけのフォントサイズを(ハックなしに)キレイに統一することは困難、かつナンセンス。ユーザビリティを考慮すれば、px指定などでサイズを固めてしまうのは禁忌になっていますよね(IE以外では変更できますけど)。
フォントサイズに関しては、丁寧にハックかけてあげるかチェッカーがめんどくさがり屋であることを祈りましょう(おい)
あと、ブラウザは掛け算がニガテ

補足

IEFirefoxでしか検証してません。。実開発では当然macも当然考慮に入れますので、より緻密な検証が必要ですね。みんなどうしてるんだろ?
また、%とemの間でも見かけサイズに差異があるらしいです(今回の検証では再現されませんでしたが)。そもそもfont-size:smallにも疑問が残ります。smallって何パーセント?みたいな。
この件に関しまして進展ありましたら、またご報告申し上げまする。