Foros del Web » Programando para Internet » Javascript »

Duda con la interacción entre Javascript y CSS

Estas en el tema de Duda con la interacción entre Javascript y CSS en el foro de Javascript en Foros del Web. Tengo un html vacío, que sólo llama a un CSS y a un Javascript : @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver original <!DOCTYPE html> < html ...
  #1 (permalink)  
Antiguo 27/01/2014, 06:06
Avatar de replica  
Fecha de Ingreso: noviembre-2004
Mensajes: 68
Antigüedad: 20 años, 1 mes
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.
  #2 (permalink)  
Antiguo 27/01/2014, 14:46
 
Fecha de Ingreso: agosto-2013
Mensajes: 150
Antigüedad: 11 años, 4 meses
Puntos: 29
Respuesta: Duda con la interacción entre Javascript y CSS

Este es tu script con algunos cambios. Tal vez te ayude a encontrar la solución:
Código HTML:
Ver original
  1. <!DOCTYPE html>
  2.   <head>
  3.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4.     <title>Calendario</title>
  5.     <style type="text/css">
  6.       @charset "utf-8";
  7.       body{
  8.         font-family: Arial;
  9.         font-size: 15px;
  10.       }
  11.       h1{
  12.         text-align: center;
  13.         display: inline;
  14.         margin: 0 40px;
  15.       }
  16.       #main{ border: solid 1px;
  17.              width: 90%;
  18.              margin: 0 auto;
  19.              text-align: center;
  20.              background-color:#F2F2F2;
  21.       }
  22.     </style>
  23.     <script type="text/javascript">
  24.       var hoy = new Date();
  25.       var any = hoy.getFullYear();
  26.  
  27.       function vistaanual(any) {
  28.         if (document.getElementById("main"))
  29.           document.body.removeChild(document.getElementById("main"));
  30.  
  31.         document.write("<div id=\"main\">");
  32.         document.write("<input type=\"button\" id=\"btn_any_ant\" value=" + parseInt(any - 1) + "></button>");
  33.         document.write("<h1 id=\"anio\">" + any + "</h1>");
  34.         document.write("<input type=\"button\" id=\"btn_any_sgt\" value=" + parseInt(any + 1) + "></button>");
  35.         document.write("</div>"); // Cierro el div del main
  36.         //
  37.         document.getElementById('btn_any_ant').addEventListener('click', function() {
  38.           document.getElementById('anio').innerHTML = parseInt(any - 1);
  39.           var ant = any - 1;
  40.           document.getElementById('btn_any_ant').value = parseInt(ant - 1);
  41.           // el otro
  42.           document.getElementById('btn_any_sgt').value = parseInt(any);
  43.           any -= 1;
  44.         }, false);
  45.         document.getElementById('btn_any_sgt').addEventListener('click', function() {
  46.           document.getElementById('anio').innerHTML = parseInt(any + 1);
  47.           var sig = any + 1;
  48.           document.getElementById('btn_any_sgt').value = parseInt(sig + 1);
  49.           // el otro
  50.           document.getElementById('btn_any_ant').value = parseInt(any);
  51.           any += 1;
  52.         }, false);
  53.       }
  54.       window.addEventListener('load', vistaanual(any), false);
  55.     </script>
  56.   </head>
  57.   <body>
  58.   </body>
  59. </html>
  #3 (permalink)  
Antiguo 28/01/2014, 04:14
Avatar de replica  
Fecha de Ingreso: noviembre-2004
Mensajes: 68
Antigüedad: 20 años, 1 mes
Puntos: 2
Respuesta: Duda con la interacción entre Javascript y CSS

Funciona, pero necesito llamar a la misma función que crea los botones, y esto no me lo soluciona.

Sigo perdido, y no sé por dónde meter mano.
  #4 (permalink)  
Antiguo 28/01/2014, 11:12
 
Fecha de Ingreso: agosto-2013
Mensajes: 150
Antigüedad: 11 años, 4 meses
Puntos: 29
Respuesta: Duda con la interacción entre Javascript y CSS

Con llamada a función:
Código Javascript:
Ver original
  1. <script type="text/javascript">
  2.  
  3.       var hoy = new Date();
  4.       var any = hoy.getFullYear();
  5.  
  6.       function vistaanual(any) {
  7.         if (document.getElementById("main")) {
  8.           document.body.removeChild(document.getElementById("main"));
  9.         }
  10.  
  11.         var html = '';
  12.         html += "<div id=\"main\">";
  13.         html += "<input type=\"button\" id=\"btn_any_ant\" value=" + parseInt(any - 1) + "></button>";
  14.         html += "<h1 id=\"anio\">" + any + "</h1>";
  15.         html += "<input type=\"button\" id=\"btn_any_sgt\" value=" + parseInt(any + 1) + "></button>";
  16.         html += "</div>";
  17.  
  18.         document.body.innerHTML = html;
  19.  
  20.         document.getElementById('btn_any_ant').addEventListener('click', function() {
  21.           vistaanual(any - 1);
  22.         }, false);
  23.  
  24.         document.getElementById('btn_any_sgt').addEventListener('click', function() {
  25.           vistaanual(any + 1);
  26.         }, false);
  27.  
  28.       }
  29.  
  30.       window.addEventListener("load", function() {
  31.         vistaanual(any);
  32.       }, false);
  33.     </script>

Etiquetas: css, interacción
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:25.