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 alle grundlegenden Berechnungen dieser Werte aufgelöst wurden.
Einzelne CSS-Eigenschaften können über APIs, die von dem Objekt bereitgestellt werden, oder durch Indizierung mit CSS-Eigenschaftsnamen abgerufen werden.
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 Pseudoelement angibt, das abgeglichen werden soll. 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 ist 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 angesehen, obwohl das Pseudoelement selbst nicht unterstützt wird. Zusätzlich unterstützt der neueste W3-Standard explizit nur::before
und::after
, während der CSS WG-Entwurf diesen Wert nicht beschränkt. Die Browser-Kompatibilität kann variieren.
Beispiele
In diesem Beispiel stylen wir ein <p>
Element, rufen dann 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 derjenigen, die durch ein<style>
Element oder ein externes Stylesheet festgelegt wurden. - Das
element.style
Objekt sollte verwendet werden, um Stile für dieses Element zu setzen oder um Stile zu überprüfen, 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 Codebeispielen wird getComputedStyle
vom document.defaultView
Objekt verwendet. In fast allen Fällen ist dies unnötig, da getComputedStyle
auch im window
Objekt vorhanden ist. Wahrscheinlich war das defaultView
Muster eine Kombination von Leuten, die das Schreiben einer Testspezifikation für window
vermeiden wollten und einer API, die auch in Java nutzbar war.
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 im Langformat sowie Kurzformen. Zum Beispiel enthält das zurückgegebene Objekt Einträge fürborder-bottom-width
zusätzlich zu den Kurzformat-Eigenschaftsnamenborder-width
undborder
. Sie können Werte mit Langformat-Namen wiefont-size
sowie Kurzformat-Namen wiefont
abfragen. - CSS-Eigenschaftswerte können mit der
getPropertyValue(propName)
Methode oder direkt durch Indizierung in das Objekt mit Array- oder Punktsyntax wieobj['z-index']
oderobj.zIndex
abgerufen werden. - Die von
getComputedStyle
zurückgegebenen Werte sind aufgelöste Werte. Diese sind in der Regel die gleichen wie die berechneten Werte von CSS 2.1, aber für einige ältere Eigenschaften wiewidth
,height
oderpadding
sind sie stattdessen die gleichen wie die verwendeten Werte. Ursprünglich definierte CSS 2.0 die berechneten Werte als die "einsatzbereiten" Endwerte von Eigenschaften nach 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 Nachlayout-Werten umfasst die Auflösung von Prozentwerten fürwidth
oderheight
, da diese nur für verwendete Werte durch ihre Pixeläquivalente ersetzt werden. - Zur Vermeidung des "CSS History Leak" Sicherheitsproblems geben Browser manchmal absichtlich ungenaue Werte zurück. Um dieses Sicherheitsrisiko zu vermeiden, können Browser falsche Angaben zu den berechneten Stilen für einen besuchten Link machen und Werte zurückgeben, als ob der Benutzer die verlinkte URL nie besucht hätte. Sehen Sie Plugging the CSS history leak und Privacy-related changes coming to CSS
:visited
an, um Beispiele dafür zu sehen, wie dies implementiert wird. - Während CSS-Übergängen gibt
getComputedStyle
den ursprünglichen Eigenschaftswert in Firefox zurück, aber den Endwert 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 umschließenden Block vonheight:100px
anwenden, gibt der berechnete Stil von Firefox fürtop
70px
zurück, da 100 − 30 = 70 ist. - Aus Kompatibilitätsgründen werden serielle Farbwerte als
rgb()
Farben ausgedrückt, wenn der Alpha-Kanalwert genau1
ist, undrgba()
Farben andernfalls. In beiden Fällen wird die ältere Syntax mit Kommas als Trennern verwendet (zum Beispielrgb(255, 0, 0)
).
Spezifikationen
Specification |
---|
CSS Object Model (CSSOM) # dom-window-getcomputedstyle |