Hace poco tuve la necesidad de modificar el CSS usando JavaScript después de que se cargara toda la cabecera (<HEAD>), entonces debía buscar la forma de agregar ese CSS y actualizar la página de forma dinámica. Entonces vi en el Blog de YUI una forma bien interesante de hacerlo, para resumir lo que vamos a hacer es agregar código CSS a nuestra página a partir de una variable de texto, y si no existen dichos tags (<head> - </head>) entonces los creamos e insertamos el texto de nuestra variable.
Lo primero es crear una variable para contener el tag del header e indicarle que será del tipo "text/css":
Lo primero es crear una variable para contener el tag del header e indicarle que será del tipo "text/css":
var nodo = document.createElement("style"); nodo.type = "text/css";Luego Vamos a buscar si existe el elemento, sino lo creamos y concatenamos al nodo:
if (nodo.styleSheet) { nodo.styleSheet.cssText = codigo; } else { nodo.appendChild(document.createTextNode(codigo)); }Y por último lo agregamos al html:
document.getElementsByTagName("head")[0].appendChild(nodo);Ya solo nos resta crear la variable con el CSS dentro del script y llamar a la función, algo como esto:
var css = 'body{'+ 'font: normal 12px Arial, Helvetica, sans-serif;'+ '}'+ 'table {'+ 'border-width: medium;'+ 'border-spacing: 0px;'+ 'border-style: inset;'+ 'border-color: gray;'+ 'border-collapse: collapse;'+ 'background-color: white;'+ 'text-align:center;'+ '}'+ 'table th, table td {'+ 'border: none'+ 'border-width: 1px;'+ 'padding: 4px;'+ 'border-top: 1px solid #000;'+ '}'; agregarCss(css);El ejemplo completo vendría quedando algo así:
<html> <head> <title>Probando Script CSS</title> </head> <body> <table> <tr><td colspan="5"><span><b>UN TITULO</b></span></td></tr> <tr><td>Campo A</td><td>Campo B</td><td>Campo C</td><td>Campo D</td><td>Campo E</td></tr> <tr><td colspan="3">Texto 1</td><td colspan="2">Texto 2</td></tr> <tr><td>Celda X</td><td colspan="3">Celda Y</td><td>Celda Z</td></tr> </table> </body> <script> function agregarCss(codigo) { var nodo = document.createElement("style"); nodo.type = "text/css"; if (nodo.styleSheet) { nodo.styleSheet.cssText = codigo; } else { nodo.appendChild(document.createTextNode(codigo)); } document.getElementsByTagName("head")[0].appendChild(nodo); } var css = '.titulo {'+ 'background-color: #CFE6F9;'+ '}'+ 'body{'+ 'font: normal 12px Arial, Helvetica, sans-serif;'+ '}'+ 'table {'+ 'border-width: medium;'+ 'border-spacing: 0px;'+ 'border-style: inset;'+ 'border-color: gray;'+ 'border-collapse: collapse;'+ 'background-color: white;'+ 'text-align:center;'+ '}'+ 'table th, table td {'+ 'border: none'+ 'border-width: 1px;'+ 'padding: 4px;'+ 'border-top: 1px solid #000;'+ '}'; agregarCss(css); </script> </html>NOTA: Con IE esto solo funciona para un solo tag, si tenemos mas de uno entonces puede que el navegador produzca un error interno.
Recibe notificaciones por correo