2010-09-01 13 views
32

Llamo a $("#foobar").css("line-height") y vuelvo a "normal". ¿Cómo traduzco esto a una cantidad de píxeles? ¿Está definido "normal" en la especificación de CSS o es específico del navegador?jQuery/CSS: altura de línea de "normal" ==? Px

+0

¿Qué navegador/plataforma usaba usted? Una demostración en vivo también podría ser de ayuda (http://jsbin.com y http://jsfiddle.net son buenos). Firefox 3.6.8 y Chrome 6.0.472.51 beta (en Ubuntu 10.04) devuelven valores de píxel, como se esperaba. En SO '$ ('div.container'). Css ('line-height');' devuelve 11.2px (FF). –

+1

Chrome en Windows XP devuelve 'normal' – Robert

Respuesta

5

Normal en realidad se conoce como abnormal en several instances ya que hay una gran incoherencia del navegador.

declarar line-height: normal, no sólo variar de un navegador a otro, lo que me había esperado, de hecho, la cuantificación de esas diferencias fue el conjunto punto sino que también varían de una fuente cara a otro, y también puede variar dentro de una cara determinada.

+7

Pensé que valía la pena ofrecer un enlace al sitio de Eric Meyer para conocer la fuente de su cita, para una lectura fascinante: http://meyerweb.com/eric/thoughts/2008/05/ 06/line-height-abnormal/ –

+0

-1 ya que esto no se acerca a responder la pregunta. Buena información, pero debería haber sido un comentario. –

+2

@MartinJespersen No voy a eliminar la respuesta ya que, incluso después de leerla ahora, sigo creyendo que respondí correctamente porque 'normal' es específico del navegador y, por lo tanto, no es coherente en el navegador y no debe traducirse a píxeles. Dicho esto, estoy muy agradecido de que se haya tomado el tiempo de dar su opinión sobre el voto a favor, ¡gracias! :) – Frankie

6

normal es una opción válida para los line-height por lo que no es realmente una forma de evitar que los navegadores para los que devolverán eso.

Como alternativa, puede usar .css('height'), ya que solo contará la sección interior de un elemento, no el relleno/borde/margen. Se necesitaría un poco de creatividad si tuviera un elemento de varias líneas o un elemento con algo más que texto.

http://jsfiddle.net/xVBfb/

Editar: Un ejemplo de un trabajo en torno sería tener

<span id='def' style='line-height:inherit;display:none;'>&nbsp;</span>

dentro del elemento, a continuación, para encontrar la altura de la línea que sólo podría utilizar el .height() de #DEF ya que siempre será solo una línea y, por lo tanto, la altura de línea del elemento padre.


Chrome en Windows XP es un ejemplo de un navegador que devuelve normal en que jsFiddle menos que se especifique expresamente lo contrario. Firefox devuelve un conteo de píxeles. normal es el valor inicial por especificación w3. http://www.w3.org/TR/CSS2/visudet.html#propdef-line-height

+0

Aparentemente, la solución que proporcionó parece ser la mejor opción. Gracias por eso. – inhan

12

Según this page, parece que la mayoría de los navegadores recientes utilizan el mismo valor para line-height: normal: 1,14, id est la propiedad font-size con un coeficiente de 1,14.

intentado con varios navegadores (en Windows XP):

  • Chrome 21.0.1180.75
  • Firefox 14.0.1
  • Safari 5.1.7
  • Opera 11.64
  • IE 7
  • IE 8

EDITAR

que estaba equivocado, line-height depende de font-family, font-size, su navegador, tal vez su sistema operativo ...

Más información en Eric Meyers' website.

+0

nota: line-height: 1em; == font-size: * any * px; –

+0

¿Significa esto que "altura de línea: 1.14em" es la declaración equivalente pero explícita? –

+0

Lo asumí, pero no es verdad. 'line-height' depende de' font-family', 'font-size', su navegador, tal vez su sistema operativo ... Encontrará algunas lecturas en [el sitio web de Eric Meyers] (http://meyerweb.com/ eric/thoughts/2008/05/06/line-height-abnormal /) – zessx

2

Es difícil calcular la altura de línea normal en píxeles. Sin embargo, según MDN es aproximadamente 1.2em.

Si usted tiene:

body{ 
    font-size: 16px; 
} 

Por lo tanto, su sitio web tiene tamaño de fuente normal 16px entonces la línea de altura normal sería más o menos 24px. Esto significa que puede calcular el valor de píxel de tamaño de fuente normal multiplicado por 1.5 que es 16px * 1.5 == 24px

Aviso: No multipliqué por 1.2 porque hay diferencia entre el valor px y el valor em.

0

Sin embargo, esto fue escrito hace mucho tiempo pero me ayudó a escribir una solución temporal en mi tarea. Estoy copiando este código que quizás otras personas puedan usarlo.

$('#lineHeightInc') 
.click(function() { 
    var box = GetSelectedBox(); 
    var ct = box.data('LineHeight'); 
    if (isNaN(ct)) 
     ct = 0; 
    ct++; 
    box.css('line-height', (parseFloat(box.css('font-size')) * 1.61 + ct) + 'px'); 
    box.data('LineHeight', ct); 
}); 

$('#lineHeightDic') 
.click(function() { 
    var box = GetSelectedBox(); 
    var ct = box.data('LineHeight'); 
    if (isNaN(ct)) 
     ct = 0; 
    ct--; 
    box.css('line-height', (parseFloat(box.css('font-size')) * 1.61 + ct) + 'px'); 
    box.data('LineHeight', ct); 
}); 
Cuestiones relacionadas