Rahul Utb
Rahul Utb

Reputation: 489

How to access css properties in javascript when applied via external CSS file?

I have a little problem. When I set the css rule using some property, say, background-image in an external .css file and then try to access it using javascript in another external .js file, it does not work. That is to say I do not get any value for document.getElementById(someId).style.backgroundImage.

But when I set the css rule using style attribute in html file itself, it works.

So, my query is can't I access css property in js, if css is set in external .css file.

Upvotes: 17

Views: 18310

Answers (6)

Payal
Payal

Reputation: 44

This is the method to access external CSS Properties. You can try with this.

var x = document.getElementById('someId');

var getProperty = window.getComputedStyle('x');

var getImage = getProperty.getPropertyValue('background-image');

Upvotes: 1

Marin
Marin

Reputation: 12910

the style property can be used to set styles and to retrieve inline style values, but it cannot retrieve style values set in an external style sheet.

someElement = document.getElementById("element");
myStyles = document.defaultView.getComputedStyle(someElement,null);
backgroundImage = myStyles.getPropertyValue("background-image"); // w3c
backgroundImage = someElement.currentStyle["background-image"]; //IE

Upvotes: 2

gblazex
gblazex

Reputation: 50109

You can only access style properties in Javascript that have been set via Javascript (or the style attr).

To access the elements current style you should fetch the computed style of the element.

var el = document.getElementById('hello');
var comp = el.currentStyle || getComputedStyle(el, null);
alert( comp.backgroundColor );

Note, that the computed style may vary in browsers (like color being in hex or rgb) so you should normalize that if you want unified results.

Upvotes: 24

kennebec
kennebec

Reputation: 104780

If you are trying to access a css property set in a stylesheet, rather than an inline style property, use document.defaultView.getComputedStyle (anything but IE below 9) or element.currentStyle in older IE's.

eg:

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,'font-size')

Upvotes: 3

mway
mway

Reputation: 4392

Are you trying to retrieve the property before it's actually rendered/the DOM is ready? Try doing it in the body's onload event, or if you're using jQuery, $(document).ready().

Upvotes: 1

Ankur Chauhan
Ankur Chauhan

Reputation: 1390

You could use jquery to edit. Refer to http://api.jquery.com/css/

Upvotes: 0

Related Questions