Implementación de sitios web

5 soluciones prácticas para el desarrollo de Responsive Web Design

Desarrollo Web 3 min. de lectura

El Responsive Web Design plantea retos en la implementación de sitios web. Aquí compartimos algunos consejos prácticos para utilizar HTML5, CSS3 y Javascript en diseños adaptativos.

Los que trabajamos en diseño y desarrollo web sabemos que este ámbito está en constante desarrollo. En el caso del Responsive Web Design, la W3C viene fomentando desde el 2008 el concepto de la One Web en el documento “Mobile Web Best Practices”, donde se fijan las bases para pensar en sitios web adaptativos. Sin embargo, muchas de estas buenas prácticas tuvieron que esperar a que la industria adopte y fomente el uso de HTML5 y CSS3 como tecnologías de facto para trabajar, estando la especificación de HTML5 aún con status de borrador y no de recomendación oficial, como sí lo está el XHTML 1.1. Esta situación obliga a estar siempre investigando y probando nuevas funcionalidades acorde al avance de las tecnologías disponibles.

Desde que abordamos nuestro primer proyecto responsive para Australis Seafoods, tuvimos que cambiar el paradigma de diseño que veníamos utilizando. En este sentido pasamos de diseñar para la pantalla del escritorio a diseñar para pantallas de distintos tamaños, resoluciones y densidades de pixeles.

¿Qué desafíos identificamos en la etapa del diseño?

  • Diseñar por porcentajes, no por pixeles. Ya no es posible seguir ocupando cajas de tamaño único distribuidas en una pantalla de ancho fijo. El diseño responsive obliga a la utilización de una grilla flexible, donde los elementos agrupados en ella serán medidos por porcentaje de pantalla, no por pixeles.
  • Diseñar para pantallas, no para dispositivos. El mercado tecnológico actual es multidispositivo, sin estándares de ningún tipo. Por ello, la clave es pensar en todos los tamaños de pantalla, no solo en aparatos, lo que dejaría al diseño obsoleto en poco tiempo.
  • Diseñar para tocar, no para clicks. La interacción con los contenidos web se complejiza al eliminar el mouse en las pantallas táctiles. Por eso, un diseño responsive también debe contemplar el dedo como input, lo que implica mayores tamaños en botones y links, entre otras soluciones.
  • Diseñar para pantallas pequeñas primero. El concepto clave es Mobile First, porque permite pensar desde lo más pequeño y esencial, a lo más grande y accesorio.

¿Y en el desarrollo del sitio?

En la etapa de implementación de los sitios web adaptativos nos hemos encontrado con diversos problemas, básicamente relacionados con el manejo de HTML5, CSS3 y Javascript. A continuación compartimos cinco soluciones a estas dificultades.

Problema: Imágenes en dispositivos Retina Display

En dispositivos móviles con pantallas de alta definición -Retina display- las imágenes usadas para la iconografía (PNG) se muestran pixeladas.

Solución:

Adoptamos el formato de imágenes SVG (Gráficos Vectoriales Redimensionables), que como su nombre lo dice, son imágenes en vectores que permiten aumentar o reducir el tamaño sin comprometer la calidad de la visualización. En comparación con los formatos JPG o PNG, el SVG tiene un peso mucho menor y puede ser escalado a cualquier tamaño sin perder la calidad de imagen, haciéndolo ideal para dispositivos con mayor densidad de pixeles por pulgada. Este formato se puede utilizar perfectamente como una imagen común y corriente, insertandola dentro del atributo “src” de cualquier etiqueta <img>.

Ejemplo:

<img src="imagen.svg" alt="Esto es una imagen en formato SVG" />

Problema: Compatibilidad de SVG en navegadores antiguos

El formato SVG no es soportado por todos los navegadores,  particularmente antiguas versiones de Android(2.3 y anteriores) y Explorer (8 y anteriores)

Solución:

Combinamos Jquery, atributos personalizados de HTML5 y Modernizr para así detectar si el navegador soporta imágenes en SVG. Si la aplicación no será capaz de visualizar este archivo, utilizamos un fallback para desplegar un formato de imagen compatible con el navegador. Con esta opción será necesario contar con los dos formatos para cada caso.

