2009-09-18 7 views
7

あなたが知っているように、emは相対フォント測定で、emはデフォルトフォントサイズの文字「M」の高さに等しい。それを使用する利点は、テキストのサイズを変更できるためです。JavaScriptまたはJQueryを使用してデフォルトのフォントサイズをピクセル単位で取得するにはどうすればよいですか?

JavaScriptやJQueryを使って、現在の環境のデフォルトフォントサイズ(ピクセル単位)を取得するにはどうすればよいですか?

に関して、

答えて

15

状況のカップルは、私はM-原理は神話であると信じて、これはuseful-

function getDefaultFontSize(pa){ 
pa= pa || document.body; 
var who= document.createElement('div'); 

who.style.cssText='display:inline-block; padding:0; line-height:1; position:absolute; visibility:hidden; font-size:1em'; 

who.appendChild(document.createTextNode('M')); 
pa.appendChild(who); 
var fs= [who.offsetWidth, who.offsetHeight]; 
pa.removeChild(who); 
return fs; 
} 

警告(getDefaultFontSize())

+0

非常に良い。おめでとう。私はそれがうまく動作することを望む。 UPvote。 –

+0

これは 'width'は私にとっては間違っています(ページ幅です)。それを 'div'から' span'に変更すると、それが修正されます。 – ThinkingStiff

+0

私の 'html'要素のフォントサイズが100%(つまり、ブラウザの設定が何であれ)であっても、ウェブサイト上の他のサイズは' em 'で宣言されていますか?上記のコードは私にフォントサイズをpxで返します。これは自由に交換可能ですか? – Jens

0

デフォルトのフォントサイズを取得することは良い考えかもしれないように思えるが、 - それはあなたのページと、そのようなレイアウトを設定するなら、それだけでユーザーがいることを処理させるために、おそらくより安全勧めします。

フォントサイズが大きい場合は、ブラインドでブラインドで、逆も同様です。デフォルトを設定し、解像度/サイズを「推薦する」ことをお勧めします。あなたのアプリケーションがそれに依存している場合を除き、ユーザーがそれを処理させてください。

4

これまで私が見たことのあるトリックは、何らかのテキスト(たとえば50の任意の文字またはM)をレンダリングし、レンダリングされたコンテナのサイズを測定し、その高さと幅を計算する単一の文字。これはあなたのために行くのですか?バックグラウンドでレンダリングを行うことができ、ユーザーはそれを見ることができません。

+0

これは良いアイデアのように聞こえるが、別の良い解決策があると思う。 –

+0

実際、これは最近行われていることとほぼ同じです。 – Triptych

+0

Ok Glenn、UPvote –

1

これはFFで動作します。 jQueryのを使用して

<script> 
function getStyle(el,styleProp) 
{ 
    var x = document.getElementById(el); 
    if (x.currentStyle) 
     var y = x.currentStyle[styleProp]; 
    else if (window.getComputedStyle) 
     var y = document.defaultView.getComputedStyle(x,null).getPropertyValue(styleProp); 
    return y; 
} 

function GetSt() 
{ 
    var font_size = getStyle("div2","fontSize"); 
    alert (font_size); 
} 

</script> 
<div id="div1" style="height: 100px;font-size: 20px;"> 
<div id="div2" style="font-size: 2em;"> 
test 
</div> 
</div> 
<button onclick="GetSt();">Click</button> 
+0

ダミー要素を作成する代わりに、getComputedStyle()['font-size']を使用するには、ff –

+0

+1が必要です。 –

+0

しかし、あなたが彼を+1したのと同じ 'getComputedStyle'関数の独占バリアントである' currentStyle'を使うと-1となります:) – amn

2

(あなたが特定の要素のフォントサイズをしたいと仮定して):

var originalFontSize = $('#your_element_id_here').css('font-size')

あなたはプロトタイプだけでなく、jQueryのを使用している場合は、代わりにドル記号のjQueryの接頭辞を使用することをお勧めします:

var originalFontSize = jQuery('#your_element_id_here').css('font-size'); 

これはそうのような文字列として値を返します:16pxに。

+0

と同じように:特定の要素のフォントサイズが必要であると仮定します。いいえ、いいえ。私はちょうど現在の環境のデフォルトのフォントサイズが欲しいです。 –

4

ことができるがあります。少なくともhttp://www.w3.org/TR/CSS21/syndata.htmlの以下の文書は、M-原理に基づく計算が過度に複雑で不必要であることを証明している。

「日」ユニットは、それが使用されている 要素の「フォントサイズ」プロパティの計算 値に等しいです。 例外は 'font-size'プロパティ 自体の 値に 'em'がある場合です。この場合、親要素のフォントサイズは です。水平 の測定には を使用できます。

この文書から、(このユニットはまた、 時々 活版印刷のテキストでクワッド幅と呼ばれる。)で、以下の該当します。

  1. 祖先の倍率がない場合、1emはピクセルフォントのサイズとまったく同じです。

  2. emsとpercentを使用して祖先の倍率が明確に定義された方法で機能するため、単純なループでは正確なフォントサイズが計算されます。いくつかの祖先にはフォントサイズが絶対単位で設定されています。

  3. ems measure widthは、1000 emsのdivを作成し、そのclient-Widthプロパティを1000で割って、正確なピクセルフォントサイズを計算することができます。emsは1000番目に切り捨てられますピクセル結果の誤った切り捨てを避けるために1000 emが必要です。

  4. emは実際のフォントではないfont-size属性に基づいているため、おそらくM原則が失敗するフォントを作成できます。 Mが他の文字の1/3の大きさで、フォントサイズが10ピクセルの奇妙なフォントがあるとします。私はfont-sizeが文字の高さの最大値を保証していると思うので、Mは10ピクセルでなく、他のすべての文字は30ピクセルではありません。

    私は、これはあなたが探しているものだと思います
+0

良いリソース+1 –

2

function getDefaultFontSize() { 
// this will return the default* value assigned to the style: fontSize 
defsize=(document.body.style.fontSize) 
alert('The default font size of your browser is: "' + defsize + '"'); 
} 

*体が(おそらくいくつかのCSSの)コードのどこにも異なるのfontSizeのdeclerationを持っている場合、関数はその値を返します。 。例:

<style>body{font-size:20px;}</style> 
<script>function getDefaultFontSize() { 
defsize=(document.body.style.fontSize) 
} </script> 

上記の値は20pxのfontSize値を返します。


完全にテストされ、私のために働きます(chrome 22.0.1229.94 m、firefox 13.01)。

+0

要素の 'style'オブジェクトプロパティは、要素自体に*設定された**スタイルインフォメーションプロパティ(例えば、' font-size'など)のみを含みます。つまり、要素タグの一部として 'style' *属性*に表示されるか、style.fontSize = ...'のように割り当てられます。あなたの要素が、計算されたスタイルを、例えばリンクされたスタイルシートから得るか、またはドキュメント内の ''ブロックを得ると、 'document.body.style'は有用な情報を含んでいません。あなたがしているのは、 'Window.getComputedStyle'関数です。あなたが上で必要としているものとまったく同じです。 – amn