2009-07-26 17 views

Respuesta

19
$('selector').css('line-height'); 
+1

Oh, gracias, no puedo entender por qué, pero simplemente hay que olvidar que css() puede no sólo para establecer los valores, sino también para obtén ... –

+0

¡Recuerda marcar la respuesta como correcta cuando es correcta! =) –

+0

Sí, vale, soy nuevo aquí todavía) –

1
$('selector').css('line-height'); 

Devoluciones alto de línea como un valor decimal en píxeles, con la unidad, por ejemplo, "22.5px"

Se debe tener cuidado con esta solución, ya que los diferentes navegadores reportarán resultados diferentes. He descubierto que no puede usar medidas sin unidades con altura de línea (por ejemplo, 2.2) en su CSS, ya que IE6 informará un resultado incorrecto (por ejemplo, 2px en lugar de, por ejemplo, 36px). Así que recomiendo usar alturas de línea basadas en unidades con esta medida.

+5

Esto devolverá el valor de la propiedad en CSS, no necesariamente en píxeles. Por ejemplo, puede ser la cadena ''normal''. –

+0

Cuidado: en muchos navegadores, obtienes un valor que se parece a '16px', pero en IE, a veces puedes obtener un' número 'desnudo como' 1.2'. Y tenga en cuenta que * no * simplemente recupera las unidades que utilizó en CSS. Échale un vistazo: http://jsfiddle.net/alanhogan/a6a8P/ –

31

No puede estar seguro de obtener una altura de línea calculada en píxeles entre navegadores. A veces, el valor es "normal" o "heredar", que se calcula en Firefox, pero no en IE, por ejemplo. Una solución para esto (dependiendo, por supuesto, en su caso de uso) es conseguir el tamaño de fuente calculada (que puede ver), y se multiplica por 1,5, lo cual es bastante standard:

var fontSize = $(el).css('font-size'); 
var lineHeight = Math.floor(parseInt(fontSize.replace('px','')) * 1.5); 

Sí, es un poco asqueroso, pero funcionará perfectamente para cosas como determinar la altura correcta de un elemento en función de algunas líneas de texto, por ejemplo. Tenga en cuenta que puede/debe reemplazar 1.5 con cualquier relación estándar de altura de línea/tamaño de letra que ya esté utilizando en su sitio. Si no lo sabe, puede averiguar inspeccionando cualquier elemento de copia en Firebug y mirando el a) tamaño de letra calculado yb) el alto de línea. Luego, reemplace 1.5 con b/a. :-)

Espero que sea útil!

+0

¡Esta es la mejor solución que he encontrado! ¡Muchas gracias! –

+1

Esto no funcionará en IE si establece la altura de línea en un valor sin unidades (que es lo que [recomienda MDN] (https://developer.mozilla.org/es/CSS/line-height)). Ver [mi demo] (http://jsfiddle.net/alanhogan/a6a8P/). –

+1

Es posible que desee utilizar parseFloat en lugar de parseInt, ya que obtendrá un valor más preciso para su lineHeight si su tamaño de fuente tiene un valor decimal. Alan, John ha codificado un valor de altura de línea en lugar de calcularlo, por lo que su comentario no parece relevante para esta respuesta. –

2
$('selector').css('line-height'); 

Si esto devuelve un número con px, puede usar el número. Si devuelve un% o un número sin unidades, puede multiplicarlo por el tamaño de fuente y usarlo. Si se vuelve normal, me las arreglé para trabajar con esto:

var height = $element.height(); 
var font_size = parseInt($element.css('font-size')); 
var num = Math.floor(height/font_size); 
for(; height % (height/num) != 0; --num) 
    ; 
return height/num; 

Esto sólo funciona con "normal", porque se puede asumir que la altura de la línea siempre será mayor que el tamaño de la fuente.

Se basa en la idea height % line_height == 0.
Técnicamente num == height/line_height que lo hace incognoscible. Afortunadamente, el piso de height/font_size es una buena heurística porque height/line_height son generalmente iguales o cercanos, y si está apagado, siempre se sobrepasa, nuevamente porque "normal" garantiza que la altura de la línea es mayor que el tamaño de fuente, por lo que puede probar e intenta de nuevo.

+0

'var font_size = functionThatMakesThisANumber ($ element.css ('font-size')); 'puede simplificarse, no necesita una función personalizada. Use parseInt en su lugar: 'var font_size = parseInt ($ element.css ('font-size'))' – TwystO

+0

@Twist Lo noté también. ¡Actualizado! – Swivel

1

Obtenga y almacene texto, establezca texto temporalmente en una línea de valor (como "x" o "& nbsp"), obtenga y almacene .height (o .inner, o .outer, lo que necesite), reemplace el texto con valor almacenado. De ser necesario, muéstrala (por ejemplo, el elemento está oculto), luego vuelve a esconderla si es necesario.

Esta (.height) le dará la altura total de línea (tamaño de fuente más ajuste de altura de línea) en un número (como 15 para el tamaño de letra 12 y altura de línea 1.25).

Utilice un div oculto para hacer todo esto si es necesario, mostrar, obtener altura, ocultar.

Esta alerta indica el valor numeral 15, todos los navegadores:

<div id="TestDiv"> 
    Any text you want. 
</div> 

    jQuery(document).ready(function() 
{ 
    var TestText = $("#TestDiv").text(); 
    var TestDivLineHeight = $("#TestDiv") 
     .css("font-size", "12px").css("line-height", "1.25").text("x").height(); 
    alert(TestDivLineHeight); 
    $("#TestDiv").text(TestText); 
}); 
+0

Editado desde la publicación original para cambiar "12" a "12px" –

+1

También debe tener cuidado de eliminar el relleno superior e inferior si desea un valor correcto para Internet Evil 6 y 7 –

Cuestiones relacionadas