Функцијата getComputedStyle
Функцијата getComputedStyle овозможува
да се добие вредноста на било кое CSS својство на елементот,
дури и од CSS датотека.
Синтакса
let objekt = getComputedStyle(element);
Детали
Како функционира (внимание: не како што
очекуваме): како параметар функцијата прима елемент,
а враќа објект, кој содржи во себе
сите CSS својства на пренесениот елемент.
Ајде да го ставиме овој објект во променлива
style. Името е произволно, ова
е само променлива - како што замислиме, така и
ќе се обраќаме:
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem); // во style лежат CSS својства
Ајде да ја испечатиме, на пример, ширината. Ова се прави
вака - style.width:
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log(style.width);
За да се испечати, на пример, левиот padding
- правиме вака - style.paddingLeft:
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log(style.paddingLeft);
Во следниот пример ќе ги испечатиме сите нас интересни CSS својства за нашиот елемент:
<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); // ќе испечати '30px'
console.log('borderTopWidth: ' + style.borderTopWidth); // ќе испечати '20px'
console.log('borderTopStyle: ' + style.borderTopStyle); // ќе испечати 'solid'
Неточност на getComputedStyle
Понекогаш функцијата getComputedStyle работи
не сосема коректно со ширина и висина.
Ова е поврзано со фактот што padding и границата
го прошируваат блокот. Во следниот пример на блокот
му е зададена ширина 200px, како и граница
и border. Реалната ширина на блокот е 300px,
но getComputedStyle сепак ќе испечати
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); // ќе испечати '200px'
console.log('height: ' + style.height); // ќе испечати '200px'
Тоа е: излегува дека getComputedStyle
го игнорира проширувањето на блокот и ги покажува неговите
димензии како да немаше такво проширување.
Но тоа не е сè: исто така има значење присуството
или отсуството на лентата за лизгање - некои
прелистувачи ја одземаат ширината на лентата за лизгање
од ширината пресметана преку getComputedStyle,
а некои не одземаат. Во принцип овде воопшто
сè не е крос-прелистувачко и подобро е getComputedStyle
за одредување на ширина и висина да не се користи,
туку да се користат метриките кои ќе ги научиме
малку подоцна.
Пресметани вредности
Има уште еден нијанс: ако ширината е зададена во
% - тогаш по работата на getComputedStyle ќе видиме
ја во px. Тоа е во суштина ние не добиваме
зададена ширина, туку пресметана. Погледнете
го следниот пример:
<div id="elem">text</div>
#elem {
width: 30%; /* ширината е зададена во % */
height: 200px;
padding: 30px;
border: 20px solid #BCBCBC;
overflow: auto;
}
let elem = document.querySelector('#elem');
let style = getComputedStyle(elem);
console.log('width: ' + style.width); // ќе испечати ширина во px
Погледнете ги и
-
својството
cssText,
кое масовно ги задава CSS стиловите