Ejemplo:

En el HTML escribimos una etiqueta <img> que desplegará el SVG y al mismo tiempo tendrá un atributo personalizado “data-fallback” que tendrá la imagen en formato PNG en caso de que el navegador no soporte vectores redimensionables.

<img src="imagen.svg" data-fallback="imagen.png" alt="Esto es una imagen en formato SVG" />

Luego, utilizando Modernizr detectamos si el navegador soporta SVG, si no es el caso, entonces toma la imagen en formato PNG que se encuentra en el atributo personalizado y lo inserta en el src escrito.

       if( !Modernizr.svg ) { //A través de Modernizr detectamos si el navegador no soporta formatos SVG
            var svgObjects = $('[data-fallback]'); //Almacenamos la imagen en una variable
            $.each(svgObjects, function(i, elm){
                $(elm).attr('src', $(elm).attr('data-svgFallback')); //Reemplazamos la imagen SVG del source por la imagen PNG del atributo personalizado 
            });
        }

<strong style="font-size: 1em; font-family: Georgia, 'Times New Roman', 'Bitstream Charter', Times, serif; line-height: 19px;"

Problema: Conexiones lentas en móviles

La mayoría de los dispositivos móviles acceden a internet a través de conexiones limitadas e inestables, lo que ralentiza la carga del contenido de los sitios responsive.

Solución:

Los sitios web desarrollados en diseño responsive cargan todo el contenido sin discriminar dispositivos. El problema más común sucede con las imágenes, que consideran también la petición al servidor y la descarga. Como alternativa a esta limitante insertamos la imagen directamente en el documento a través de Data URIs. Básicamente es un string extenso que contiene la información de la imagen codificada para que el navegador la interprete y la despliegue sin necesidad de realizar peticiones al servidor o descargarlas, lo que disminuye considerablemente el tiempo de carga del documento. Existen muchas herramientas gratuitas para generar estos códigos, una de ellas es Data URI Generator, donde solo basta con subir la imagen y obtenemos el código.

Ejemplo:

<img src="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+DQo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkNhcGFfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiDQoJIHdpZHRoPSIxM3B4IiBoZWlnaHQ9IjE0cHgiIHZpZXdCb3g9IjAgMCAxMyAxNCIgZW5hYmxlLWJhY2tncm91bmQ9Im5ldyAwIDAgMTMgMTQiIHhtbDpzcGFjZT0icHJlc2VydmUiPg0KPHBhdGggZmlsbD0iI0ZGRkZGRiIgZD0iTTEyLjcwOSwxMC40MzlsMC4yOS05LjE4OWMwLjAyLTAuNzEtMC41LTEuMjctMS4xNi0xLjI1bC04LjUzLDAuMzJjLTAuNjcsMC4wMi0xLjIzLDAuNjItMS4yNSwxLjM0DQoJYy0wLjAyLDAuNzIsMC41LDEuMjgsMS4xNiwxLjI1bDUuNjItMC4ybC04LjQ2LDkuMTAxYy0wLjQ4LDAuNTI5LTAuNTEsMS4zNS0wLjA2LDEuODRjMC40NiwwLjQ5LDEuMjIsMC40NTksMS43MS0wLjA2MWw4LjQ2LTkuMTENCglsLTAuMiw2LjA0OWMtMC4wMTEsMC4zNjEsMC4xMiwwLjY4MSwwLjMzLDAuOWMwLjIxLDAuMjMsMC41LDAuMzYsMC44NCwwLjM1QzEyLjExOSwxMS43NiwxMi42NzksMTEuMTYsMTIuNzA5LDEwLjQzOXoiLz4NCjwvc3ZnPg0K" alt="Esto es una imagen codificada" />

Problema: Bordes en columnas

Al trabajar en columnas con porcentajes la propiedad de CSS “border” solo permite trabajar en pixeles.

Solución:

