Функција getComputedStyle
Функција getComputedStyle омогућава
да добијете вредност било ког CSS својства елемента,
чак и из CSS датотеке.
Синтакса
let objekat = 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 стилове