ブラウザのフォントサイズを検出することはできますか? また、ユーザーがメニュー選択からフォント サイズを変更したときに、新しいフォント サイズを無効にすることは可能ですか? みんな助けてくれてどうもありがとう。よろしくお願いします。
6 に答える
ブラウザのフォントサイズを検出することはできますか?
一種ですが、めったに良い考えではありません。<body> にフォント サイズが設定されておらず、干渉するルール (「body div」など) がないと仮定します。
var measure= document.createElement('div');
measure.style.height= '10em';
document.body.appendChild(measure);
var size= measure.offsetHeight/10;
document.body.removeChild(measure);
サイズは 1em のピクセル単位で表示されます。
また、ユーザーがメニュー選択からフォント サイズを変更したときに、新しいフォント サイズを無効にすることは可能ですか?
直接ではありませんが、上記のようなメジャー関数を頻繁にポーリングできます。IE では、CSS 式 () のチェックをオフにすることができます。これは、フォント サイズが変更されたときに再計算されるためです (他の多くの場合)。 )とにかく非推奨です)。
私は同じことが必要でした。ここで私は最良の答えを見つけました。
https://developer.mozilla.org/en-US/docs/DOM/window.getComputedStyle
私の知る限り、調べる方法はありません。デフォルトのサイズが標準の 16 ピクセルであると仮定します。
ベスト プラクティスは、すべてのフォント サイズを em で設定し、ベース フォント サイズに応じてスケーリングすることです。
ほとんどの人は基本フォントを 10 ピクセルに設定して、ems での作業を容易にしています。
例
16px = 1em
p {
font-size:2em;
}
それは32pxに相当します
10px = 0.625em
body {
font-size:0.625em;
}
p {
font-size:2em;
}
これは 20px に相当します。
お役に立てば幸いです。
短い答えはノーです。ただし、ユーザーのフォントサイズに応じて、さまざまな要素にさまざまなサイズを配置したいと考えています。その場合は、現在のフォント サイズを基準として定義されている「em」で CSS ルールを指定する方法を検討してください。
テキストサイズの変更を監視する私の動機は、要素の高さ(または幅)を動的に変更して、ページ全体がブラウザウィンドウのスクロールバーを必要としないようにすることです。通常、これを行うと、サイズ変更イベントに応答しますが、フォントサイズの変更も計算に影響を与える可能性があります。実際のフォントサイズはあまり気にせず、いつ変更されるかを知る必要があります。
これが私が使用するjQueryコードです。これは、bobinceによって提案された解決策に似ています。divの高さなどを更新するサイズ変更機能があります。
$(window).resize(resize); // update when user resizes the window.
$("body").append("<p id='textSizeReference' style='display:none;padding:0'>T</p>");
var refTextHeight = $("#textSizeReference").height();
setInterval(function() {
var h = $("#textSizeReference").height();
if (h != refTextHeight) {
refTextHeight = h;
resize(); // update when user changes text size
}
}, 500);
これがlocation.hashの変更をポーリングするajaxアプリの場合、テキストサイズの変更に同じポーリング関数を使用できます。
これは、IE でドキュメントの現在のフォント ファミリを検出するのにうまく機能することがわかったものです。
document.documentElement.currentStyle["fontFamily"]
Firefox/Opera の場合:
指定された特定の要素の css スタイルを返すことになっている getComputedStyle というメソッドがありますが、ドキュメント全体でそれを取得する方法はまだわかりません。
これが多少役立つことを願っています!