En JavaScript, a veces, es posible que desee recuperar estilos CSS aplicados a un elemento a través de estilos en línea u hojas de estilo externas. Hay varias formas disponibles para hacer esto, dependiendo de si desea obtener estilos en línea o estilos renderizados.
Obtención de estilos en línea
En JavaScript estándar, la propiedad de estilo DOM se usa para aplicar los estilos a un elemento HTML usando el style
atributo.
Digamos que tenemos el siguiente elemento HTML:
<button id="clickMe" style="color: red; font-weight: bold;">Click Me</button>
El siguiente ejemplo muestra cómo obtener la información de estilo del ejemplo anterior:
const btn = document.getElementById('clickMe');
// pint color & font weight properties
console.log(btn.style.color); // red
console.log(btn.style.fontWeight); // bold
Sin embargo, el style
propiedad solo funciona para los estilos en línea definidos usando style
atributo. Si intenta acceder a una propiedad no definida como una regla de estilo en línea, digamos backgroundColor
, un null
se devolverá el valor:
console.log(btn.style.backgroundColor); // null
El style
La propiedad no es realmente útil para obtener información de estilo que viene de otra parte, como las reglas de estilo definidas usando el <style>
elementos u hojas de estilo externas.
Obtención de estilos renderizados
Para obtener los valores reales de las propiedades CSS que se usaron para representar un elemento HTML, puede usar el getComputedStyle()
método. Este método funciona para todo:estilos en línea, hojas de estilo externas y valores predeterminados del navegador.
Digamos que tiene el siguiente <style>
incrustado elemento que define las reglas de estilo para el botón anterior:
<style>
button {
background-color: yellow;
text-align: center;
height: 20px;
width: 100px;
}
</style>
El getComputedStyle()
el método siempre se llama en el window
con el elemento como parámetro, y devuelve un objeto de propiedades:
const btn = document.getElementById('clickMe');
// get all rendered styles
const styles = window.getComputedStyle(btn);
Ahora puede acceder a cualquier propiedad CSS directamente como lo hubiera hecho con el style
propiedad. Por ejemplo, para acceder al background-color
, puedes hacer:
const backgroundColor = styles.backgroundColor; // rgb(255, 255, 0)
Para obtener la altura y el ancho representados del elemento independientemente de si se definió o no, simplemente haga lo siguiente:
const height = styles.height; // 20px
const width = styles.width; // 100px
Alternativamente, también puede usar el getPropertyValue()
en el objeto de estilos para acceder a una propiedad CSS. Acepta el real nombre de la propiedad CSS y no el que se usa para JavaScript:
const fontWeight = styles.getPropertyValue('font-weight'); // 700
El getComputedStyle()
El método es muy útil para obtener las propiedades CSS reales que utilizó el navegador para representar el elemento. Funciona en todos los navegadores modernos y antiguos, incluido IE 9 y superior.
Finalmente, el getComputedStyle()
El método solo funciona para obtener estilos. No puede usarlo para establecer un estilo específico para un elemento HTML. Para establecer las propiedades CSS, siempre debe usar la propiedad de estilo DOM, como expliqué en un artículo anterior.
Obtención de estilos a partir de pseudoelementos
Los pseudoelementos CSS son extremadamente útiles para diseñar partes de un elemento sin necesidad de elementos HTML adicionales.
Para obtener información de estilo de los pseudoelementos, debe pasar el nombre del pseudoelemento como segundo argumento al getComputedStyle()
método.
Digamos que tenemos el siguiente <p>
elemento:
<p class="tip">Learn JavaScrit for free!</p>
Aquí está el CSS ::first-letter
pseudo elemento aplicado al párrafo anterior:
.tip::first-letter {
color: green;
font-size: 22px;
}
Para recuperar la propiedad de color del .tip::first-letter
, debe usar el siguiente fragmento de código JavaScript:
const tip = document.querySelector('.tip');
// retrieve all styles
const styles = window.getComputedStyle(tip, '::first-letter');
// get color
console.log(styles.color); // rgb(0, 128, 0)
Resumen
En este artículo, analizamos diferentes formas de obtener estilos CSS de un elemento mediante JavaScript. Deberías usar:
- La propiedad de estilo DOM para recuperar estilos en línea aplicados a un elemento usando el
style
atributo. - El
window.getComputedStyle()
método para recuperar estilos calculados aplicados a un elemento a través de<style>
elementos y hojas de estilo externas. Para obtener estilos CSS de pseudoelementos, debe pasar el nombre del pseudoelemento como segundo parámetro.