¿Quieres registrarte?

Limpiar desperfectos de CSS y JavaScript por demora de carga

Por: M@U
22 de Marzo del 2009
5085 de clabLevel
Otros artículos de M@U
2,088 visitas

Este tip es muy sencillo realmente, pero señala como cuidar los elementos en una página web cuya CSS es asignada dinámicamente mediante JavaScript, en este caso en especifico jQuery.

Me explico, normalmente esperamos a que la DOM esté completamente cargada para comenzar a modificarla, el problema viene siendo que puede tardar un poco que esto suceda, aun cuando el código es realmente sencillo por lo que se puede notar por un instante los elementos involucrados:

Código :

$(document).ready(function(){
   $(objeto).hide();
   //
   $(document).click(function(){
      $(this).slideDown("velocidad");
   });
});
Pongo la siguiente demostración para hacer muestra del código, que aunque no idéntico al anterior hace prácticamente lo mismo. Si no lograste ver el detalle que señalo, refresca la página y notaras el "flash" en el que se logra apreciar el recuadro con texto.

Intentar solucionar el problema desde el archivo CSS no es una opción

La manera más lógica e inmediata para remediar esto seguramente seria modificar directamente el archivo CSS, añadiendo algo como objeto{display:none;} pero habrían conflictos con quienes no tienen JavaScript activado en su navegador, por lo que jamás podrían ver el contenido oculto aun dando click al botón.

Lo mejor es identificar el camino correcto, la "Mejora Progresiva"

Quizá la única solución real aquí es no recurrir al uso de CSS puro, o solamente JavaScript sino algo intermedio haciendo un poco de uso de ambas. Esto no deja de recordarme la Mejora progresiva/Progressive Enhancement. Con el siguiente código nos ahorramos el posible lió de que el usuario tenga o no JavaScript activado, así como los detalles por dejarle todo solamente a CSS:

Código :

document.write('<style type="text/css" rel="stylesheet">objeto{display:none;}</style>');
$(document).ready(function() { ... });
Quizá parezca realmente vil utilizar document.write en estos días modernos con wi-fi gratis y calentamiento global, pero funciona realmente bien. En su defecto podemos violar la ley interna y moral de jQuery y colocar este código fuera de $.ready() :

Código :

$('head').append('<style type="text/css" rel="stylesheet">objeto{display:none}</style>')


Aquí dejo un ejemplo igual a la primera demostración, pero con el código modificado solucionando así el error. Que igual, si tienes una conexión regular llegara a aparecer, pero es mucho menos probable y durara quizá la mitad de tiempo en desaparecer, pruébalo con acciones más grandes y ejemplos reales y notaras dramáticamente el cambio.

Enviar a twitter Enviar a facebook


También te interesa


Etiquetas javascript css

Comentarios | Enviar un comentario
Tamiflú,

Un mejor método de aplicar tu concepto es agregar una clase a la etiqueta body ni bien cargue la página. Ya sea con simple DOM, o jQuery.

Y dejar los estilos en el css. Asi siempre mantienes todo separado, y la velocidad es inmediata.

Un rápido ejemplo seria:

Código :

$(document).ready(function(){

  $(document.body).addClass('hasJS');

});



.hasJS #container {

  display:none;

}


Un saludo.
Por: NEO_JP
Deja un comentario
IMPORTANTE

Recuerda ser respetuoso, no insultes a otras personas, ni uses palabrotas, hay una persona al otro lado de la pantalla.

Habla bien, NO ESCRIBAS EN MAYUSCULA TODO, no escribas como en un SMS, evita cosas como "ke", "x q" y demás abreviaciones.

Aquí funcionan las etiquetas de los foros, puedes usar [b] para negrita, [img] para las imágenes, [url] para los enlaces, etc.

Si tienes preguntas técnicas, envíalas mejor al foro.