molily: em/ex <-> px

Beitrag lesen

Hallo,

Man nehme: ein Element, dessen Breite in em angegeben ist.
Man experimentiere etwas mit dem Umrechnungsfaktor für die verschiedenen IE-Versionen: var v = document.compatMode ? 10.44 : 11.8;
Man rechne die Breite (hier des Menüs) um: var em = v / document.getElementById("imenu").offsetWidth;
;-)

Guter Ansatz, ich habe das einmal ähnlich gelöst:

  
function max_width_internet_explorer () {  
 var max_width_ids = ["e"];  
 var root, cs, fontsize_string, fontsize;  
 if (  
  !document.getElementById ||  
  !(root = document.documentElement) ||  
  !(root.currentStyle) ||  
  !(fontsize_string = root.currentStyle.fontSize) ||  
  fontsize_string.substr(fontsize_string.length - 2) != "pt"  
 )  
  return;  
 fontsize = parseInt(fontsize_string);  
 var one_em_in_pt_string = root.currentStyle.fontSize;  
 var one_em_in_pt = parseInt(one_em_in_pt_string);  
 var pt_in_px_factor = 4 / 3;  
 window.one_em_in_px = one_em_in_pt * pt_in_px_factor;  
  
 var elem, max_width_em_string, max_width_em, max_width_px;  
 for (var ids_index = 0; ids_index < max_width_ids.length; ids_index++) {  
  elem = document.getElementById(max_width_ids[ids_index]);  
  if (  
   elem.currentStyle.maxWidth ||  
   !(max_width_em_string = elem.currentStyle["max-width"])  
  )  
   return;  
  max_width_em = parseInt(max_width_em_string);  
  max_width_px = one_em_in_px * max_width_em;  
  if (elem.offsetWidth > max_width_px) {  
   elem.style.width = max_width_px;  
  } else {  
   elem.style.width = "auto";  
  }  
  // alert("max_width_px: " + max_width_px + "\n" + "one_em_in_px: " + one_em_in_px);  
 }  
};  

Ich gehe also über document.documentElement.currentStyle.fontSize, in etwa wie auf http://www.svendtofte.com/code/max_width_in_ie/ beschrieben. Das ist im IE 6 standardmäßig »12pt«. 1em ist also 12pt. Den Wert rechne ich in Pixel um, der Faktor ist 4 zu 3 (das ist 96ppi soweit ich weiß). Dann habe ich den gesuchten Wert »Wieviel Pixel ist ein em?«. Dementsprechend werden ein paar Elemente mit max-width angesprochen, der CSS-Wert wird automatisch ausgelesen und es wird gegebenenfalls die width-Eigenschaft vergeben.

Ich nutze das allerdings nicht in der Praxis, das war einmal eine »Studie«. Verschiedene Umrechnungsfaktoren habe ich nicht berücksichtigt.

Mathias