Window: getComputedStyle() Methode
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Die Window.getComputedStyle()
Methode gibt ein Objekt zurück, das die Werte aller CSS-Eigenschaften eines Elements enthält, nachdem aktive Stylesheets angewendet wurden und grundlegende Berechnungen dieser Werte aufgelöst wurden.
Einzelne CSS-Eigenschaftswerte werden durch APIs bereitgestellt, die vom Objekt zur Verfügung gestellt werden, oder durch Indexierung mit CSS-Property-Namen.
Syntax
getComputedStyle(element)
getComputedStyle(element, pseudoElt)
Parameter
element
-
Das
Element
, für das der berechnete Stil abgerufen werden soll. pseudoElt
Optional-
Ein String, der das Pseudo-Element angibt, das übereinstimmen soll. Wird es weggelassen (oder auf
null
gesetzt), wird es für reale Elemente verwendet.
Rückgabewert
Ein lebendiges CSSStyleDeclaration
Objekt, das automatisch aktualisiert wird, wenn sich die Stile des Elements ändern.
Ausnahmen
TypeError
-
Wenn das übergebene Objekt kein
Element
ist oderpseudoElt
kein gültiger Pseudo-Element-Selektor ist oder es sich um::part()
oder::slotted()
handelt.Hinweis: Ein gültiger Pseudo-Element-Selektor bezieht sich auf die syntaktische Gültigkeit, z. B. wird
::unsupported
als gültig angesehen, auch wenn das Pseudo-Element selbst nicht unterstützt wird. Darüber hinaus unterstützt der neueste W3-Standard explizit nur::before
und::after
, während der Entwurf der CSS WG diesen Wert nicht einschränkt. Die Browser-Kompatibilität kann variieren.
Beispiele
In diesem Beispiel stylen wir ein <p>
-Element, rufen diese Stile mit getComputedStyle()
ab und geben sie in den Textinhalt des <p>
aus.
HTML
<p>Hello</p>
CSS
p {
width: 400px;
margin: 0 auto;
padding: 20px;
font: 2rem/2 sans-serif;
text-align: center;
background: purple;
color: white;
}
JavaScript
const para = document.querySelector("p");
const compStyles = window.getComputedStyle(para);
para.textContent =
`My computed font-size is ${compStyles.getPropertyValue("font-size")},\n` +
`and my computed line-height is ${compStyles.getPropertyValue(
"line-height",
)}.`;
Ergebnis
Beschreibung
Das zurückgegebene Objekt ist vom gleichen Typ CSSStyleDeclaration
wie das Objekt, das von der style
-Eigenschaft des Elements zurückgegeben wird. Die beiden Objekte haben jedoch unterschiedliche Zwecke:
- Das Objekt von
getComputedStyle
ist schreibgeschützt und sollte verwendet werden, um den Stil des Elements zu überprüfen — einschließlich der Stile, die durch ein<style>
-Element oder ein externes Stylesheet gesetzt wurden. - Das
element.style
-Objekt sollte verwendet werden, um Stile auf diesem Element festzulegen oder Stile zu überprüfen, die direkt von JavaScript-Manipulationen oder dem globalenstyle
-Attribut hinzugefügt wurden.
Das erste Argument muss ein Element
sein. Nicht-Elemente, wie ein Text
-Knoten, führen zu einem Fehler.
defaultView
In vielen Codebeispielen wird getComputedStyle
von dem document.defaultView
-Objekt verwendet. In fast allen Fällen ist dies unnötig, da getComputedStyle
auch im window
-Objekt existiert. Es ist wahrscheinlich, dass das defaultView
-Muster eine Kombination aus dem Wunsch war, keine Test-Spezifikation für window
zu schreiben, und einem API, das auch in Java verwendet werden konnte.
Verwendung mit Pseudo-Elementen
getComputedStyle
kann Stilinformationen von Pseudo-Elementen abrufen (wie ::after
, ::before
, ::marker
, ::line-marker
— siehe die Pseudo-Element-Spezifikation).
<style>
h3::after {
content: " rocks!";
}
</style>
<h3>Generated content</h3>
<script>
const h3 = document.querySelector("h3");
const result = getComputedStyle(h3, ":after").content;
console.log("the generated content is: ", result); // returns ' rocks!'
</script>
Hinweise
- Das zurückgegebene
CSSStyleDeclaration
Objekt enthält aktive Werte für CSS-Property-Namen in Langform als auch Kurzform-Namen. Zum Beispiel enthält das zurückgegebene Objekt Einträge fürborder-bottom-width
zusätzlich zu denborder-width
undborder
Kurzform-Eigenschaftsnamen. Sie können Werte mit Langform-Namen wiefont-size
sowie Kurzform-Namen wiefont
abfragen. - CSS-Eigenschaftswerte können entweder mit der Methode
getPropertyValue(propName)
abgerufen werden oder indem direkt mittels Array- oder Punktnotation in das Objekt zugegriffen wird, wieobj['z-index']
oderobj.zIndex
. - Die von
getComputedStyle
zurückgegebenen Werte sind aufgelöste Werte. Diese sind in der Regel identisch mit den berechneten Werten von CSS 2.1, aber für einige ältere Eigenschaften wiewidth
,height
oderpadding
, sind sie stattdessen die gleichen wie genutzte Werte. Ursprünglich definierte CSS 2.0 die berechneten Werte als die "gebrauchsfertigen" Endwerte der Eigenschaften nach Kaskadierung und Vererbung, aber CSS 2.1 definierte sie als pre-Layout, und genutzte Werte als post-Layout. Für CSS 2.0-Eigenschaften gibtgetComputedStyle
die alte Bedeutung von berechneten Werten zurück, jetzt gebrauchte Werte genannt. Ein Unterschied zwischen pre- und post-Layoutwerten umfasst die Auflösung von Prozentwerten fürwidth
oderheight
, da diese nur für gebrauchte Werte durch ihren Pixeläquivalent ersetzt werden. - Zur Vermeidung des "CSS History Leak" Sicherheitsproblems geben Browser für einen besuchten Link manchmal absichtlich ungenaue Werte zurück, indem sie Werte zurückgeben, als ob der Benutzer die verlinkte URL nie besucht hätte. Siehe Plugging the CSS history leak und Privacy-related changes coming to CSS
:visited
für Beispiele, wie dies umgesetzt wird. - Während CSS-Übergängen gibt
getComputedStyle
in Firefox den ursprünglichen Eigenschaftswert zurück, in WebKit jedoch den finalen Eigenschaftswert. - In Firefox geben Eigenschaften mit dem Wert
auto
den genutzten Wert zurück, nicht den Wertauto
. Wenn Sie alsotop:auto
undbottom:0
auf ein Element mitheight:30px
und einen enthaltenden Block vonheight:100px
anwenden, gibt der berechnete Stil fürtop
in Firefox70px
zurück, da 100 − 30 = 70. - Aus Kompatibilitätsgründen werden serialisierte Farbwerte als
rgb()
-Farben ausgedrückt, wenn der Alphakanalwert genau1
ist, und alsrgba()
-Farben andernfalls. In beiden Fällen wird die veraltete Syntax mit Kommas als Trennzeichen verwendet (beispielsweisergb(255, 0, 0)
).
Spezifikationen
Specification |
---|
CSS Object Model (CSSOM) # dom-window-getcomputedstyle |