Функktion getComputedStyle
Die Funktion getComputedStyle ermöglicht es,
den Wert einer beliebigen CSS-Eigenschaft eines Elements zu erhalten,
sogar aus einer CSS-Datei.
Syntax
let Objekt = getComputedStyle(Element);
Details
So funktioniert es (Achtung: nicht so, wie wir
es erwarten): Die Funktion nimmt das Element als Parameter entgegen
und gibt ein Objekt zurück, das alle CSS-Eigenschaften
des übergebenen Elements enthält.
Lassen Sie uns dieses Objekt in einer Variable
style speichern. Der Name ist beliebig, es ist
einfach eine Variable - wie wir sie uns ausdenken, so
werden wir darauf zugreifen:
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem); // in style liegen die CSS-Eigenschaften
Lassen Sie uns zum Beispiel die Breite ausgeben. Das macht man
so - style.width:
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log(style.width);
Um zum Beispiel den linken padding
auszugeben - macht man so - style.paddingLeft:
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log(style.paddingLeft);
Im nächsten Beispiel geben wir alle für uns interessanten CSS-Eigenschaften für unser Element aus:
<div id="elem">text</div>
#elem {
width: 200px;
height: 200px;
padding: 30px;
border: 20px solid #BCBCBC;
overflow: auto;
}
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log('paddingLeft: ' + style.paddingLeft); // gibt '30px' aus
console.log('borderTopWidth: ' + style.borderTopWidth); // gibt '20px' aus
console.log('borderTopStyle: ' + style.borderTopStyle); // gibt 'solid' aus
Ungenauigkeit von getComputedStyle
Manchmal funktioniert die Funktion getComputedStyle
nicht ganz korrekt mit Breite und Höhe.
Das hängt damit zusammen, dass padding und Rand
den Block erweitern. Im nächsten Beispiel hat der Block
eine Breite von 200px, sowie einen Rand
und border. Die tatsächliche Breite des Blocks beträgt 300px,
aber getComputedStyle gibt trotzdem
200px aus:
<div id="elem">text</div>
#elem {
width: 200px;
height: 200px;
padding: 30px;
border: 20px solid #BCBCBC;
overflow: auto;
}
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log('width: ' + style.width); // gibt '200px' aus
console.log('height: ' + style.height); // gibt '200px' aus
Das heißt: Es stellt sich heraus, dass getComputedStyle
die Blockerweiterung ignoriert und seine
Abmessungen so anzeigt, als ob diese Erweiterung nicht vorhanden wäre.
Das ist aber noch nicht alles: Auch das Vorhandensein
oder Fehlen einer Scrollleiste spielt eine Rolle - einige
Browser subtrahieren die Breite der Scrollleiste
von der Breite, die über getComputedStyle berechnet wurde,
andere subtrahieren sie nicht. Kurz gesagt, hier ist überhaupt
alles nicht cross-browser-kompatibel und es ist besser, getComputedStyle
nicht zur Bestimmung von Breite und Höhe zu verwenden,
sondern die Metriken zu nutzen, die wir
weiter unten studieren werden.
Berechnete Werte
Es gibt noch einen weiteren Nuance: Wenn die Breite in
% angegeben ist - dann werden wir sie nach der Anwendung von getComputedStyle
in px sehen. Das heißt, im Grunde erhalten wir nicht
die angegebene Breite, sondern die berechnete. Sehen Sie sich
das folgende Beispiel an:
<div id="elem">text</div>
#elem {
width: 30%; /* Breite in % angegeben */
height: 200px;
padding: 30px;
border: 20px solid #BCBCBC;
overflow: auto;
}
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log('width: ' + style.width); // gibt die Breite in px aus
Siehe auch
-
die Eigenschaft
cssText,
die CSS-Stile massenweise setzt