
Índice
Introducción
Con la utilización masiva de distintos dispositivos (ordenadores, tabletas, teléfonos móviles) surge la necesidad de que las páginas web se vean adecuadamente en cada uno de ellos.
Existen varias opciones (fuente http://www.lukew.com/ff/entry.asp?1509):
Responsive Design
Consiste en generar un sólo sitio web (un solo contenido) pero con un diseño adaptado a la visualización y manejo en cada dispositivo (varias hojas de estilo). Es el Responsive Design o diseño adaptativo.
Cada dispositivo tiene una resolución de pantalla, y por consiguiente del navegador. Mediante una mezcla de regiones e imágenes adaptables y el uso de los media queries (permiten detectar en las CSS la resolución del navegador en cada momento), se consigue que el diseño vaya cambiando según sea la resolución y orientación del dispositivo.
La detección del dispositivo se hace normalmente desde el cliente mediante lo media queries.
Ejemplos: http://mediaqueri.es/
Device Experiences
Se trata de generar un sitio web completo y distinto para cada uno de los dispositivos en que se van a visionar las páginas web. Esto supone más trabajo, ya que habrá que crear varios sitios completamente distintos.
La ventaja es que cada sitio estará mejor adaptado al manejo que se hace desde cada dispositivo.
La detección del dispositivo puede hacerse normalmente desde el servidor. En función del dispositivo desde el que accedamos se nos brindará un sitio u otro.
Ejemplos:
RESS
RESS (Responsive Design + Server Side Components) sería una mezcla entre las dos soluciones anteriores.
No se trata de construir dos sitios completos totalmente distintos, sino sólo aquellas partes cuyo funcionamiento es distinto para cada dispositivo.
Por ejemplo, imaginemos que en los ordenadores de escritorio queremos que el menú se vea en la parte superior, mientras en los móviles es mejor que aparezca abajo:
El servidor detectará el dispositivo desde el que se accede (escrotorio o móvil), y cargará los componentes que considere necesarios. El resto de componentes serán comunes y su diseño se adaptará como en el Responsive Design.
Media Types
Las hojas de estilo CSS2 pueden especificar una presentación distinta en función del dispositivo: bien sea pantalla, papel, reconocimiento de voz , dispositivo braile, etc.
Algunas propiedades sólo tienen sentido para ciertos dispositivos (por ejemplo page-break-before, que hará saltos de página cuando imprimamos), pero otras pueden ser comunes pero con distinto aspecto. Por ejemplo, quizá queramos tamaños distintos de letra (font-size) en papel que en pantalla.
Lugares en los que especificar los media types
Hay dos lugares donde especificar los media types, para cargar las hojas estilos en función del tipo de medio:
En la hoja de estilos
Utilizaremos las reglas @media o @import.
Con @import podemos cargar otra hoja externa. Por ejemplo:
@import url("hojaEstilos.css") screen;
Con @media, podemos especificar, en la misma hoja de estilos, varias reglas para un tipo de medio específico. Por ejemplo:
@media print {/* estilos para imprimir */} @media screen,print{/* estilos para pantalla y para imprimir */}
En la misma hoja podemos agregar tantas reglas @media como sean necesarias.
En el HMTL, con el atributo media de la etiqueta <link>
Dentro del <head>, podríamos cargar varias hojas de estilo, una para cada medio. Por ejemplo:
<link rel="stylesheet" type="text/css" media="print,handheld" href="hoja1.css"> <link rel="stylesheet" type="text/css" media="screen" href="hoja2.css">
Media types más habituales
- all
- todos los dispositivos;
- para imprimir;
- screen
- pantallas de ordenadores, tabletas o móviles;
Más información: http://www.w3.org/TR/CSS21/media.html
Media Queries
Los media queries amplían la funcionalidad a los media types. Consisten en especificar un media type, y además añadirle ciertas condiciones como el ancho (width), la altura (height) y el color (color). Así se pueden especificar distintos estilos según la resolución del dispositivo o navegador.
Un ejemplo:
@media screen and (min-width: 400px) and (max-width: 700px) { … }
El ejemplo anterior permite definir una serie de estilos siempre y cuando la web se vea en una pantalla, y con una resolución de entre 400 y 700 píxeles.
Los media queries son expresiones lógicas que si se cumplen cargan una hoja o algunos estilos.
Dentro del media query podemos especificar:
- media: el tipo de media que vayamos a usar (all, screen, print, etc.)
- and, uno o varios, seguidos de la característica que restringe el media querie entre parétesis;
- si añadimos una coma (,) podemos añadir varios media queries en la misma línea (equivale al OR lógico).
Ejemplo:
<link rel="stylesheet" type="text/css" href="hoja1.css" media="all and (min-width: 480px) and (min-device-width: 480px), (max-device-width: 800px) and (min-width: 480px) and (orientation:landscape)">
Lugares en los que especificar los media queries
Hay dos lugares donde especificar los media types, para cargar las hojas estilos en función del tipo de medio y ciertas características:
En la hoja de estilos
Utilizaremos las reglas @media o @import.
Con @import podemos cargar otra hoja externa. Por ejemplo:
@import url("hojaEstilos.css") screen and (min-width:960px);
Con @media, podemos especificar, en la misma hoja de estilos, varias reglas para un tipo de medio específico y sus características. Por ejemplo:
@media all and (min-width:960px){/* estilos para todos los dispositivos con al menos 960px de ancho */}
En la misma hoja podemos agregar tantas reglas @media como sean necesarias.
En el HMTL, con el atributo media de la etiqueta <link>
Dentro del <head>, podríamos cargar varias hojas de estilo, una para cada condición. Por ejemplo:
<link rel="stylesheet" type="text/css" media="screen and (max-width:480px)" href="hoja1.css"> <link rel="stylesheet" type="text/css" media="screen and (max-width:1024px)" href="hoja2.css">
Características para los media queries
Estas son algunas de las características que admiten los media queries:
width
La anchura. Admite los prefijos min/max. Coincide con la anchura exterior del dispositivo (píxeles reales), o del navegador incluyendo la barra de scroll. Por ejemplo:
<link rel="stylesheet" media="print and (min-width: 25cm)" href="hojaEstilos.css" />
height
La altura. Admite los prefijos min/max. Coincide con la altura exterior del dispositivo (píxeles reales), o del navegador incluyendo la barra de scroll.
device-width
La anchura del dispostivo. Admite los prefijos min/max. Coincide con la anchura exterior del dispositivo (píxeles renderizados), o del navegador incluyendo la barra de scroll. Por ejemplo:
@media screen and (device-width: 800px) { … }
device-height
La altura del dispostivo. Admite los prefijos min/max. Coincide con la altura exterior del dispositivo (píxeles renderizados), o del navegador incluyendo la barra de scroll.
orientation
La orientación del dispositivo. Admite los valores portrait | landscape.
@media all and (orientation:portrait) { … }
device-aspect-ratio
Es la relación entre el ancho y el alto del dispositivo. Por ejemplo:
@media screen and (device-aspect-ratio: 16/9) { … }
color
Especifica que el dispositivo es en color. Por ejemplo:
@media all and (color) { … }
resolution
La resolución del dipostivo (en papel) o la densidad de píxeles (píxeles por pulgada de pantalla). Admite los prefijos min/max. Por ejemplo:
@media print and (min-resolution: 300dpi) { … }
Más información: http://www.w3.org/TR/css3-mediaqueries/
La etiqueta <meta>
En algunos móviles, los píxeles del dispositivo no coinciden con los que vienen definidos en el CSS. Por ejemplo, visualizamos una página web de 480 px de ancho en CSS, en un móvil con 960 px de resolución real, con lo que se visualizará a la mitad del tamaño esperado.
La densidad de píxeles del móvil, en este caso, es del doble, para que el contenido se vea con más calidad. Según escalemos el contenido, los píxeles CSS se adaptarán a la escala de los del dispositivo (y con menor calidad).
Para que las condiciones de los media queries se cumplan respecto a la escala CSS, se utiliza una etiqueta <meta> con ciertos atributos. Se trata de que los píxeles CSS y los del dispositivo se visualicen a la misma escala. Así aseguramos que el móvil considera el media query para el ancho CSS deseado.
Los valores de la etiqueta más comunes serían:
<meta name="viewport" content="width=device-width, initial-scale=1">
Más información:
- http://www.youtube.com/watch?feature=player_embedded&v=OP2GnAFeFTY
- https://www.w3schools.com/css/css_rwd_viewport.asp
- https://developer.mozilla.org/es/docs/M%C3%B3vil/Viewport_meta_tag
- http://www.quirksmode.org/blog/archives/2010/04/a_pixel_is_not.html
Resoluciones de los dispositivos
http://spirelightmedia.com/resources/responsive-design-device-resolution-reference
http://visual.ly/apple-devices-resolutions
http://www.binvisions.com/articles/tablet-smartphone-resolutions-screen-size-list/
width versus device-width:
http://www.javascriptkit.com/dhtmltutors/cssmediaqueries2.shtml
http://en.wikipedia.org/wiki/List_of_displays_by_pixel_density
dispositivo | resolución (px) | device-width / device-height (px) |
---|---|---|
iPhone | 320 x 480 | 320 x 480, tanto en modo portrait como en landscape |
iPhone 4 | 640 x 960 | 320 x 480, tanto en modo portrait como en landscape
CSS densidad de pixel 2 |
iPad 1 and 2 | 768 x 1024 | 768 x 1024, tanto en modo portrait como en landscape |
iPad 3 | 1536 x 2048 | 768 x 1024, tanto en modo portrait como en landscape
CSS densidad de pixel 2 |
Samsung Galaxy S I and II | 480 x 800 | 320 x 533, en modo portrait
CSS densidad de pixel 1.5 |
Samsung Galaxy S III | 720 x 1280 | 360? x 640?, en modo portrait |
HTC Evo 3D | 540 x 960 | 360 x 640, en modo portrait
CSS densidad de pixel 1.5 |
Amazon Kindle Fire | 1024 x 600 | 1024 x 600, en modo landscape |
Trucos para maquetar con media queries
Ver el siguiente artículo:
http://xn--diseowebresponsivo-q0b.com.ar/
Primero el móvil
Mejor empezar a maquetar las hojas de estilo para los dispositivos móviles, quizá luego las de las tablet, y por últimos las de los ordenadores de escritorio.
Estas son algunas razones de por qué hacerlo así:
1. Los móviles están en auge
Cada vez se navega y se compra más a través de los móviles, así que conviene tener en cuenta un mercado que está cada vez más en expansión.
2. Los móviles te obligan a centrarte
En una pantlla chiquituja, por ejemplo de 320 x 480, más vale que te centres en lo más imprescindible para el usuario y que le facilites la navegación.
3. Los móviles aumentan tu capacidad
Los desarrolladores de páginas web con cierto interés, han ido cada vez más ampliando sus conocientos para hacer web innovadoras que aumenten la interacción con el usuario: plugins, aplicaciones y efectos en JavaScript...
Los móviles aumentan las posibilidades de interacción, por ejemplo, con la geolocalización, o la orientación del dispositivo.
Más información:
http://www.lukew.com/ff/entry.asp?933#page
http://blog.cloudfour.com/where-are-the-mobile-first-responsive-web-designs/
Utiliza diseños fluidos
Basa tus diseños en cuadrículas (grids) fluidas.
En las tipografías, utiliza unidades em; será más fácil reescalar su tamaño general en cada hoja.
A las imágenes conviene aplicarles el estilo max-width:100%, y heigth:auto. Así conseguimos que tengan su tamaño por defecto, pero no mayor que el contenedor en el que se encuentra (que se supone que será fluido).
En vídeo HTML5 Podemos utilizar el atributo media dentro de la etiqueta <source>. Por ejemplo:
<video> <source src="high-res.webm" media="min-width:800px"> <source src="low-res.webm"> </video>
Enlaces de interés
Definición
http://es.wikipedia.org/wiki/Dise%C3%B1o_web_adaptativo
Especificaciones
http://www.w3.org/TR/CSS21/media.html
http://www.w3.org/TR/css3-mediaqueries/
Artículos sobre diseño adaptativo
http://arborwebsolutions.com/articles/responsive-design-is-an-official-w3c-recommendation
http://alistapart.com/article/responsive-web-design
http://xn--diseowebresponsivo-q0b.com.ar/ (en español, traducción del artículo anterior).
http://www.lukew.com/ff/entry.asp?1509
http://www.lukew.com/ff/entry.asp?1436
Artículos sobre el uso de imágenes
http://alistapart.com/article/responsive-images-how-they-almost-worked-and-what-we-need
Artículos sobre "primero el móvil"
http://www.lukew.com/ff/entry.asp?933#page
http://blog.cloudfour.com/where-are-the-mobile-first-responsive-web-designs/