Как получить доступ к свойствам CSS в javascript при применении через внешний файл CSS?
У меня небольшая проблема.
Когда я устанавливаю правило css, используя какое-либо свойство, скажем, фоновое изображение во внешнем файле .css, а затем пытаюсь получить к нему доступ с помощью javascript в другом внешнем файле .js, он не работает. То есть я не получаю никакого значения для document.getElementById(someId).style.backgroundImage.
Но когда я устанавливаю правило css, используя атрибут style в самом файле html, он работает.
Итак, мой запрос: я не могу получить доступ к свойству css в js, если css установлен во внешний файл .css.
Ответы
Ответ 1
Вы можете получить доступ только к свойствам стиля в Javascript, которые были установлены через Javascript (или style
attr).
Чтобы получить доступ к стилю текущего стиля, вы должны получить computed style
элемента.
var el = document.getElementById('hello');
var comp = el.currentStyle || getComputedStyle(el, null);
alert( comp.backgroundColor );
Обратите внимание, что вычисленный стиль может варьироваться в браузерах (например, цвет находится в шестнадцатеричном или rgb), поэтому вы должны нормализовать, если хотите получить унифицированные результаты.
Ответ 2
Если вы пытаетесь получить доступ к набору свойств CSS в таблице стилей,
а не свойство встроенного стиля,
используйте document.defaultView.getComputedStyle(ничего, кроме IE ниже 9)
или element.currentStyle в старых IE.
например:
function deepCss (who, css){
var dv, sty, val;
if(who && who.style){
css= css.toLowerCase();
sty= css.replace(/\-([a-z])/g, function(a, b){
return b.toUpperCase();
});
val= who.style[sty];
if(!val){
dv= document.defaultView || window;
if(dv.getComputedStyle){
val= dv.getComputedStyle(who,'').getPropertyValue(css);
}
else if(who.currentStyle){
val= who.currentStyle[sty];
}
}
}
return val || '';
}
deepCss (document.body, 'размер шрифта')
Ответ 3
Вы пытаетесь восстановить свойство до его фактического отображения /DOM готов? Попробуйте сделать это в теле onload
, или если вы используете jQuery, $(document).ready()
.
Ответ 4
Вы можете использовать jquery для редактирования. См. http://api.jquery.com/css/
Ответ 5
свойство style можно использовать для установки стилей и получения встроенных значений стиля, но оно не может получить значения стиля, установленные во внешней таблице стилей.
someElement = document.getElementById("element");
myStyles = document.defaultView.getComputedStyle(someElement,null);
backgroundImage = myStyles.getPropertyValue("background-image"); // w3c
backgroundImage = someElement.currentStyle["background-image"]; //IE