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 aufgelöst wurden.
Einzelne CSS-Eigenschaftswerte werden über die vom Objekt bereitgestellten APIs oder durch Indizierung mit CSS-Eigenschaftsnamen abgerufen.
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. Ausgelassen (oder
null
) bei realen Elementen.
Rückgabewert
Ein live CSSStyleDeclaration
-Objekt, das sich automatisch aktualisiert, 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::part()
oder::slotted()
ist.Hinweis: Ein gültiger Pseudo-Element-Selektor bezieht sich auf die syntaktische Gültigkeit, z. B. wird
::unsupported
als gültig betrachtet, selbst 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-Arbeitsgruppe 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. 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 der von einem<style>
-Element oder einem externen Stylesheet gesetzten Stile. - Das
element.style
-Objekt sollte verwendet werden, um Stile an diesem Element zu setzen oder direkt hinzugefügte Stile zu inspizieren, die durch JavaScript-Manipulation oder das globalestyle
-Attribut hinzugefügt wurden.
Das erste Argument muss ein Element
sein. Nicht-Elemente, wie ein Text
-Knoten, werfen einen Fehler.
defaultView
In vielen Code-Beispielen wird getComputedStyle
vom document.defaultView
-Objekt aus verwendet. In fast allen Fällen ist dies unnötig, da getComputedStyle
auch im window
-Objekt existiert. Wahrscheinlich war das defaultView
-Muster eine Mischung aus dem Wunsch, keine Testspezifikation für window
zu schreiben, und der Erstellung einer API, die 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>
Anmerkungen
- Das zurückgegebene
CSSStyleDeclaration
-Objekt enthält aktive Werte für CSS-Eigenschaften mit Langschreibweise sowie Kurzschreibweisen. Beispielsweise enthält das zurückgegebene Objekt Einträge fürborder-bottom-width
zusätzlich zu denborder-width
undborder
Kurzschreibweise-Eigenschaftsnamen. Sie können Werte mit Langnamen wiefont-size
sowie Kurzschreibweisen wiefont
abfragen. - CSS-Eigenschaftswerte können mit der Methode
getPropertyValue(propName)
oder durch direkte Indizierung im Objekt über Array- oder Punktschreibweise wieobj['z-index']
oderobj.zIndex
abgerufen werden. - Die von
getComputedStyle
zurückgegebenen Werte sind aufgelöste Werte. Diese sind normalerweise dieselben wie CSS 2.1s berechnete Werte, 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 "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
den alten Bedeutungsgehalt der berechneten Werte zurück, jetzt als verwendete Werte bezeichnet. Ein Unterschied zwischen Vor- und Nach-Layout-Werten besteht beispielsweise in der Auflösung von Prozentsätzen fürwidth
oderheight
, da diese nur für verwendete Werte durch ihre Pixeläquivalente ersetzt werden. - Zur Vermeidung des "CSS-Verlauf-Lecks" Sicherheitsproblems geben Browser vorsätzlich ungenaue Werte für die berechneten Stile eines besuchten Links zurück, als ob der Benutzer die verlinkte URL nie besucht hätte. Siehe Schließen des CSS-Verlauf-Lecks und Datenschutzbezogene Änderungen für CSS
:visited
für Beispiele, wie dies implementiert wird. - Während CSS-Übergängen gibt
getComputedStyle
in Firefox den ursprünglichen Eigenschaftswert, in WebKit jedoch den Endwert der Eigenschaft zurück. - 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 enthaltenen Block vonheight:100px
anwenden, gibt der berechnete Stil von Firefox fürtop
70px
zurück, da 100 − 30 = 70. - Aus Kompatibilitätsgründen werden serialisierte Farbwerte als
rgb()
-Farben ausgedrückt, wenn der Alpha-Kanal-Wert genau1
ist, undrgba()
-Farben andernfalls. In beiden Fällen wird die veraltete Syntax mit Kommata als Trennzeichen verwendet, z. B.rgb(255, 0, 0)
.
Spezifikationen
Specification |
---|
CSS Object Model (CSSOM) # dom-window-getcomputedstyle |
Browser-Kompatibilität
BCD tables only load in the browser