各プラットフォームが異なるサイズでテキストをレンダリングする場合、異なるプラットフォームで正確なサイズを取得するにはどうすればよいですか? この問題は、 Firefox 4の最近のリリースで悪化しました。このバージョンでは、 DirectWriteを使用したテキストのハードウェア レンダリングが有効になります。DirectWrite で書かれたテキストのサイズは、ハードウェア アクセラレーションなしで書かれたテキストよりもはるかに大きくなります。次の例に注意してください。CSS を表示する必要がある場合は、ライブの例を次に示します。
- Windows 7 64 ビット ホーム
- ATI Radeon HD 4670
- ドライバーが更新されていないため、DirectWrite がオフになっています。
- 620×283
- Windows Vista 64 ビット ビジネス
- nVidia GeForce 8800GT
- ドライバーを更新したばかりなので、DirectWrite はオンになっています。
- 620×293
HTML
<ul>
<li><a>Nav</a></li>
<li><a>Nav</a></li>
<li><a>Nav</a></li>
</ul>
<div>
Content
</div>
CSS
ul {
float: left;
width: 10em;
}
div {
margin: 0 0 0 12.7em;
min-height: 26.1em;
}
DirectWrite がオフのときはナビゲーションがコンテンツとどのように並んでいるかわかりますが、DirectWrite がオンのときはナビゲーションがコンテンツよりも高くなっていますか? 私はいくつかのハッキーな解決策があることを知っています。1 つは、すべて ( font-size, width, height
) を px で指定することです。コンポーネントはモジュール化されないため、これは理想的ではありません。つまり、別のサイズにスケーリングされた別の設定で再利用することはできません。また、IE6 のフォント サイズ オプションも壊れます。もう 1 つの解決策は、JavaScript を使用してナビゲーションの物理的な高さを読み取り、コンテンツを同じ高さにすることです。スタイルを設定するのは CSS の役割であるため、これは理想的ではありません。これに対するCSSソリューションはありますか?
これは多くの例の 1 つにすぎません。もう 1 つの問題は、Ubuntu 9 の Firefox 3 のテキストがはるかに広いため、すべてのリンクがメインのナビゲーションに収まらないことです。で最後のナビゲーションリンクを切り落とすことを余儀なくされましたmax-width: 37em; overflow: hidden
。