Reaccionar a Media Queries desde JavaScript

Hoy en día casi no se concibe una página o aplicación web que no sea Responsive. El Responsive Web Design busca crear diseños web que se adapten de manera automática a diferentes tamaños y resoluciones de pantalla. De esta manera en lugar de tener un diseño diferente para cada tamaño de pantalla (¡o incluso una versión diferente de la interfaz para cada dispositivo!), se busca que un solo diseño, refinado de manera inteligente, sirva para todos los tamaños.

El nombre viene de que el diseño «responde» de manera automática a las diferentes condiciones del entorno de la página, adaptándose automáticamente y en tiempo real a los cambios de tamaño que haya. Puedes verlo en acción si visitas, por ejemplo, la página de campusMVP. Si la abres en una ventana aparte y cambias el tamaño de ésta (el ancho fundamentalmente) verás que a medida que el espacio disminuye el diseño se adapta para que se vea bien incluso con poco espacio. Puedes probarlo no solo en la portada (donde es menos vistoso) sino también en el catálogo en la parte de recursos, donde todavía hay más cambios para poder adaptar el contenido mejor. Este mismo blog también es Responsive.

Responsive_BlogEngine

Lo más interesante de estos efectos es que no se necesita escribir código para conseguirlos. Es suficiente con utilizar CSS puro y duro. Para ello se saca partido, entre otras cosas, a la característica de CSS denominada Media Queries. Éstas nos permiten definir conjuntos de reglas CSS que se aplican únicamente cuando se cumplen ciertas condiciones respecto al medio en el que se visualiza la página.

Por ejemplo, si escribimos:

@media screen and (max-device-width: 480px) and (orientation: landscape) {
   /* REGLAS CSS*/
}

Con esto estamos indicando al navegador que si la página se está visualizando en una pantalla (podría ser en otro medio, como por ejemplo en papel porque la imprimimos), cuyo ancho no supera los 480 píxeles (ancho por defecto de una pantalla apaisada de un iPhone hasta la versión 4) y que además la orientación del dispositivo es apaisada (es decir, está en horizontal), entonces que le aplique las reglas CSS específicas para este caso que tenemos dentro de las llaves.

Esto da una libertad enorme para definir diferentes estilos según tamaños, resoluciones de pantalla y otras condiciones, y permite en gran medida la «magia» de los sitios Responsivos.

Ejecución innecesaria de código en páginas Responsive

Un caso habitual es, por ejemplo, querer tener dos menús de navegación completamente diferentes en resoluciones altas y bajas. Así, por ejemplo, si la pantalla es muy grande podemos poner un menú horizontal con botones grandes y fáciles de pulsar, que ocupen mucho a lo ancho. Sin embargo si la pantalla o la ventana es pequeña, podemos ocultar el menú anterior y mostrar uno diferente en forma de lista desplegable o usando un simple control de lista de HTML.

Aquí tienes un caso real con su correspondiente implementación. Lo que se explica en este artículo es cómo convertir mediante JavaScript (o más bien jQuery) un menú CSS puro ancho en control de lista desplegable para el caso de pantallas pequeñas, como la de un teléfono. Como mantener dos menús por separado es propenso a errores porque tarde o temprano dejarán de estar sincronizados si lo hacemos a mano, el ejemplo construye la lista desplegable a partir de los elementos del menú CSS, y así no hay fallo. Luego con Media Queries muestran uno o el otro en función del ancho de la pantalla. Muy fácil y muy útil.

El problema de esto es que el menú desplegable pequeño y todo el código JavaScript que lo genera, se ejecutan siempre, haga falta o no. Lo ideal sería que el código que genera el menú pequeño se ejecutase únicamente cuando sea necesario, y no antes. Pero el JavaScript necesario para conseguirlo se ejecuta siempre nada más cargar la página y solo depende de CSS el mostrar un menú u otro según sea necesario.

Media Matching en JavaScript

Dado que el Responsive Web Design ha sido tradicionalmente más un tema de diseñadores web que de programadores, poca gente conoce que tiene una contrapartida en el lado de código JavaScript. Se trata de una API muy sencilla para verificar la coincidencia de condiciones de Media Queries con el estado actual de la pantalla….

… SIGUE

Lee el post completo en JASoft.org: http://www.jasoft.org/Blog/post/Reaccionar-a-Media-Queries-desde-JavaScript.aspx

CSS: Tamaños relativos de fuente según la resolución

Hasta hace unos años la mayor parte del mundo conectado salía a Internet a través de un ordenador personal. Por ello bastaba con tener controladas las dos o tres resoluciones de pantalla más habituales para que una página o una aplicación web se comportaran de la manera esperada. Por aquel entonces las resoluciones más comunes eran: 800×600 (sí, increíble pero cierto, ahora ni los teléfonos tienen algo tan bajo), 1024×768 y si acaso 1280×1024 los afortunados que tenían monitores grandes.

Con la llegada del iPhone en 2007 y posteriormente del iPad en 2010, la cosa cambió para siempre. Actualmente debemos considerar diseños y distribuciones válidos para muchísimas resoluciones diferentes y la variedad es inmensa. La gente se conecta a través de móviles con diversas resoluciones y densidades de pantalla en sentido vertical u horizontal, tabletas que según su precio y prestaciones pueden variar mucho las dimensiones de visualización, ordenadores con pantallas 16:9 o monitores Full-HD, ordenadores de escritorio con resoluciones más convencionales… Una locura.

MultiplesResolucionesPantallas

En el caso concreto de las páginas web hay que tratar de que nuestros contenidos y diseños se adapten sin problema a cualquier resolución, densidad y tamaño. Y dentro de esta problemática una cuestión importante es ofrecer en cada caso un tamaño de texto apropiado. No sirve tener un texto de tamaño muy grande en resoluciones pequeñas, ni uno muy pequeño en resoluciones grandes. En cada caso hay que encontrar un tamaño apropiado y utilizarlo.

¿Cómo podemos conseguirlo?

La mejor manera es utilizar dimensiones de carácter relativo en nuestros diseños web, y en concreto dos unidades especialmente pensadas para este problema: los "em" y los "rem".

…Continua…

Lee el post completo en JASoft.org: http://www.jasoft.org/Blog/post/CSS-Tamanos-relativos-de-fuente-segun-la-resolucion.aspx

El mejor sitio para colocar mis scripts: ¿Cabecera, cuerpo, carga asíncrona o carga diferida?

Aunque esta cuestión puede parecer carente de sentido a simple vista, no lo es si pensamos en la enorme cantidad de scripts que se cargan hoy en día en algunas aplicaciones, y en especial en las aplicaciones de tipo Single Page Application (SPA).

Por ejemplo, observa los scripts que carga inicialmente una SPA como es GMail y que además está súper-optimizada por parte de Google:

Scripts-Cargados-GMail
Pulsa para aumentar

Como vemos son en total 31 scripts que pesan casi 2MB entre todos, y tardan un tiempo considerable en cargar. Y eso sin contar los scripts que van embebidos en la propia página y que por lo tanto no se cargan de forma externa.

Así pues, ante tanto script y con semejante tamaño: ¿En qué parte de una página es mejor colocar los scripts?

…continúa…

Lee el post completo en JASoft.org: http://www.jasoft.org/Blog/post/El-mejor-sitio-para-colocar-mis-scripts-191;Cabecera-cuerpo-carga-asincrona-o-carga-diferida.aspx