Autor

Yo mismo

Diario de Honduras - fotos de mi última gran aventura

Algunas fotos (ejemplo del tutorial Fotolog en PHP)

Artículos

W3Csites.com Mundocitas.com

Xenon Layout: Dynamic Layout with Liquid Behaviour

publicado el 26 de Diciembre de 2005
Enlace permanente: http://www.marciobarrios.com/xenon-layout

Actualización: nueva versión mejorada del script Xenon Layout

Aquí os presento un javascript para crear una estructura líquida dentro de un rango configurable y con la posibilidad de cambiar el documento CSS dependiendo de la resolución de la pantalla. Aquí podéis ver un ejemplo.

Explícame de qué va esto!!!

Todos conocemos las estructuras líquidas y las sólidas y sabemos que generar cualquier estructura no es tan fácil de generar como se presupone al utilizar estándares web, y casi siempre nos decantamos por una estructura sólida para desarrollar una web debido a que es una estructura fiable que aguanta con cualquier resolución, sin embargo si vamos a desarrollar una web con bastante contenido es muy recomendable utilizar una estructura líquida y así aprovechar todo el ancho de la pantalla, pero claro, una estructura líquida tiene varios inconvenientes, y el más importante es que no es difícil desmontar este tipo de estructuras cuando redimensionamos la pantalla. Bien pues debido a este problema y a la necesidad de aprovechar la ventaja de una estructura líquida salió este tipo de estructura, que básicamente se resume en una estructura líquida dentro de un rango de resoluciones, fuera de este rango la estructura permanece sólida e incluso podemos especificar una resolución límite (tanto máxima como mínima) donde nuestra estructura cambia de CSS, y así poder optimizar nuestra web para los nuevos dispositivos móviles como la sony PSP, pda's, móviles, etc.

Aquí podéis ver en un gráfico cómo funciona esta estructura, hay que tener en cuenta que los todos los límites de cambio son configurables, es un posible caso:

comportamiento del layout respecto a los cambios de resolución

Todo esto se entiende mucho mejor con un ejemplo, aquí podeis encontrar una web de ejemplo y una posible solución con este layout. En el ejemplo podemos ver una web con un diseño líquido en pantallas de 700 a 1200 px, en pantallas de menos de 700px el diseño se mantiene sólido a 700, y en pantallas de más de 1200px se mantiene fijo a 1200, además si bajamos de 400px cambiamos el CSS para ver correctamente la web en la PSP (entre otros dispositivos portátiles) y si la pantalla supera los 1400px cambiamos el CSS para añadir una columna en la parte derecha de la estructura (esto último no está implementado en el ejemplo).

Características de esta estructura

Esta estructura ha sido probada en Firefox/Windows y en Explorer/Windows, en Opera no funciona el cambio de CSS (estoy averiguando porqué) así que la página mantiene una estructura líquida con max-width y min-width.

¿Por qué utilizar esta estructura?
Importante!

Este código es un experimento propio y está distribuido bajo licencia de Creative Commons 2.5(Reconocimiento-CompartirIgual) al igual que todo el contenido de esta web, sois libres de coger el código y mejorarlo, de hecho seguro que haré mejoras en breve, pero así de mientras cualquiera puede juguetear con él.

Para que funcione el código correctamente son necesarios dos requisitos:

Cabe destacar que me he encontrado con un error que tengo que solventar: si colocamos los atributos min-width o max-width en la primera posición de la regla CSS el script no funciona como esperamos (debido a una mierda de magnífica expresión regular), así que por ahora hay que colocar primero el width. Estos requisitos se podrian haber omitido, ya que podría haber ido buscando por ejemplo el width de un id concreto pero no es óptimo ya que debería buscar regla a regla en el CSS, así que en principio he creído más conveniente este convenio.

¿Cómo funciona?

Enlazamos el javascript desde nuestro html y también enlazamos las CSS que queramos utilizar, por ejemplo una CSS que compartiran todos los diseños para los colores generales, tipos y demás, otra para controlar el diseño normal (líquido y sólido), y otra si queremos optimizar nuestra web para dispositivos portátiles (e incluso podríamos crear otra para las pantallas grandes). Los <link> de las CSS deberán llevar el atributo title que luego utilizaremos para configurar el javascript añadiendo también los mínimos y máximos en píxeles.

En el javascript xenonLayout.js hay unos parámetros que podemos configurar, como por ejemplo si vamos a utilizar una CSS para resoluciones pequeñas y otra para las grandes, y si vamos a utilizarlas tenemos que especificar en qué momento se intercambian esas CSS, es decir, el máximo y/o el mínimo en píxeles. También tenemos que poner el nombre del title de los CSS que utilicemos, de todos modos están explicados los parámetros en el js, así que no tendréis ningun problema.

En el CSS que utilicemos para la estructura líquida hay que definir en la primera regla la división que se encarga de la estructura(en el ejemplo #wrapper) y dentro establecer los atributos width, min-width y max-width, y el script ya se encarga de leer estos valores para "hacerselos saber" a nuestro pobre amigo explorer.

Bugs
Listado de compatibilidad entre navegadores

Yo solo lo he probado en Windows y con los 3 navegadores que tengo, a ver si entre todos me escribís y completamos este cuadro y empiezo a arreglar fallos

Navegadores Plataforma ¿Funciona?
Internet Explorer Windows Sí, pero tiene un pequeño bug
Firefox Windows
Opera Windows Sí, pero NO el cambio de CSS (en proceso de arreglo)
Descarga un rar con los archivos

El zip contiene estos archivos:

Xenon Layout (.zip, 6,48Kb)

Nota: Si queréis cambiar la configuración hacedlo en xenonLayout.js y luego comprimidlo.

P.D.: No me podía callar esto, jeje, el nombre salió porque al existir las estructuras líquidas y sólidas, solo faltaba las gaseosas, pero este nombre no era "xic" así que me decanté por Xenon... (vale, es una gilipollez :P pero que conste que la idea fue de un colega del curro, ale ya la he soltao)