Signatur
Beschreibung
getComputedStyle() liefert die Styles, die der Browser tatsächlich auf ein Element anwendet. Das ist das Ergebnis aus allen Stylesheets, der Kaskade, der Vererbung und den Standardwerten. Die Eigenschaft element.style zeigt dagegen nur die Inline-Styles aus dem style-Attribut. Deshalb ist getComputedStyle() das richtige Werkzeug, wenn du wissen willst, wie ein Element wirklich aussieht, etwa welche Farbe, Größe oder Sichtbarkeit es hat.
Das zurückgegebene Objekt (CSSStyleDeclaration, in neueren Spezifikationen CSSStyleProperties) ist live: Wenn sich die Styles des Elements ändern, zeigt es beim nächsten Zugriff automatisch die neuen Werte. Du kannst es aber nicht beschreiben. Ein Schreibversuch wirft einen NoModificationAllowedError. Werte liest du am besten mit getPropertyValue('kebab-case-name') oder über die camelCase-Eigenschaft (style.backgroundColor). Nur mit getPropertyValue() kannst du auch CSS-Custom-Properties (--meine-variable) auslesen.
Die meisten Werte kommen als aufgelöste Werte (resolved values) zurück. Längen stehen dann meist in px, Farben im Format rgb() oder rgba(). Typische Einsatzfälle:
- die tatsächliche Größe oder den Abstand eines Elements messen
- prüfen, ob ein Element sichtbar ist
- CSS-Variablen in JavaScript auslesen, zum Beispiel für ein Theme
- den Inhalt von
::beforeund::afterauslesen - vor einer CSS-Transition einen Reflow erzwingen
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $element Pflicht | Element | Das Element, dessen berechnete Styles gelesen werden sollen. Ist es kein Element (z. B. ein Textknoten), wird ein TypeError geworfen. |
|
| $pseudoElt | string | null | null | Optionales Pseudo-Element, z. B. '::before', '::after' oder '::placeholder'. Bei null oder ohne Angabe werden die Styles des Elements selbst geliefert. |
Rückgabewert
getPropertyValue() oder die camelCase-Eigenschaften.Beispiele
Tatsächliche Farbe und Schriftgröße auslesen
// CSS: .hinweis { color: tomato; font-size: 1.25rem; }
const el = document.querySelector('.hinweis');
const style = getComputedStyle(el);
console.log(style.color); // camelCase-Zugriff
console.log(style.getPropertyValue('font-size')); // kebab-case-Zugriff
console.log(el.style.color); // nur Inline-Styles -> leer
CSS-Custom-Property (Theme-Variable) lesen
// CSS: :root { --brand-color: #0066cc; --spacing: 8px; }
const rootStyle = getComputedStyle(document.documentElement);
const brand = rootStyle.getPropertyValue('--brand-color').trim();
const spacing = parseFloat(rootStyle.getPropertyValue('--spacing'));
console.log(brand, spacing * 2);
Inhalt eines ::before-Pseudo-Elements auslesen
// CSS: .pflicht::before { content: '* '; color: red; }
const label = document.querySelector('.pflicht');
const before = getComputedStyle(label, '::before');
console.log(before.content);
console.log(before.color);
Sichtbarkeit prüfen und Transition per Reflow starten
const isVisible = (el) => {
const s = getComputedStyle(el);
return s.display !== 'none' && s.visibility !== 'hidden' && parseFloat(s.opacity) > 0;
};
const panel = document.querySelector('#panel');
panel.style.opacity = '0';
panel.hidden = false;
// Lesezugriff erzwingt Style-Berechnung, damit die Transition greift
getComputedStyle(panel).opacity;
panel.style.transition = 'opacity 300ms';
panel.style.opacity = '1';
console.log(isVisible(panel));
// Wichtig · Fallstricke
- Performance: Jeder Lesezugriff kann eine synchrone Neuberechnung der Styles und des Layouts erzwingen (Reflow). Rufe
getComputedStyle()deshalb nicht in engen Schleifen abwechselnd mit DOM-Änderungen auf. Lies die Werte stattdessen gesammelt und schreibe danach. - Nur lesen: Wenn du dem Objekt einen Wert zuweist, wirft das einen
NoModificationAllowedError. Zum Setzen nutzt duelement.styleoder CSS-Klassen. - Kurzschreibweisen wie
margin,borderoderfontliefern je nach Browser unterschiedliche oder leere Werte. Frage deshalb besser die Einzel-Eigenschaften ab, etwamargin-top. - Format der Werte: Längen werden meist in
pxaufgelöst, Farben alsrgb()/rgba(). Bei Werten wiewidth: autohängt das Ergebnis davon ab, ob das Element dargestellt wird: Beidisplay: nonekannautozurückkommen. Die gerenderte Größe misst du zuverlässiger mitgetBoundingClientRect(). - Custom-Properties werden oft mit führenden Leerzeichen geliefert. Verwende
.trim(). - Datenschutz: Beim Pseudo-Selektor
:visitedliefern Browser absichtlich die Werte für nicht besuchte Links, damit sich der Browserverlauf nicht auslesen lässt. - Elemente aus einem anderen Dokument (z. B. aus einem iframe) liest du am besten mit dem
defaultViewdieses Dokuments aus:el.ownerDocument.defaultView.getComputedStyle(el). - Kompatibilität: Die Methode funktioniert in allen modernen Browsern. Der Internet Explorer unterstützt sie erst ab Version 9, ältere Versionen boten nur
currentStyle.