Una de las premisas del diseño responsive es el trabajo con anchos porcentuales, de modo que los elementos siempre se adecuarán al tamaño de la pantalla donde se estén desplegando. Nos ha sucedido que en diversos proyectos es necesario habilitar un elemento HTML flexible, con ancho porcentual y borde al mismo tiempo, lo que rompe la estructura al agregar pixeles al espacio que lo contiene. Esta dificultad la solucionamos utilizando box-shadow para simular los bordes en pixeles, ya que la sombra se superpone sobre el contenedor en comparación al borde que se suma a la estructura.

Ejemplo:

Para una grilla con estructura de 4 columnas: Cada columna debería medir 1/4 del total, es decir un 25% de ancho. Si se añade un borde de 1 px la estructura se romperá ya que la suma entre los anchos de la columna y los píxeles de los bordes es mayor al 100%:

.columna{

width:25%;

float:left;

border:1px solid #CCC;

}

Además, simulamos los bordes con la propiedad “box-shadow”, creando sombras duras de un pixel que se superponen sobre las columnas:

.columna{

width:25%;

float:left;

box-shadow: 1px 0px 0px 0px rgba(0, 0, 0, 0.45) //Sombra negra con opacidad de un pixel de ancho movido a la derecha

Problema: Despliegue de animaciones en dispositivos móviles

Las animaciones funcionan más lento en dispositivos móviles que en computadores de escritorio.

Solución:

Las tablets y smartphones poseen menor capacidad de procesamiento que un dispositivo de escritorio, por lo que recomendamos seguir los siguientes consejos prácticos:

  • Utiliza mayor cantidad de código nativo posible, ya que permite que los procesos se generen más rápido.
  • Ocupa transiciones y animaciones CSS3, que son más rápidas en comparación animaciones a través de Javascript.
  • Usa más memoria y menos procesador en el código Javascript.

Si te sirvieron estos consejos, no olvides leer nuestra solución para insertar videos responsivos en WordPress.

¿Tienes alguna otra solución para Responsive Web Design que quieras compartirnos?

Acerca del Autor

Investigamos las tendencias en proyectos y estrategias digitales para complementarlas con nuestra experiencia en artículos informativos. Nuestro objetivo es aportar al desarrollo del área, discutiendo la efectividad de las tecnologías y técnicas aplicadas.

Agregar un comentario

jhonny

hace 10 años

Muy buena la información. Me gusta posts como estos 😉

Responder

Alex

hace 10 años

Grande la informacion va a servir de mucho!

Gracias.

Rodrigo

hace 10 años

Muy buen artículo, lo que si me queda en duda a lo que se refiere “… lo que dejaría al diseño obsoleto en poco tiempo.” me queda la sensación que es un opinión subjetiva, pensando que el diseño puede llegar a ser relativo según el cliente y/o requerimiento. Saludos

Responder

Javier

hace 10 años

Estimados, muy buen artículo, y excelentes datos!

Sin embargo, vengo a acotar algunos datos técnicos que explican que las gráficas vectoriales en SVG y el uso de Data URIs debiese estar reservada solo para íconos o elementos pequeños, pues -en realidad- no es más rápido que hacer un llamado al servidor por una imagen comprimida (digamos, en photoshop).

En este sentido, viene a ser más rápida la materialización de un Sprite. La diferencia es tal, que -en algunos casos- la materialización es hasta 900% más lenta al utilizar SVG o Data URI (en comparación con datos binarios)*.

(*) Gráfico 1: http://tinyurl.com/lfc97yh (Se aprecia la diferencia de velocidad de materialización entre Data URI y Binarios. En iOS es hasta 6 veces más rápido utilizar datos binarios)
(*) Gráfico 2: http://tinyurl.com/ke6vydt (Se puede ver la diferencia de carga entre SVGs sin compresión; con base64, la que usa Data URI; y sin utilizar SVG). En iOS, la carga es 257 veces más rápido, y en Android hasta 75 veces más veloz.

¡Un saludo, y sigan con el buen trabajo!

Responder

Sebastian

hace 8 años

“con ancho porcentual y borde al mismo tiempo, lo que rompe la estructura al agregar pixeles al espacio que lo contiene…”
No conoces box-sizing: border-box; ?
El ancho y alto incluye contenido, padding y borde.

Responder

Mario

hace 7 años

Bkn gracias… justo lo que buscaba…

Responder