2009-09-18 22 views

Odpowiedz

15

Istnieje kilka sytuacji, może to być 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; 
} 

alert (getDefaultFontSize())

+0

Bardzo dobrze. Gratulacje. Mam nadzieję, że to działa dobrze. UPvote. –

+0

"Szerokość" w tym jest dla mnie błędna (to szerokość strony). Zmiana go z 'div' na' span' naprawia. – ThinkingStiff

+0

Czy ma znaczenie, że mój element 'html' ma rozmiar 100% (tj. Niezależnie od ustawień przeglądarki), a wszystkie inne rozmiary na stronie są zadeklarowane w' em'? Powyższy kod daje mi rozmiar czcionki w px, prawda? Czy można to dowolnie wymieniać? – Jens

0

Chociaż wydaje się, że coraz domyślny rozmiar czcionki może być dobrym pomysłem - czy to aby ustawić układ stron i takie, to chyba bezpieczniejsze praktyką pozwól uchwyt użytkownika, .

Jeśli mają większy rozmiar czcionki - to dlatego, że są niewidome i vice versa. Zalecam ustawienie domyślnych ustawień i "zalecenie" rozdzielczości/rozmiaru. Chyba, że ​​Twoja aplikacja jest od niego zależna - pozwól użytkownikowi na obsługę.

4

Jedna sztuczka, którą widziałem/używałem w przeszłości, to renderowanie tekstu (powiedzmy 50 dowolnych znaków lub Ms), a następnie zmierzenie rozmiaru renderowanego kontenera i wykonanie matematyki w celu obliczenia wysokości i szerokości pojedyncza postać. Czy to właśnie zamierzasz? Renderowanie można wykonać w tle, aby użytkownik go nie widział.

+0

To brzmi jak dobry pomysł, ale myślę, że jest inne dobre rozwiązanie. –

+0

Właściwie to jest prawie tak, jak się to robi w dzisiejszych czasach. – Triptych

+0

Ok Glenn, UPvote –

1

Działa to w trybie FF.

<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

Potrzebuję obu: ie i ff –

+0

+1 do używania getComputedStyle() ["rozmiar czcionki"] zamiast tworzenia fałszywego elementu. –

+0

Ale -1 za użycie 'currentStyle', który jest zastrzeżonym wariantem dla tej samej funkcji' getComputedStyle', którą dałeś mu +1 :) – amn

2

jQuery (zakładając, że chcesz rozmiaru czcionki konkretnego elementu):

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

Jeśli używasz Prototype, jak jQuery, będziemy chcieli korzystać z prefiksu jQuery zamiast znaku dolara:

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

ta zwróci wartość jako ciąg tak: 16px.

+0

Jak już powiedziałeś: zakładając, że chcesz mieć rozmiar czcionki konkretnego elementu. Nie? Nie. Chcę tylko domyślnej wielkości czcionki w bieżącym środowisku. –

4

wierzę M-zasada jest mitem. Przynajmniej następująca dokumentacja z http://www.w3.org/TR/CSS21/syndata.html dowodzi, że obliczenia oparte na zasadzie M są zbyt skomplikowane i niepotrzebne.

Jednostka „em” jest równa komputerową wartość „rozmiar czcionki” właściwości elementu, w którym jest on używany. Wyjątkiem od jest sytuacja, gdy "em" występuje w wartości samej własności "rozmiaru czcionki", czyli , w którym to przypadku odnosi się ona do rozmiaru czcionki elementu nadrzędnego w postaci . To może być użyte do pomiaru pionowego lub poziomego . (Jednostka ta jest również czasami nazywany quad-szerokość w typograficznych tekstach.)

Od tej dokumentacji są spełnione następujące warunki.

  1. Bez powiększenia elementu nadrzędnego 1em jest dokładnie równe wielkości czcionki pikselowej.

  2. Ponieważ powiększenie przodka z ems i procent działa w dobrze określony sposób, prosta pętla obliczy dokładne rozmiary czcionek, zakładając: nie C.S.S; a niektórzy przodkowie mają ustawiony rozmiar czcionki w jednostkach absolutnych.

  3. Ponieważ szerokość wymiaru ems można zawsze obliczyć dokładny rozmiar czcionki poprzez utworzenie elementu div o długości 1000 ems i podzielenie jego właściwości client-Width o 1000. Przypominam sobie, że ems są obcięte do najbliższej tysięcznej, więc potrzebujesz 1000 ems, aby uniknąć błędnego obcięcia piksela.

  4. Prawdopodobnie można utworzyć czcionkę w przypadku niepowodzenia zasady M, ponieważ em jest oparta na atrybucie rozmiaru czcionki, a nie na faktycznej czcionce. Załóżmy, że masz dziwną czcionkę, gdzie M jest równe 1/3 rozmiaru innych znaków, a rozmiar czcionki to 10 pikseli. Myślę, że rozmiar czcionki jest gwarancją maksymalnej wysokości znaków, więc M nie będzie 10 pikseli, a wszystkie inne znaki 30 pikseli.

+0

Dobre źródło +1 –

2

myślę, że to jest to, czego szukasz:

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 + '"'); 
} 

* Jeśli organizm ma inną wielkość czcionki decleration nigdzie indziej w kodzie (być może w niektórych css) funkcja zwróci tę wartość . Na przykład:

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

Powyższe zwróci czcionkę o wielkości 20 pikseli.


W pełni przetestowany i działa dla mnie (chrom 22.0.1229.94 mi firefox 13.01).

+0

Właściwość obiektu "styl" elementu zawiera tylko te właściwości stylu (np. "Rozmiar czcionki" na przykład), które * zostały ustawione w samym elemencie *, ** inline **. Oznacza to, że możesz je umieścić w atrybucie 'style' * jako część tagu elementu, lub przypisać je jak' style.fontSize = ... 'ty, wcześniej. Jeśli twoje elementy mają swój styl obliczeniowy, powiedzmy, połączony arkusz stylów lub blok '' ' ...' w dokumencie, 'document.body.style' nie zawiera użytecznych informacji. To, czego szukasz, to funkcja 'Window.getComputedStyle'. Robi dokładnie to, czego potrzebujesz powyżej. – amn

Powiązane problemy