Accesibilidad » Layout Adaptable en Diseños “Sensibles”

August 12, 2012 por juan.m.garcia.m . 3 Comentarios

Que tu diseño sea "Sensible" al contexto del usuario

Dentro del ámbito de la Accesibilidad, encontramos un punto muy importante, que todo arquitecto y desarrollador Web debería de tener en cuenta a la hora de plantear la Arquitectura de una nueva Aplicación Web. Me estoy refiriendo a la adaptación del contenido al dispositivo que emplea el usuario para acceder a dicha aplicación, tomando de modo adicional el contexto en el que se desenvuelve.

Cuando me refiero al contexto, principalmente, podemos centrarnos en la orientación del dispositivo, la resolución del mismo, etc...

A lo largo de los últimos años, ha surgido un nuevo paradigma denominado Responsive Design, que podemos traducir como Diseño Sensible. El planteamiento del Diseño Responsable se basa,  en tener en cuenta el Dispositivo y el contexto que el usuario emplea para acceder al contenido de modo que:

  • Dicho contenido se adapte al dispositivo, siendo adaptable a las características del Viewport (espacio donde se muestra el contenido) y se evita que el usuario deba realizar scroll por nuestras páginas, impidiendo una experiencia de usuario correcta.
  • De modo adicional, también debe adaptarse al modo de navegación del que dispone el usuario (si la navegación se va a realizar por teclado, por pantalla táctil, etc...)
  • Evitar la duplicidad de páginas para dar cábida a todos los dispositivos, de modo que no entremos en un mantenimiento costoso y pesado
  • Marcar las bases para la evolución de nuestra Aplicación Web a nuevos dispositivos, de un modo ágil

El diseño sensible presenta varios aspectos a tener en cuenta, pero en este articulo vamos a enfocarnos a la gestión de las distintas presentaciones (Layouts) de una Aplicación Web diseñada de este modo, siendo adaptadas al llamado Viewport (espacio en el que la página será presentada en el dispositivo que accede a ella).
Recomiendo la lectura, para aquellos que se encuentren cómodos con el ingles, del post de Ethan Marcotte

Distintos clientes, misma necesidad

Actualmente, nos encontramos con la siguiente necesidad.

Necesidad actual: representar contenido adaptado al dispositivo

A dia de hoy, nos encontramos con multitud de dispositivos, que presentan distintas características a las que nuestra Aplicación Web debe tener en cuenta en su diseño:

  • A nivel hardware, las pantallas presentan distintas resoluciones, en incluso algunos, como las tabletas pueden variarla de modo dinámico.
  • Ciertos dispositivos son elegidos por usuarios que requieren desarrollar tareas “sobre la marcha” y de modo óptimo, para mejorar su acceso a Internet, por lo que estamos obligados a presentarle el contenido más importante de un modo accesible
  • Los dispositivos presentan distintos navegadores, con distinto soporte a lenguajes de marcas y tecnologías complementarias (javascript, soporte a lenguaje de marcas)

Media Queries, la solución a aplicar

Para ayudarnos en esta nueva tarea, disponemos de un mecanismo denominado Media Queries. El objetivo de esta tecnología, cumple con el objetivo que tenemos que cubrir.

Si queremos conocer el soporte actual de los navegadores, podemos encontrar aquí más información.

Por medio del uso de Media Queries, podemos establecer distintas hojas de estilo para lograr que nuestro ntenido se adapte a distintos tipos de medios. Si a este nivel equiparamos los distintos “tipos de medios” a los distintos tipos de dispositivos para los que deseamos que nuestra Aplicación Web, nos encontramos con el siguiente escenario:

Diagrama de clases del ejemplo

Ya sea por el medio que sea, análisis de estadísticas de acceso de dispositivos en Internet, por las necesidades de nuestro cliente o de nuestra empresa; hemos decidido que nuestra aplicación va a realizar la adaptación de su contenido a dos tipos de resoluciones:

  1. Dispositivos con un ancho de resolución menor de 400 pixeles (px), que visualizarán nuestra aplicación con un layout vertical, representando las distintas zonas cada una en una fila

Layout menor de 400 px

  1. Dispositivos con un ancho de resolución mayor a 400 pixeles (px), que visualizarán nuestra aplicación con un layout que ubique el menú ppal a la izquierda del contenido principal

Ejemplo para Layout mayor de 400 px

Los estilos que son comunes, los vamos a definir en una hoja de estilos CSS (base.css), para ser empleada independientemente de la resolución que tenga el dispositivo con el que accede el usuario.

Este enfoque, nos obliga a tener en cuenta a la hora de diseñar nuestra aplicación, de la importancia que tiene la definición de los estilos CSS y el mejor modo de agruparlo.

Como hemos comentado anteriormente, media Queries nos va a permitir aplicar una hoja de estilos u otra, dependiendo de las reglas que establezcamos. En nuestro caso, será el ancho mínimo el valor por el cual la CSS correspondiente será empleada.

