Create CSS Class (JavaScript)
This function (createCSSClass
) creates a new class with the given style. However, it does not work in version of Opera prior to 9, due to lack of support for document.styleSheets
. For example, if you want all text in a pre element bold, you would do createCSSClass("pre", "font-weight: bold")
. Note, that if you already have the rule defined, it will replace it, unless it is not a stylesheet with media type 'screen' (or media not set) or it is not the first linked/embedded screen stylesheet.
So for example, if you had the following:
<link rel="stylesheet" href="print.css" media="print" /> <link rel="stylesheet" href="screen.css" /> <style type="text/css">pre { border: 1px solid #000}</style>
When you do createCSSClass("pre", "font-weight: bold")
, it will replace the rule in screen.css
(or add it if it does not exist). Any styles defined in print.css
and the following <style>
will not be replaced.
The function itself:
function createCSSClass(selector, style) { // using information found at: http://www.quirksmode.org/dom/w3c_css.html // doesn't work in older versions of Opera (< 9) due to lack of styleSheets support if(!document.styleSheets) return; if(document.getElementsByTagName("head").length == 0) return; var stylesheet; var mediaType; if(document.styleSheets.length > 0) { for(i = 0; i<document.styleSheets.length; i++) { if(document.styleSheets[i].disabled) continue; var media = document.styleSheets[i].media; mediaType = typeof media; // IE if(mediaType == "string") { if(media == "" || media.indexOf("screen") != -1) { styleSheet = document.styleSheets[i]; } } else if(mediaType == "object") { if(media.mediaText == "" || media.mediaText.indexOf("screen") != -1) { styleSheet = document.styleSheets[i]; } } // stylesheet found, so break out of loop if(typeof styleSheet != "undefined") break; } } // if no style sheet is found if(typeof styleSheet == "undefined") { // create a new style sheet var styleSheetElement = document.createElement("style"); styleSheetElement.type = "text/css"; // add to <head> document.getElementsByTagName("head")[0].appendChild(styleSheetElement); // select it for(i = 0; i<document.styleSheets.length; i++) { if(document.styleSheets[i].disabled) continue; styleSheet = document.styleSheets[i]; } // get media type var media = styleSheet.media; mediaType = typeof media; } // IE if(mediaType == "string") { for(i = 0;i<styleSheet.rules.length;i++) { // if there is an existing rule set up, replace it if(styleSheet.rules[i].selectorText.toLowerCase() == selector.toLowerCase()) { styleSheet.rules[i].style.cssText = style; return; } } // or add a new rule styleSheet.addRule(selector,style); } else if(mediaType == "object") { for(i = 0;i<styleSheet.cssRules.length;i++) { // if there is an existing rule set up, replace it if(styleSheet.cssRules[i].selectorText.toLowerCase() == selector.toLowerCase()) { styleSheet.cssRules[i].style.cssText = style; return; } } // or insert new rule styleSheet.insertRule(selector + "{" + style + "}", styleSheet.cssRules.length); } }
Comments