Funkcja getComputedStyle
Funkcja getComputedStyle pozwala
uzyskać wartość dowolnej właściwości CSS elementu,
nawet z pliku CSS.
Składnia
let obiekt = getComputedStyle(element);
Szczegóły
Jak to działa (uwaga: nie tak jak
oczekujemy): parametrem funkcja przyjmuje element,
a zwraca obiekt, który zawiera w sobie
wszystkie właściwości CSS przekazanego elementu.
Przyjmijmy ten obiekt do zmiennej
style. Nazwa jest dowolna, to
po prostu zmienna - jak wymyślimy, tak
będziemy się odnosić:
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem); // w style leżą właściwości CSS
Wypiszmy na przykład szerokość. Robi się to
tak - style.width:
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log(style.width);
Aby wypisać, na przykład, lewy padding
- robimy tak - style.paddingLeft:
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log(style.paddingLeft);
W następnym przykładzie wypiszemy wszystkie interesujące nas właściwości CSS dla naszego elementu:
<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); // wypisze '30px'
console.log('borderTopWidth: ' + style.borderTopWidth); // wypisze '20px'
console.log('borderTopStyle: ' + style.borderTopStyle); // wypisze 'solid'
Niedokładność getComputedStyle
Czasami funkcja getComputedStyle działa
nie do końca poprawnie z szerokością i wysokością.
Jest to związane z tym, że padding i obramowanie
rozszerzają blok. W następnym przykładzie blokowi
nadana jest szerokość 200px, a także obramowanie
i border. Rzeczywista szerokość bloku to 300px,
ale getComputedStyle i tak wypisze
200px:
<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); // wypisze '200px'
console.log('height: ' + style.height); // wypisze '200px'
Czyli: okazuje się, że getComputedStyle
ignoruje rozszerzenie bloku i pokazuje jego
wymiary tak, jakby tego rozszerzenia nie było.
Ale to jeszcze nie wszystko: ma również znaczenie obecność
lub brak paska przewijania - niektóre
przeglądarki odejmują szerokość paska przewijania
od szerokości obliczonej za pomocą getComputedStyle,
a niektóre nie odejmują. Generalnie tutaj w ogóle
wszystko nie jest cross-browserowe i lepiej getComputedStyle
do określania szerokości i wysokości nie używać,
a korzystać z metryk, które poznamy
nieco poniżej.
Obliczone wartości
Jest jeszcze jeden niuans: jeśli szerokość jest podana w
% - to po działaniu getComputedStyle zobaczymy
ją w px. Czyli w zasadzie otrzymujemy nie
zadaną szerokość, a obliczoną. Spójrzcie
na następującym przykładzie:
<div id="elem">text</div>
#elem {
width: 30%; /* szerokość podana w % */
height: 200px;
padding: 30px;
border: 20px solid #BCBCBC;
overflow: auto;
}
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log('width: ' + style.width); // wypisze szerokość w px
Zobacz także
-
właściwość
cssText,
która masowo ustawia style CSS