Responsive web design
Índice
- 1.Introducción
- 2.Historia y definición
- 3.Responsive web design (RWD)
- 4.Causas de su creciente adopción
- 5.Principales retos
- 6.Conceptos relacionados
- 7.Principales elementos del RWD
- 7.1.Meta viewport
- 7.2.Media queries
- 7.3.Modelo de caja: border-box
- 7.4.Sistemas de rejilla
- 7.5.Texto / Tipografía
- 7.6.Imágenes
- 8.Elementos especialmente problemáticos en RWD
- 8.1.Contenido embebido mediante iframe
- 8.2.Tablas
- 8.3.Texto preformateado
- 8.4.Canvas
- 8.5.RWD para email
- 9.Frameworks más relevantes
- 9.1.Bootstrap 3
- 9.2.Foundation 5
- 9.3.Unsemantic
1.Introducción
2.Historia y definición
2.1.Definición por Ethan Marcotte, en el 2010
2.2.Definición por Kayla Knight en Smashing Magazine
2.3.Definición por Wikipedia
3.Responsive web design (RWD)
4.Causas de su creciente adopción
4.1.Aumento de la demanda
4.2.Un contenido único para todas las versiones
4.3.Mejor rendimiento SEO
4.4.Ahorro de tiempo y costes al no tener que desarrollar sitios separados
4.5.No dependencia de técnicas con detección de dispositivo
5.Principales retos
5.1.Rendimiento y optimización
5.2.Dificultad técnica de su implementación
5.3.Experiencia de usuario
5.4.Tipos de contenidos especialmente problemáticos
6.Conceptos relacionados
6.1.Diseño estático, líquido, adaptativo y responsive
6.2.Progressive enhancement
6.3.Mobile first
6.4.RESS
7.Principales elementos del RWD
-
Meta viewport
-
Media queries
-
Modelo de caja: border-box;
-
Sistemas de rejilla
-
Texto / Tipografía
-
Imágenes
7.1.Meta viewport
<meta name="viewport" content="width=device-width, initial-scale=1">
7.2.Media queries
(a) <link rel="stylesheet" media="screen and (max-width: 480px)" href="extra.css" /> (b) @import url(extra.css) screen and (max-width: 480px); (c) @media screen and (max-width: 480px) { ... }
/* Dispositivos especialmente pequeños (phones, menores que 768px) */ /* Estilos principales, ya que es el contexto por defecto en Bootstrap */ @media (min-width: 768px) { /* Dispositivos pequeños (tablets, 768px y superiores) */ } @media (min-width: 992px) { /* Dispositivos medios (escritorio, 992px y superiores) */ } @media (min-width: 1200px) { /* Dispositivos grandes (escritorios grandes, 1200px y superiores) */ } }
[...] <meta name="viewport" content="width=device-width, initial-scale=1"> [...] <div id="destacados"> <article> <h2>Primer destacado</h2> <p>Lorem ipsum dolor sit amet... veniam quis.</p> <p><a href="#">Más información</a></p> </article> <article> <h2>Segundo destacado</h2> <p>Lorem ipsum dolor sit amet... veniam quis.</p> <p><a href="#">Más información</a></p>3 </article> <article> <h2>Tercer destacado</h2> <p>Lorem ipsum dolor sit amet... veniam quis.</p> <p><a href="#">Más información</a></p> </article> <br class="clear"/> </div> [...]
* { box-sizing: border-box; -moz-box-sizing: border-box; -webkit-box-sizing: border-box; } [...] article { padding: 20px; } @media (min-width: 481px) { #destacados > article { float: left; width: 50%; } } @media (min-width: 768px) { #destacados > article { width: 33%; } }
7.3.Modelo de caja: border-box
7.4.Sistemas de rejilla
7.5.Texto / Tipografía
-
Renderizado óptimo en pantallas con diferentes densidades de píxel.
-
Facilidad para cambiar sus propiedades, aplicando CSS convencional como a cualquier texto (color, efectos, etc.).
-
Correspondencia en tamaños con textos colindantes.
-
Sencillez de uso y de mantenimiento.
-
Optimización de peticiones HTTP al funcionar al estilo de una spritesheet.
7.6.Imágenes
img { max-width: 100%; height: auto; }
-
Peso / consumo de ancho de banda, ya que en muchos escenarios se descarga una imagen mayor a la estrictamente requerida.
-
En ocasiones no se desea solamente un reescalado, sino cambiar la porción de la imagen mostrada (técnica denominada «art-direction»).
-
rwd.images.js (con fallback a noscript y soporte para art-direction)
-
hisrc (plugin de jQuery)
8.Elementos especialmente problemáticos en RWD
8.1.Contenido embebido mediante iframe
.div-container { position: relative; padding-bottom: 75%; height: 0; overflow: hidden; }
.div-container > iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
.youtube-container { position: relative; padding-top: 35px; padding-bottom: 75%; height: 0; overflow: hidden; }
#my-iframe { max-width: 100%; }
8.2.Tablas
[...] .overflow-container { overflow-y: scroll; } [...] <div class="overflow-container"> <table> <!-table contents -> </table> </div>
8.3.Texto preformateado
pre { white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ }
8.4.Canvas
[...]#my-canvas { width: 100%; height: auto; } [...] <canvas id="my-canvas" width="800" height="600" />