Fenster: 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 durchgeführt wurden.
Einzelne CSS-Eigenschaftswerte können über APIs, die vom 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 Pseudo-Element 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 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 angesehen, auch wenn das Pseudo-Element selbst nicht unterstützt wird. Darüber hinaus unterstützt der aktuelle 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 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 inspizieren - einschließlich der Stile, die durch ein<style>
-Element oder ein externes Stylesheet festgelegt wurden. - Das
element.style
-Objekt sollte verwendet werden, um Stile an diesem Element festzulegen oder Stile, die direkt aus JavaScript-Manipulationen oder dem globalenstyle
-Attribut hinzugefügt wurden, zu inspizieren.
Das erste Argument muss ein Element
sein. Nicht-Elemente, wie ein Text
-Knoten, werfen einen Fehler.
defaultView
In vielen Codebeispielen 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 Kombination aus dem Wunsch, keine Testspezifikation für window
schreiben zu müssen, und dem Bedürfnis, eine API bereitzustellen, die auch in Java verwendet werden kann.
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-Eigenschafts-Langnamen sowie Kurzbezeichnungen. Zum Beispiel enthält das zurückgegebene Objekt Einträge fürborder-bottom-width
zusätzlich zu den Kurzbezeichnungenborder-width
undborder
Kurzbezeichnungseigenschaften. Sie können Werte mit Langnamen wiefont-size
sowie mit Kurzbezeichnungen wiefont
abfragen. - Den CSS-Eigenschaftswerten kann mit der Methode
getPropertyValue(propName)
oder durch direktes Indizieren in das Objekt mit Array- oder Punkt-Notation wieobj['z-index']
oderobj.zIndex
zugegriffen werden. - Die von
getComputedStyle
zurückgegebenen Werte sind aufgelöste Werte. Diese entsprechen normalerweise den berechneten Werten 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 „einsatzbereiten“ Endwerte von Eigenschaften nach Kaskadierung und Vererbung, aber CSS 2.1 definierte sie als Vorlayout und verwendete Werte als Postlayout. Für CSS 2.0-Eigenschaften gibtgetComputedStyle
die alte Bedeutung der berechneten Werte zurück, jetzt als verwendete Werte bezeichnet. Ein Beispielunterschied zwischen Vor- und Nach-Layout-Werten umfasst die Auflösung von Prozentwerten fürwidth
oderheight
, da diese nur für verwendete Werte durch ihren Pixeläquivalent ersetzt werden. - Zur Vermeidung des Problems des „CSS-History-Leaks“ geben Browser manchmal absichtlich ungenaue Werte zurück. So kann es sein, dass die berechneten Stile für einen besuchten Link zurückgegeben werden, als wäre die verknüpfte URL nie besucht worden. Siehe Das CSS History Leak schließen und Datenschutzbezogene Änderungen bei CSS
:visited
für Beispiele, wie dies implementiert wird. - Während CSS-Übergängen gibt
getComputedStyle
in Firefox den ursprünglichen Eigenschaftswert zurück, aber den endgültigen Eigenschaftswert in WebKit. - In Firefox geben Eigenschaften mit dem Wert
auto
den verwendeten Wert und nicht den Wertauto
zurück. 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 serielle Farbwerte als
rgb()
-Farben ausgedrückt, wenn der Alpha-Kanal-Wert genau1
ist, und alsrgba()
-Farben in allen anderen Fällen. In beiden Fällen wird die alte Syntax verwendet, mit Kommata als Trennzeichen (zum Beispielrgb(255, 0, 0)
).
Spezifikationen
Specification |
---|
CSS Object Model (CSSOM) # dom-window-getcomputedstyle |
Browser-Kompatibilität
BCD tables only load in the browser