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 und alle grundlegenden Berechnungen dieser Werte durchgeführt wurden.
Einzelne CSS-Eigenschaftswerte werden über APIs abgerufen, die vom Objekt bereitgestellt werden, oder durch Indizierung mit CSS-Eigenschaftsnamen.
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 zu matchende Pseudoelement angibt. Weggelassen (oder
null
) für reale Elemente.
Rückgabewert
Ein live CSSStyleDeclaration
-Objekt, das sich automatisch aktualisiert, wenn die Stile des Elements geändert werden.
Ausnahmen
TypeError
-
Wenn das übergebene Objekt kein
Element
ist oderpseudoElt
kein gültiger Pseudoelement-Selektor oder::part()
oder::slotted()
ist.Hinweis: Ein gültiger Pseudoelement-Selektor bezieht sich auf die syntaktische Gültigkeit, z.B. wird
::unsupported
als gültig betrachtet, obwohl das Pseudoelement selbst nicht unterstützt wird. Zusätzlich 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 im 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 der gleiche CSSStyleDeclaration
-Typ wie das Objekt, das von der style
-Eigenschaft des Elements zurückgegeben wird. Allerdings haben die beiden Objekte unterschiedliche Zwecke:
- Das Objekt von
getComputedStyle
ist schreibgeschützt und sollte verwendet werden, um den Stil des Elements zu inspizieren — einschließlich derjenigen, die durch ein<style>
-Element oder ein externes Stylesheet gesetzt wurden. - Das
element.style
-Objekt sollte verwendet werden, um Stile auf diesem Element zu setzen oder Stile zu inspizieren, die direkt durch JavaScript-Manipulation oder das globalestyle
-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 Code-Beispielen wird getComputedStyle
vom document.defaultView
-Objekt verwendet. In fast allen Fällen ist dies unnötig, da getComputedStyle
auch auf dem window
-Objekt existiert. Es ist wahrscheinlich, dass das defaultView
-Muster eine Kombination aus Leuten war, die keinen Testspezifikationscode für window
schreiben wollten und eine API erstellen wollten, die auch in Java verwendet werden konnte.
Verwendung mit Pseudoelementen
getComputedStyle
kann Stilinformationen von Pseudoelementen abrufen (wie ::after
, ::before
, ::marker
, ::line-marker
— siehe die Pseudoelement-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-Eigenschaftsnamen in Langform sowie in Kurzform. Zum Beispiel enthält das zurückgegebene Objekt Einträge fürborder-bottom-width
zusätzlich zuborder-width
undborder
Kurzform-Eigenschaftsnamen. Sie können Werte mit Langformnamen wiefont-size
sowie Kurzformnamen wiefont
abfragen. - CSS-Eigenschaftswerte können mit der Methode
getPropertyValue(propName)
oder durch direkte Indizierung des Objekts mit Array- oder Punktnotation wieobj['z-index']
oderobj.zIndex
abgerufen werden. - Die von
getComputedStyle
zurückgegebenen Werte sind aufgelöste Werte. Diese sind normalerweise dieselben wie die berechneten Werte von CSS 2.1, aber für einige ältere Eigenschaften wiewidth
,height
oderpadding
, sind sie stattdessen dieselben wie verwendete Werte. Ursprünglich definierte CSS 2.0 die berechneten Werte als die "bereit zur Verwendung" finalen Werte von Eigenschaften nach der Kaskadierung und Vererbung, aber CSS 2.1 definierte sie als vor dem Layout und verwendete Werte als nach dem Layout. Für CSS 2.0-Eigenschaften gibtgetComputedStyle
die alte Bedeutung der berechneten Werte zurück, jetzt genannt verwendete Werte. Ein Beispielunterschied zwischen Vor- und Nach-Layout-Werten umfasst die Auflösung von Prozentsätzen fürwidth
oderheight
, da diese nur bei verwendeten Werten durch ihre Pixeläquivalente ersetzt werden. - Zurückgegebene Werte sind manchmal absichtlich ungenau. Um das Sicherheitsproblem "CSS History Leak" zu vermeiden, können Browser bei den berechneten Stilen für einen besuchten Link lügen und 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 implementiert wird. - Während CSS-Übergängen, gibt
getComputedStyle
den ursprünglichen Eigenschaftswert in Firefox zurück, aber den finalen Eigenschaftswert in WebKit. - In Firefox geben Eigenschaften mit dem Wert
auto
den verwendeten Wert zurück, nicht den Wertauto
. Wenn Sie alsotop:auto
undbottom:0
auf ein Element mitheight:30px
und einem umgebenden Block vonheight:100px
anwenden, gibt der berechnete Stil fürtop
in Firefox70px
zurück, da 100 − 30 = 70 ist. - Aus Kompatibilitätsgründen werden serialisierte Farbwerte als
rgb()
ausgedrückt, wenn der Alpha-Kanal-Wert genau1
ist, und alsrgba()
für andere Fälle. In beiden Fällen wird die ältere Syntax verwendet, mit Kommas als Trennzeichen (zum Beispielrgb(255, 0, 0)
).
Spezifikationen
Specification |
---|
CSS Object Model (CSSOM) # dom-window-getcomputedstyle |