15.3.07

Creación dinámica de hojas de estilo

Muchas veces necesitamos crear hojas de estilo según las circunstancias que se nos presentan. Conocemos como alterar el estilo de un elemento, pero ¿cómo debemos crear una clase de estilo para poder aplicarlo a varios elementos?

Con el siguiente código es posible crear una hoja de estilos y agregarla a la sección HEAD del docuemnto.

var cssNode = document.createElement('style');
cssNode.type = 'text/css';
cssNode.rel = 'stylesheet';
cssNode.media = 'screen';
cssNode.title = 'dynamicSheet';
document.getElementsByTagName("head")[0].appendChild(cssNode);
Luego, mediante el uso del método addRule (IE) o insertRule (Firefox), se pueden ir agregando las reglas
var cssObj
for(var i=0; i < document.styleSheets.length; i++) {
   if(document.styleSheets[i].title == 'dynamicSheet')
   {
      cssObj = document.styleSheets[i]
      break
   }
}
if(cssObj.addRule) // IE
{
   cssObj.addRule('.myClass', 'color:red', 0)
}else{   // Firefox
   cssObj.insertRule('.myClass {color:red}', 0)
}

Tener en cuenta las siguientes diferencias de propiedades y métodos según el navegador:

Métodos
addRule(selector, regla, [índice])IEAgrega una regla. Por omisión del índice las reglas son agregadas al final de la hoja de estilos, pero puede especificarse el índice (comenzando con cero)

document.styleSheets[0].addRule(".demoClass", "background-color: blue")

insertRule(regla, indice)FireFoxEs similar al anterior pero la regla se genera en un sólo parámetro ''String''

document.styleSheets[0].addRule("demoClass {background-color: blue}")

removeRule([index])IEEsto removerá la primera regla de la hoja de estilo si no se especifica el índice.
deleteRule(index)FireFoxEsto es similara a IE, removerá la regla en el índice solicitado.

Propiedades
cssRules[]FireFoxUna tabla conteniendo las reglas de la hoja de estilo actual
rules[]IEUna tabla conteniendo las reglas de la hoja de estilo actual
disabledAmbosVerdadero si la hoja de estilo esta inhabilitada, falso si esta habilitada
hrefAmbosURL de la actual hoja de estilo.
imports[]IEUna tabla de todas las reglas importadas a través de ''@import''
lengthAmbosNúmero de hojas de estilo en el objeto
mediaAmbosMedio a la que esta orientada esta hoja de estilo
ownerNodeFireFoxRetorna el objeto del DOM padre de este objeto, generalmente ''link'' o ''style''.
owningElementIERetorna el objeto del DOM padre de este objeto, generalmente ''link'' o ''style''.
ownerRuleFireFoxSi esta hoja de estilo fue agregada via ''@import'', esto apunta al objeto padre.
parentStyleSheetAmbosSi esta hoja de estilos es producto de un ''@page'' o ''@import'', esta propiedad referencia a la hoja de estilo padre.
titleAmbosTítulo definido para la etiqueta ''style'' o ''link'.
typeAmbosTipo de la hoja de estilo, usualmente ''(text/css)''.


0 Comentarios: