Свойство element.style
позволяет вам знать только те свойства CSS, которые были определены как inline в этом элементе (программно или определены в атрибуте style элемента). должен получить вычисленный стиль .
Не так просто сделать это кросс-браузерным способом, у IE есть свой собственный путь через свойство element.currentStyle
, а через DOM Level 2 стандартный способ, реализованный другими браузерами, метод document.defaultView.getComputedStyle
.
Два способа имеют различия, например, свойство IE element.currentStyle
предполагает, что вы обращаетесь к именам свойств CCS, состоящим из двух или более слов, в camelCase (например, * 1023) *, fontSize
, backgroundColor
и т. Д.), Стандартный способ ожидает свойства со словами, разделенными тире (например, max-height
, font-size
, background-color
и т. Д.).
Кроме того, IE element.currentStyle
вернет все размеры в единицах, которые они указали (например, 12pt, 50%, 5em), стандартным способом всегда будет вычисляться фактический размер в пикселях.
Некоторое время назад я сделал кросс-браузерную функцию, которая позволяет вам получать вычисленные стили кросс-браузерным способом:
function getStyle(el, styleProp) {
var value, defaultView = (el.ownerDocument || document).defaultView;
// W3C standard way:
if (defaultView && defaultView.getComputedStyle) {
// sanitize property name to css notation
// (hypen separated words eg. font-Size)
styleProp = styleProp.replace(/([A-Z])/g, "-$1").toLowerCase();
return defaultView.getComputedStyle(el, null).getPropertyValue(styleProp);
} else if (el.currentStyle) { // IE
// sanitize property name to camelCase
styleProp = styleProp.replace(/\-(\w)/g, function(str, letter) {
return letter.toUpperCase();
});
value = el.currentStyle[styleProp];
// convert other units to pixels on IE
if (/^\d+(em|pt|%|ex)?$/i.test(value)) {
return (function(value) {
var oldLeft = el.style.left, oldRsLeft = el.runtimeStyle.left;
el.runtimeStyle.left = el.currentStyle.left;
el.style.left = value || 0;
value = el.style.pixelLeft + "px";
el.style.left = oldLeft;
el.runtimeStyle.left = oldRsLeft;
return value;
})(value);
}
return value;
}
}
Вышеприведенная функция не подходит для некоторых случаев, например, для цветов, стандартный метод возвращает цвета в нотации rgb (...) , в IE они возвращают их в том виде, как они были определены .
Я сейчас работаю над статьей в теме, вы можете следить за изменениями, которые я вносил в эту функцию здесь .