Ver Mensaje Individual
  #4 (permalink)  
Antiguo 13/12/2013, 08:17
Pantaláimon
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 17 años, 10 meses
Puntos: 32
Respuesta: Crear hoja de estilo CSS con javascript

Hola marlanga.

Quizá aún no sé como funcionan los callbacks y por eso pregunto algo de perogrullo. Pero al añadir un console.log al final del código para comprobar que document.styleSheets tiene los datos correctos me encuentro que no es así.

Código Javascript:
Ver original
  1. window.onload = function() {
  2.     document.createStyleSheet( 'css/test.css' );
  3.     document.createStyleSheet(
  4.         function(sheet){
  5.             sheet.insertRule('h1 { color: red; }', 0 );
  6.         }
  7.     );
  8.     console.log( document.styleSheets );
  9. }
Esta es la salida de la consola:

Código Javascript:
Ver original
  1. <link type="text/css" rel="stylesheet" href="css/test.css">
  2. <style type=&#8203;"text/​css">&#8203;</style>&#8203;
  3. - StyleSheetList {0: CSSStyleSheet, length: 1, item: function}
  4.    + 0: CSSStyleSheet
  5.    - 1: CSSStyleSheet
  6.       - cssRules: CSSRuleList
  7.          - 0: CSSStyleRule
  8.             cssText: "h1 { color: red; }"
  9.             parentRule: null
  10.             parentStyleSheet: CSSStyleSheet
  11.             selectorText: "h1"
  12.             style: CSSStyleDeclaration
  13.             type: 1
  14.             __proto__: CSSStyleRule
  15.          + 1: CSSStyleRule
  16.          + 2: CSSStyleRule
  17.          + 3: CSSStyleRule
  18.          + 4: CSSStyleRule
  19.          + 5: CSSStyleRule
  20.          + 6: CSSStyleRule
  21.          + 7: CSSStyleRule
  22.          + 8: CSSStyleRule
  23.          length: 9
  24.          __proto__: CSSRuleList
  25.          disabled: false
  26.          href: "http://js.test/css/test.css"
  27.          media: MediaList
  28.          ownerNode: link
  29.          ownerRule: null
  30.          parentStyleSheet: null
  31.          rules: CSSRuleList
  32.          title: null
  33.          type: "text/css"
  34.          __proto__: CSSStyleSheet
  35.       + 2: CSSStyleSheet
  36.          cssRules: CSSRuleList
  37.          length: 0
  38.          __proto__: CSSRuleList
  39.          disabled: false
  40.          href: null
  41.          media: MediaList
  42.          ownerNode: style
  43.          ownerRule: null
  44.          parentStyleSheet: null
  45.          rules: CSSRuleList
  46.          title: null
  47.          type: "text/css"
  48.          __proto__: CSSStyleSheet
  49.          length: 3
  50.          __proto__: StyleSheetList

En la linea 3 ya se ve la primera cosa extraña, pues indica que document.styleSheets.length vale 1. Sin embargo cuando se expande la descripción en la linea 49 se observa que ahora length toma el valor de 3.
En la linea 4 está la hoja de estilos por defecto de Chrome.
En la linea 5 está la hoja de estilos que hacer referencia al fichero css/test.css . Si se expanden la lista de reglas se ve que la primera( linea 7 a 14 ) se corresponde con la regla "h1 { color: red; }" que debería estar insertada en la hoja de estilos anónima.
Sin embargo, en la hoja de estilos anónima(linea 35) no hay ninguna regla insertada.

Un saludo!