Open Sans
Google Fonts API / CSS を介してOpenType Webフォントを読み込んでいます。
Chrome 43 (Linux+Windows) と Internet Explorer 11 (Windows) の両方で、ブラウザーはフォントで指定されたとおりにテキストをレンダリングします。ただし、Firefox 38.0.5 では、一部の文字でテキストの幅や間隔が異なる方法でレンダリングされます。すべてのフォント バリアントはデフォルト値 (「通常」) です。
例として、文字1
、a
、b
、およびを使用できますi
。Open Sans の "unitsPerEm" は 2048 です。したがって、18.0px のフォント サイズでは、上記の各文字の 30 文字の幅は、1/u * p * c * w に基づいて次のようになります。ここで、u = 2048、p = 18.0、c = 30、w は各文字の前進幅です ( Wolfram Alpha 方程式)。
+----------------------------------------+-------- ---+ | | チャー | フォント (px) | numChars | 進む | 幅 (ピクセル) | +--------+---------+----------+-----------+--------+-------- ---+ | | 1 | 18.0 | 30 | 1171 | 308.76 | | | | | 18.0 | 30 | 1139 | 300.322 | | | b | 18.0 | 30 | 1255 | 330.908 | | | 私 | 18.0 | 30 | 518 | 136.582 | +----------------------------------------+-------- ---+
これ ( JSFiddle ) は、キャンバス メソッドを使用して、、、、およびのそれぞれのmeasureText
30 文字の幅をピクセル単位で出力します。1
a
b
i
Chrome のテキストの長さは、期待される値と正確に一致します。
a
Firefox Linux のテキストの長さは、Firefox がサブピクセル精度を提供しないという事実を考慮した後でも、を除くどの文字とも一致しません。
canvas によって報告された幅が実際に Chrome と Firefox の両方で出力されるものであることを確認しました。次の画像は背景が赤で、Chrome のテキストは黒、Firefox のテキストは白です。 Gimp「測定」ツール。Firefox のb
andi
は広1
すぎ、狭すぎます:
a
また、補足として、Firefox Windows のテキストの長さは Firefox Linuxとさえ一致していませb
ん。1
i
これは、デフォルト設定で拡張機能がインストールされていないクリーンな Firefox プロファイルです。
誰かが何が起こっているのか、また Firefox にフォント仕様に従って強制的にフォントをレンダリングさせる方法を説明できますか?
更新: Windows では、問題を解決するように設定を設定しますgfx.font_rendering.directwrite.enabled
(true
これは、ハードウェア アクセラレーションが利用可能な場合の Firefox のデフォルトであると考えられます。この設定は、私のテスト用 VMWare システムのように、ハードウェア アクセラレーションが利用できない場合でも強制的に有効にします)。DirectWrite は、バージョン 37 以降、Windows 上の Chrome のデフォルトです。Linux の動作はまだ説明されていません。このブログ投稿では、Windows 上の Firefox での DirectWrite レンダリングについて詳しく説明しています。