Funkcija getComputedStyle
Funkcija getComputedStyle omogućava
da dobijete vrednost bilo kog CSS svojstva elementa,
čak i iz CSS fajla.
Sintaksa
let objekat = getComputedStyle(element);
Detalji
Kako radi (pažnja: ne onako kako
očekujemo): parametrom funkcija prihvata element,
a vraća objekat, koji u sebi sadrži
sva CSS svojstva prosleđenog elementa.
Hajde da stavimo taj objekat u promenljivu
style. Naziv je proizvoljan, ovo je
samo promenljiva - kako smislimo, tako ćemo
i da pristupamo:
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem); // u style se nalaze CSS svojstva
Hajde da prikažemo, na primer, širinu. To se radi
ovako - style.width:
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log(style.width);
Da biste prikazali, na primer, levi padding
- radimo ovako - style.paddingLeft:
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log(style.paddingLeft);
U sledećem primeru prikazaćemo sva CSS svojstva koja nas zanimaju za naš element:
<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); // prikazaće '30px'
console.log('borderTopWidth: ' + style.borderTopWidth); // prikazaće '20px'
console.log('borderTopStyle: ' + style.borderTopStyle); // prikazaće 'solid'
Netačnost getComputedStyle
Ponekad funkcija getComputedStyle radi
ne sasvim ispravno sa širinom i visinom.
To je povezano sa tim da padding i granica
proširuju blok. U sledećem primeru bloku je
zadata širina 200px, kao i granica
i border. Stvarna širina bloka je 300px,
ali getComputedStyle će svejedno prikazati
200px:
<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); // prikazaće '200px'
console.log('height: ' + style.height); // prikazaće '200px'
Dakle: ispada da getComputedStyle
zanemaruje proširenje bloka i pokazuje njegove
dimenzije kao da tog proširenja nije bilo.
Ali to još nije sve: takođe je bitno prisustvo
ili odsustvo trake za pomeranje - neki
brauzeri oduzimaju širinu trake za pomeranje
od širine izračunate preko getComputedStyle,
a neki ne oduzimaju. Ukratko, ovde uopšte
sve nije više-brauzerski i bolje je getComputedStyle
za određivanje širine i visine ne koristiti,
već koristiti metrike, koje ćemo da izučimo
malo niže.
Izračunate vrednosti
Postoji još jedan nijansa: ako je širina zadata u
% - onda ćemo nakon rada getComputedStyle videti
je u px. Dakle u suštini mi ne dobijamo
zadatu širinu, već izračunatu. Pogledajte
na sledećem primeru:
<div id="elem">tekst</div>
#elem {
width: 30%; /* širina je zadata u % */
height: 200px;
padding: 30px;
border: 20px solid #BCBCBC;
overflow: auto;
}
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log('width: ' + style.width); // prikazaće širinu u px
Pogledajte takođe
-
svojstvo
cssText,
koje masovno zadaje CSS stilove