Siempre queremos dar soporte a cualquier dispositivo, pero debemos tener en cuenta que el uso de media queries puede tener impacto en cuanto al rendimiento de nuestra Aplicación:

  • El navegador evalúa variaciones en el viewport, que provocar hacer el usuario, como cambio del tamaño de la ventana donde visualiza el contenido o variación en la orientación del dispositivo, redimensionar la ventana del navegador. Por esta razón, debemos establecer un límite a la hora de indicar el número de reglas, con el fin de no penalizar el rendimiento en la respuesta del navegador
  • Limitar los estilos de las hojas para el layout, sólo para posicionar contenido de nuestra página y no de presentación
  • Si los estilos los tenemos en ficheros CSS, hay que tener en cuenta las peticiones que debe realizar el navegador para no sobrepasar el número optimo

 Por norma general, las peticiones de recursos desde nuestra página debería de estar entre 6 y 8, contando con las peticiones para otros recursos, como las imágenes)

Resumen

Una vez visto el funcionamiento de Media Queries, podemos reconocer una herramienta a tener en cuenta si queremos adaptar la presentación del contenido de nuestras Aplicaciones Web a los distintos dispositivos que pueden emplear nuestros usuarios, y los que puedan aparecer en un futuro (más que próximo).

A la hora de aplicar Media Queries debemos tener en cuenta:

  • El rendimiento. Hay que tener en cuenta que la modularización que supone su uso, implica añadir peticiones de nuestras páginas. Deberíamos tener siempre como meta, que no se superen las 8 peticiones por página, sobre todo si nuestros usuarios van a acceder con dispositivos móviles.
  • Los estilos a incluir en las hojas de estilos. Debido a que el navegador reevalua cualquier cambio en el espacio donde se presenta nuestra página, el hecho de añadir cambios en la presentación de los elementos de nuestra página supone más tiempo de proceso del navegador para aplicarlos. Deberíamos, por tanto, añadir a las hojas de estilo cambios en la disposición de los elementos, e intentar centralizar en una hoja base la presentación de los mismos (color de fondo, fuentes, bordes, etc.)

Herramientas empleadas

Debido a mi “afición” al software libre, me siento obligado a enumerar las herramientas que he empleado para la realización de este artículo:

  • Diagramas. Para los diagramas, he empleado la herramienta DIA. Se puede descargar e instalar desde los repositorios por defecto, en Ubuntu.
  • Imágenes. Todas las imágenes han sido redimensionadas con Gimp.
tags: , , , , , , , ,

Artículos relacionados:

3 Comments »

RSS feed for comments on this post. TrackBack URI

  1. Víctor Cuervo
    September 9, 2012 #

    Buenas,

    En primer lugar un buen artículo, bastante clara la explicación sobre el concepto de diseños “sensibles”. Por otro lado una pregunta, ¿Qué puede aportar el tema del borrador sobre Responsive Images de la W3C en el ámbito de los diseños “sensibles”?

    Véase http://dvcs.w3.org/hg/html-proposals/raw-file/tip/responsive-images/responsive-images.html

    Gracias!

    • juan.m.garcia.m
      September 10, 2012 #

      Hola Victor.

      Muchas gracias por tu comentario, me alegro que el artículo haya sido de tu agrado.

      En cuanto a la pregunta que me planteas, conocía este trabajo durante la escritura del artículo. Escuchando un Potcast de Web Ahead descubrí que se había abierto una línea de trabajo en relación a como adecuar las Imágenes dentro de este tipo de Diseños.

      Mat Marquis lleva trabajando bastante en relación a este asunto, y ha establecido un grupo de trabajo al respecto.

      Desde mi punto de vista, la idea para resolverlo me parece acertada por medio de la creación de una etiqueta para estandarizar el modo de parametrizar cuando una imagen deber ser accedida, además empleando Media Queries.
      De este modo, todos adaptaremos las imágenes a un dispositivo del mismo modo que el resto de elementos de la página. Por otro lado, tiene como objetivo la optimización en el acceso al permitir con media query la selección del recurso correspondiente (queda del lado de los desarrolladores del navegador, si este va a bajarse todas las imágenes o sólo según el uso, pero apriori, pinta bien).

      Una pega que le encuentro, es que si tienes una regla de Media Query tienes que volver a repetirla en el tag Picture, además que en el link para las Css. Quizás, en un futuro próximo, se define el modo de reutilizar las reglas, ya sea con nombres o de otro modo.

      Es interesante leer como es un temas bastante trabajado, siendo relativamente nuevo, por gente como Jason Grisby que ha hecho un impresionante esfuerzo al chequear distintas maneras de resolver la adaptación de las imágenes con técnicas de lo más variado.

  2. Ejemplo de Layout Adaptable con Media Queries | Arquitecto IT
    September 10, 2012 #

    [...] el desarrollo de este ejemplo, tomamos el caso descrito en mi anterior articulo a modo de diseño. De este modo, tenemos una página que va a adaptar su presentación de acuerdo al ancho del [...]

Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>