2012-03-05 10 views
0

divのフォントサイズを変更するまでjavascriptでフォントのサイズを変更しています。サイトのレイアウトが流動的でdivのサイズが変更されているためそれに応じてフォントを一致させます。JSフォントサイズ変更は、IE以外のブラウザでは徐々に動作しません

それは単純なループです:

while (!overflow(div)) { 
     fontSize += 1; 
     div.css("font-size", fontSize + "%"); 
    } 

不思議なことに、唯一のIEはそれを正しくありません。

Chrome、Firefox、Operaは、フォントサイズを直線的に調整するのではなく、不規則な間隔で調整します。

など。 Chromeはフォントサイズを108%、120%、129%に調整するだけで、その間のすべての値は無視されているようです。 MozとOperaには独自の間隔(小さいもの)があるので、そこで何が起こっているのか把握するのは容易ではありません。

誰かがアイデアを得ましたか?

+0

私は、ループがDOMアップデートよりも速く実行されていると思います。ちょうど野生の推測。 – epascarello

+1

オーバーフロー機能とは何ですか? – epascarello

+0

'関数のオーバーフロー(obj){ \t return(obj [0] .scrollHeight/obj [0] .clientHeight> 1)?正誤; } ' – Ryan

答えて

0

WebKitベースのブラウザとFirefoxは、ページのレンダリング全体をより効率的にするために、DOMをタイムスタンプしてバッチ更新するように最適化されています。アイデアは、DOMへの複数の連続した更新は、個々のレンダリングを必要とすることはめったにありませんが、最後には1つのレンダリングだけが必要であるということです。しかし、まだレンダリングをトリガーする方法はあります。ブラウザに強制的にページのレイアウトを変更させるゲッターを呼び出すだけです。あなたのループ内で、スタイルプロパティを設定した後、各反復でレンダリングする引き金と付け加え

o = div.offsetWidth; 

Googleの技術者Tony GentilcoreのブログにあるWebKitに再レイアウトを引き起こすすべてのメソッドとゲッタープロパティのうち、a listがあります。

+0

いいえ、それはしませんでした。無効。私が待っていると「ギャップ」も残っている。言う、私は私のブラウザウィンドウのサイズを変更しています:IEは途中でフォントをきちんと調整しますが、Chromeはサイズ間を移動してギャップを作成します。また、実際には1〜2%に過ぎない場合は、ジャンプして一時停止してから108%〜120%の間でジグザグを実行することもできます。 – Ryan

関連する問題