getComputedStyle()

Renvoie les styles calculés d’un élément, c’est-à-dire les valeurs CSS que le navigateur a réellement appliquées après avoir pris en compte toutes les règles.

Renvoie
Un objet CSSStyleDeclaration vivant, en lecture seule, avec les valeurs calculées de toutes les propriétés CSS.
Sur cette page

Exemple

#
JavaScript
const badge = document.querySelector('#badge')
const styles = getComputedStyle(badge)

console.log(badge.style.color === '')
console.log(styles.color)
console.log(styles.fontSize)
console.log(styles.fontWeight)
console.log(styles.borderTopColor)
console.log(styles.display)
Console
true
rgb(167, 139, 250)
20px
700
rgb(167, 139, 250)
inline

element.style est vide, car la couleur vient de la classe. Les styles calculés montrent la couleur au format rgb(), la taille 1.25rem en pixels, bold sous la forme 700, et currentColor converti en couleur concrète. inline est le mode d’affichage par défaut de l’élément <span>.

Définition et utilisation

#

La fonction getComputedStyle() (son nom complet est window.getComputedStyle()) renvoie un objet avec les valeurs finales de toutes les propriétés CSS de l’élément. Elle tient compte des feuilles de style, des styles inline, de l’héritage et des valeurs par défaut du navigateur. C’est le moyen le plus simple de vérifier en JavaScript, par ex., la couleur donnée par une classe, car element.style ne voit que les styles écrits dans l’attribut style.

Les valeurs sont renvoyées sous forme calculée, généralement uniformisée : les couleurs en rgb(…), les longueurs en pixels (1.25rem devient par ex. "20px"), et les mots-clés comme bold en nombres ("700"). Ce sont toujours des chaînes, donc avant tout calcul, convertissez-les en nombres, par ex. avec parseFloat().

L’objet renvoyé est « vivant » : après un changement de classe ou de style, la lecture suivante montre la nouvelle valeur. Il est en lecture seule, donc modifiez les styles via element.style ou classList. Le second argument permet de lire les styles d’un pseudo-élément, par ex. getComputedStyle(el, "::before").content, et vous lisez les valeurs des variables CSS avec la méthode getPropertyValue("--nom").

Syntaxe

#
Syntaxe
getComputedStyle(element)
getComputedStyle(element, pseudoElement)

getComputedStyle(element).propertyName
getComputedStyle(element).getPropertyValue(name)

Paramètres

#
  • element

    Element

    L’élément dont vous voulez lire les styles calculés.
  • pseudoElement

    chaîne, optionnel

    Un pseudo-élément, par ex. "::before" ou "::after".

Plus d’exemples

#
Calculs sur des valeurs en pixels
JavaScript
const progress = document.querySelector('#progress')
const { width, paddingLeft } = getComputedStyle(progress)

console.log(width, paddingLeft)
console.log(parseFloat(width) - 2 * parseFloat(paddingLeft))
console.log(width + 10)
Console
300px 10px
280
300px10

Les valeurs calculées sont des chaînes avec une unité. parseFloat() en extrait les nombres, et une simple addition concatène les chaînes, comme on le voit sur la dernière ligne.

Pseudo-élément et variable CSS
JavaScript
const lesson = document.querySelector('#lesson')
const before = getComputedStyle(lesson, '::before')

console.log(before.content)
console.log(before.color)
console.log(getComputedStyle(document.documentElement).getPropertyValue('--accent'))
Console
"✓ "
rgb(16, 185, 129)
#10b981
L’objet de styles est vivant
JavaScript
const panel = document.querySelector('#panel')
const styles = getComputedStyle(panel)

console.log(styles.display)
panel.classList.add('hidden')
console.log(styles.display)
Console
block
none

Pas besoin d’appeler getComputedStyle() à nouveau. Le même objet montre immédiatement la nouvelle valeur après le changement de classe.

Compatibilité des navigateurs

#

Largement disponible

Fonctionne dans tous les navigateurs modernes, y compris sur mobile. Vous pouvez l’utiliser sans crainte.

  • Chrome
  • Edge
  • Firefox
  • Safari

Bonnes pratiques

#
  • Les valeurs calculées sont des chaînes avec des unités, par ex. "16px". Avant tout calcul, utilisez parseFloat().
  • Vous obtiendrez généralement les couleurs au format rgb(…), même si elles sont écrites en CSS sous forme de #hex ou de nom. Comparez-les dans le même format.
  • Lire les styles calculés peut forcer le navigateur à recalculer les styles et la mise en page. N’alternez pas, dans une boucle, des lectures et des changements de style.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.