2012-03-15 15 views
5

Estoy tratando de obtener el valor de una propiedad de CSS heredada mediante Javascript. No he podido encontrar una respuesta completa.¿Cómo puedo obtener el valor CSS heredado usando Javascript?

Ejemplo CSS:

div { 
    width: 80%; 
} 

Ejemplo de marcado:

<div id="mydiv"> Some text </div> 

utilizando JavaScript (jQuery, o nativo), necesito para obtener el ancho de la element-- no en píxeles, pero el cadena "80%".

$('#mydiv').css('width'); // returns in px 
$('#mydiv')[0].style.width // empty string 
getComputedStyle($('#mydiv')[0]).width // returns in px 

La razón por la que necesito el valor como una cadena es porque necesito copiar el estilo a otro elemento. Si se declara como un porcentaje, el otro valor debe ser un porcentaje. Si se declara en px, el otro valor debe estar en px.

El truco real es que esta propiedad podría ser heredada, no declarada explícitamente en el elemento (como en mi ejemplo).

¿Alguien tiene alguna idea?

+0

Posible duplicado [Valores de CSS heredados a través de Javascript] (http://stackoverflow.com/questions/1169967/customer-css-values-via-javascript) – Martin

+0

No solo tiene el problema si necesita obtener un valor heredado , también necesita obtener un valor de%, que no es simple: http://stackoverflow.com/questions/7131462/getting-values-of-global-stylesheet-in-jquery/7132264#7132264 – maxedison

+0

@Martin: Es no es exactamente un duplicado ... Vi esa respuesta, pero necesito el valor%. – t3rminus

Respuesta

3

No hay manera de obtener el valor porcentual me temo. Usted puede intentar algo como esto:

var widthpx = getComputedStyle($('#mydiv')[0]).width; 
var parentWidth = $('#mydiv').parent().css('width') 

var width = (100 * parseFloat(widthpx)/parseFloat(parentWidth)) + '%'; 
+0

Lo siento, pero eso está mal. Ver mi respuesta – Bergi

+0

¿Qué parte está mal? – Jivings

+0

que no sería posible. Hay formas, incluso sin jQuery. – Bergi

0

obtener el offSetWidth del elemento, y el offsetWidth de su offsetParent, y calcular el porcentaje de los dos enteros.

0

Esto vincula un controlador de eventos a un elemento para el evento click y alerta el ancho relativo del elemento en comparación con su elemento principal.

​$('#mydiv').on('click', function() { 

    //element width divided by parent width times 100 to make a percentage 
    alert(Math.round($(this).width()/$(this).parent().width() * 100) + '%'); 
});​​​​​​​​​​ 

Aquí es una demostración: http://jsfiddle.net/X67p5/

5

Lo que están buscando es this quirksmode.org article. Propone la función

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; 
} 

Aún así, debe leer ese artículo detenidamente. Los nombres de los styleProp s no son realmente de navegador cruzado, y verá cómo los diferentes navegadores manejan esto. Opera parece tener el mejor soporte para informar los valores correctos.

+0

Esta es una biblioteca y no admite oficialmente las últimas versiones de navegador. – Jivings

+0

¿No puedo ver por qué una función de ejemplo sería una biblioteca? – Bergi

+0

Supongo que no es, simplemente parecía ser. ¿Por qué no solo publica el fragmento de código en su respuesta en lugar de vincularlo? Luego eliminaré mi voto negativo. – Jivings

Cuestiones relacionadas