Functie getComputedStyle
De functie getComputedStyle maakt het mogelijk
om de waarde van elke CSS-eigenschap van een element te verkrijgen,
zelfs vanuit een CSS-bestand.
Syntaxis
let object = getComputedStyle(element);
Details
Hoe het werkt (let op: niet zoals we
verwachten): de functie accepteert een element als parameter,
en retourneert een object dat alle
CSS-eigenschappen van het doorgegeven element bevat.
Laten we dit object in een variabele stoppen
style. De naam is willekeurig, het is
gewoon een variabele - hoe we het bedenken, zo
zullen we ernaar verwijzen:
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem); // in style zitten de CSS-eigenschappen
Laten we bijvoorbeeld de breedte weergeven. Dit wordt
gedaan zo - style.width:
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log(style.width);
Om bijvoorbeeld de linker padding
weer te geven - doen we zo - style.paddingLeft:
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log(style.paddingLeft);
In het volgende voorbeeld geven we alle CSS-eigenschappen die ons interesseren voor ons element weer:
<div id="elem">tekst</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); // geeft '30px' weer
console.log('borderTopWidth: ' + style.borderTopWidth); // geeft '20px' weer
console.log('borderTopStyle: ' + style.borderTopStyle); // geeft 'solid' weer
Onnauwkeurigheid van getComputedStyle
Soms werkt de functie getComputedStyle
niet helemaal correct met breedte en hoogte.
Dit komt doordat padding en rand
het blok uitbreiden. In het volgende voorbeeld heeft het blok
een breedte van 200px, evenals een rand
en border. De werkelijke breedte van het blok is 300px,
maar getComputedStyle zal toch
200px weergeven:
<div id="elem">tekst</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); // geeft '200px' weer
console.log('height: ' + style.height); // geeft '200px' weer
Dat wil zeggen: het blijkt dat getComputedStyle
de blokuitbreiding negeert en zijn
afmetingen toont alsof deze uitbreiding er niet was.
Maar dat is nog niet alles: de aan- of afwezigheid
van een schuifbalk is ook van belang - sommige
browsers trekken de breedte van de schuifbalk af
van de breedte berekend via getComputedStyle,
en anderen doen dat niet. Kortom, hier is alles
absoluut niet cross-browser en het is beter om getComputedStyle
niet te gebruiken voor het bepalen van breedte en hoogte,
maar gebruik te maken van de metrieken die we
iets later zullen bestuderen.
Berekende waarden
Er is nog een nuance: als de breedte is ingesteld in
% - dan zullen we na de werking van getComputedStyle
het zien in px. Dat wil zeggen, in feite krijgen we niet
de ingestelde breedte, maar de berekende. Zie
het volgende voorbeeld:
<div id="elem">tekst</div>
#elem {
width: 30%; /* breedte ingesteld in % */
height: 200px;
padding: 30px;
border: 20px solid #BCBCBC;
overflow: auto;
}
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log('width: ' + style.width); // geeft de breedte in px weer
Zie ook
-
de eigenschap
cssText,
die CSS-stijlen massaal instelt