Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/01/2014, 06:06
Avatar de replica
replica
 
Fecha de Ingreso: noviembre-2004
Mensajes: 68
Antigüedad: 20 años
Puntos: 2
Duda con la interacción entre Javascript y CSS

Tengo un html vacío, que sólo llama a un CSS y a un Javascript:

Código HTML:
Ver original
  1. <!DOCTYPE html>
  2. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1;" />
  3.  
  4. <title>Calendario</title>
  5.  
  6. <link rel="stylesheet" href="estilo.css" type="text/css" />
  7.  
  8. <script src="comportamiento.js" type="text/javascript">
  9.  
  10. </head>
  11.  
  12. </body>
  13. </html>

Un CSS con lo mínimo, con un background-color en gris para un div, como elemento más llamativo:
Código CSS:
Ver original
  1. @charset "utf-8";
  2.  
  3. body{
  4.     font-family: Arial;
  5.     font-size: 15px;
  6. }
  7.  
  8. h1{
  9.     text-align: center;
  10.     display: inline;
  11.     margin: 0 40px;
  12. }
  13.  
  14. #main{
  15.     width: 90%;
  16.     margin: 0 auto;
  17.     text-align: center;
  18.     background-color:#F2F2F2;
  19. }

Y un javascript que crea todo el contenido del html:
Código Javascript:
Ver original
  1. var hoy = new Date();
  2.     var any = hoy.getFullYear();
  3.  
  4. function vistaanual(any)
  5. {
  6.     if(document.getElementById("main"))
  7.         document.body.removeChild(document.getElementById("main"));
  8.  
  9.     document.write("<div id=\"main\">");
  10.     document.write("<button id=\"btn_any_ant\" value=" + parseInt(any - 1) + ">" + parseInt(any - 1) + "</button>");
  11.     document.write("<h1>" + any + "</h1>");
  12.     document.write("<button id=\"btn_any_sgt\" value=" + parseInt(any + 1) + ">" + parseInt(any + 1) + "</button>");
  13.         document.write("</div>"); // Cierro el div del main
  14.         document.getElementById('btn_any_ant').addEventListener('click', function(){vistaanual(any - 1/*parseInt(document.getElementById('btn_any_ant').value)*/)}, false);
  15.         document.getElementById('btn_any_sgt').addEventListener('click', function(){vistaanual(any + 1/*parseInt(document.getElementById('btn_any_sgt').value)*/)}, false);
  16. }
  17.  
  18. /*window.onLoad = function(){*/
  19.         window.addEventListener('load', vistaanual(any), false);
  20. /*}*/

Mi intención es crear un calendario. Con otras funciones y estilos css, que no pongo aquí por no alargar el post, y que no afecta a la cuestión que me aborda, soy capaz de mostrar todos los días del año corriente, agrupados por meses y en forma de cuadrícula.

El problema que tengo es que sólo puedo aplicar los estilos CSS la primera vez que se carga el archivo "Calendario.html". En el momento que presiono alguno de los botones de año siguiente o año anterior, el resultado html se aplica correctamente, pero el calendario en sí no se muestra con sus cuadrículas (para hacerlo sencillo, en este ejemplo el background-color gris).

El div "main" lo destruyo porque, si no lo hago, sólo puedo presionar el botón de cambio de año 1 sola vez, donde sí aparece el texto, pero tampoco se aplica el CSS.

En definitiva, hay algo en la interacción entre CSS y Javascript que se me escapa. Pensaba que CSS se aplicaba automáticamente al cargar la página, pero no es así.

¿Alguien puede echarme una mano?
¿Cuál es el orden de carga de los elementos html, js y css?

He probado con "defer" la línea de carga de js, y con el window.onload que veis en el js, pero cualquiera de las dos formas no me escribe nada en pantalla, imagino que es porque la carga de la página ya ha concluido definitivamente.

Gracias.