2010-07-07 2 views
0

Voici mon problème: quand je appelle document.defaultView.getComputedStyle (Noeud "") .getPropertyValue ("line-height")safari retour valeur de style "normal" pour "line-height"

safari renvoie la chaîne "normal" lorsqu'aucune hauteur de ligne n'est spécifiée, alors que firefox renvoie toujours la valeur en pixels. Cela me pose un gros problème, d'autant plus que je n'ai pas trouvé de formule fiable pour obtenir la valeur numérique (je l'ai trouvé entre 1em et 1.3 mais rien de précis).

Existe-t-il une solution?

+0

Êtes-vous sûr que la page ne s'affiche pas en mode Quirks? – Hello71

Répondre

0

Non, il n'y a pas de solution. Les valeurs par défaut seront toujours différentes entre les navigateurs, car il n'y a pas de standard pour ce que les valeurs par défaut doivent être.

Les utilisateurs peuvent définir leur propre feuille de style pour remplacer les normes, de sorte que vous pouvez même obtenir des résultats différents à partir de deux instances différentes du même navigateur.

+0

Selon [MDN] (https://developer.mozilla.org/en-US/docs/CSS/used_value), "les dimensions (par exemple, width, line-height) sont toutes en pixels." Il semble que les développeurs WebKit ne sont pas d'accord. :) –

+0

@AndresRiofrio 'line-height' est un cas particulier. Vous pouvez définir une valeur en unités de longueur comme '2em',' 20px' etc, mais aussi en valeurs sans unité comme '2', qui se comporte presque, mais pas tout à fait, comme' 2em'. –

1

Eh bien, je trouve une solution partielle:

function getLineHeight(node){ 
     var clh=document.defaultView.getComputedStyle(node, "").getPropertyValue("line-height"); 
     var copy; 
     if (clh=="normal"){ 

      copy=node.cloneNode(false); 
      copy.style.padding=0+"px"; 
      copy.style.border="none"; 
      copy.innerHTML="x <br> x <br> x <br> x <br> x <br> x <br> x <br> x <br> x <br> x"; 
      node.parentNode.insertBefore(copy, node); 
      clh=copy.offsetHeight/10; 
      node.parentNode.removeChild(copy); 
      delete copy; 
     } 
     else clh=parseFloat(clh); 
     return clh; 
    } 

Pour ceux qui se demandent pourquoi tous ces « br » dans le « innerHTML » bien offsetHeight retourne des valeurs entières, donc à l'aide d'un noeud 10 en ligne et en divisant le résultat par 10 donne une réponse plus précise.