Kurze Antwort: Es ist kompatibel mit allen Browsern (insbesondere IE8/7):
function createClass(name,rules){
var style = document.createElement('style');
style.type = 'text/css';
document.getElementsByTagName('head')[0].appendChild(style);
if(!(style.sheet||{}).insertRule)
(style.styleSheet || style.sheet).addRule(name, rules);
else
style.sheet.insertRule(name+"{"+rules+"}",0);
}
createClass('.whatever',"background-color: green;");
Und dieser letzte Teil wendet die Klasse auf ein Element an:
function applyClass(name,element,doRemove){
if(typeof element.valueOf() == "string"){
element = document.getElementById(element);
}
if(!element) return;
if(doRemove){
element.className = element.className.replace(new RegExp("\\b" + name + "\\b","g"));
}else{
element.className = element.className + " " + name;
}
}
Hier ist auch eine kleine Testseite: https://gist.github.com/shadybones/9816763
Das Wichtigste ist die Tatsache, dass Stilelemente eine "styleSheet"/"sheet"-Eigenschaft haben, die Sie zum Hinzufügen/Entfernen von Regeln verwenden können.