lunes, 16 de junio de 2014

Las búsquedas "Media queries" con HTML y CSS



Hoy en día, una empresa que desee tener un sitio web "digno de ese nombre" deberá proponer un contenido que se visualice correctamente en todos los medios actuales: en una pantalla de ordenador (¡de 13" a 32"!), en una tableta táctil y en un smartphone.

La dificultad consiste, claro está, en lograr que nuestro contenido sea visible y legible a partir de esos tres tipos de pantalla. El objetivo es proponer una experiencia de uso, una interfaz web, un diseño web, que se adapte automáticamente a las diferentes resoluciones de pantalla que podría utilizar el usuario.

El término inglés que hace referencia a este tipo de arquitectura web es Responsive Web Design, que podríamos traducir en la lengua de Cervantes como Diseño web adaptable o flexible. Otro término que se suele usar es Diseño web sensible.

Para lograr nuestro objetivo, vamos a usar tres técnicas: 
  • un grid flexible, que permita reorganizar la estructura de las páginas, de modo que puedan adaptarse a la resolución de la pantalla. 
  • imágenes flexibles, para que su tamaño se adapte al tamaño de la pantalla de visualización. 
  • media queries, que nos permitan saber cuál es el tipo y las dimensiones del dispositivo del visitante.


1. Objetivo

Para crear un diseño web adaptable, será necesario conocer la resolución de la pantalla utilizada, para poder proponer estilos que se adapten a dicha resolución. Ese es precisamente el objeto del módulo Media Queries, que se encuentra en fase de Recommendation del 19 de junio de 2012: http://www.w3.org/TR/css3-mediaqueries/

Con las búsquedas de medios de difusión, podremos crear hojas de estilo adaptadas a los distintos tamaños de pantalla. La detección se hará automáticamente y el navegador utilizará entonces el estilo adecuado.


2. Con HTML 4 y CSS 2.1

Con HTML 4 y CSS 2.1 podemos usar una hoja de estilo específica para cada medio utilizado. Simplemente tendremos que insertar el atributo media en el elemento link.

Ejemplo:

<link rel="stylesheet" media="screen" href="estiloPantalla.css"
type="text/css" />
<link rel="stylesheet" media="print" href="estiloImpresora.css"
type="text/css" />

Podemos usar: 
  • screen: para las pantallas. 
  • handheld: para los dispositivos móviles o de tamaño reducido. 
  • print: para la impresión. 
  • aural (CSS 2.0) / speech (CSS 2.1): para la síntesis vocal. 
  • braille: para las páginas en braille. 
  • embossed: para las impresoras en braille. 
  • projection: para el uso en proyectores. 
  • tty: para el uso de terminales. 
  • tv: para la difusión en televisores. 
  • all: para todos los tipos de dispositivos.

Aunque, para la difusión en smartphones, el atributo handheld no es compatible con la mayoría de los navegadores, así que de momento no se pueda usar y, encima, no se adapta a las tabletas táctiles.

Debe saber que esta sintaxis HTML 4 / CSS 2.1 se puede usar con una regla @:
@media screen {
...
}
@media print {
...
}


3. Los criterios de búsqueda de Media Queries en CSS3

El módulo Media Queries nos permite seleccionar con toda precisión el medio de difusión, mediante criterios específicos o combinaciones de criterios. El resultado obtenido de esta búsqueda será de tipo boleano: el valor será verdadero o falso. De este modo podremos seleccionar una hoja de estilo en función de las respuestas obtenidas en la búsqueda.

Estos son los criterios que podremos usar en las búsquedas Media Queries:
  • El ancho de la zona de visualización: width. Podemos examinar el ancho de la zona de visualización del navegador. Ejemplo: width: 780px. 
  • La altura de la zona de visualización: height. Podemos examinar la altura de la zona de visualización en el navegador. 
  • El ancho físico: device-width. Podemos examinar el ancho físico de la pantalla de difusión. 
  • La altura física: device-height. Podemos examinar la altura física de la pantalla de difusión. 
  • La orientación de la pantalla: orientation. Ejemplo: orientation: portrait o orientation: landscape. Resulta bastante práctico para examinar si el usuario usa su tableta táctil verticalmente (portrait) u horizontalmente (landscape). 
  • El ratio: aspect-ratio. Para examinar el coeficiente ancho/alto. Ejemplo: aspect-ratio: 16/9. 
  • El ratio físico : device-aspect-ratio. Para examinar el coeficiente físico ancho/alto de la pantalla. 
  • El color: color. Podemos examinar si el soporte de difusión utiliza el color (valor por defecto en caso de que no se haya especificado), o el blanco y negro, o una escala de grises. Ejemplo: min-color: 8. 
  • El número de colores de la tabla de colores: color-index. 
  • El número de niveles de gris para los dispositivos monocromos: monochrome. 
  • La resolución de la pantalla de visualización: resolution. Expresada en dpi. 
  • El tipo de exploración en las pantallas de televisión: scan. 
  • Utilice grid para ver si la pantalla de difusión utiliza una cuadrícula con un único tamaño de fuente.


4. La sintaxis de las búsquedas Media Queries

Veámoslo con un ejemplo concreto. Queremos ocuparnos de los periféricos que tengan un ancho exacto de 780 píxeles.

En una página HTML, en el <head>, insertaremos la búsqueda con el elemento link:

<link rel="stylesheet" media="screen and (width:780px)"
href="styles780.css" />
Esta sería la búsqueda en una página CSS con la regla @:
@media screen and (width:780px) {
...
}

Indicamos que el tipo de dispositivo es una pantalla: screen.

Indicamos que hay un segundo criterio: and.

Indicamos que el ancho de la pantalla deberá ser de 780 píxeles: width: 780px.


5. Los valores máximos y mínimos

Todos los criterios que acabamos de ver, excepto orientation, scan y grid, admiten los prefijos min- y max- como valores de criterio.

Por ejemplo, si queremos ocuparnos de las pantallas que tengan un tamaño de 780 píxeles como máximo:

@media screen and (max-width:780px) {
...
}

Este criterio es muy útil, ya que no se suele trabajar para un tamaño fijo de pantalla, ya sea de ordenador, o de otro tipo.


6. Los operadores lógicos

En las búsquedas de medios de difusión podemos usar operadores lógicos para precisar y combinar diferentes criterios.

El operador and permite aplicar la lógica Y.

Primer ejemplo: queremos examinar las pantallas que presenten un ancho de 780 píxeles y que sean monocromas:

@media screen and (width:780px) and monochrome {
...
}

Segundo ejemplo: queremos examinar las pantallas que tengan una resolución de entre 1024 píxeles, como mínimo, y 1280 píxeles, como máximo:

@media screen and (min-width: 1024px) and (max-width: 1280px) {
...
}

El operador not permite utilizar la lógica NO.

Ejemplo: queremos examinar las pantallas que no tengan una resolución de 780 píxeles:

@media screen and (not width:780px) {
...
}

La coma , permite utilizar la lógica O.

Ejemplo: queremos examinar las pantallas que tengan 780 píxeles de ancho o que sean monocromas:

@media screen and (width:780px), monochrome {
...
}

La palabra clave only permite indicar que la búsqueda deberá aplicarse exclusivamente a los criterios indicados. De este modo podemos ocultar los estilos para los antiguos navegadores:

@media only screen and (width:780px) {
...
}


7. Búsquedas para diferentes soportes

El sitio web http://stuffandnonsense.co.uk/blog/about/hardboiled_css3_media_queries nos propone búsquedas "listas para usar" para los diferentes tipos de pantalla:

/* Smartphones (portrait and landscape) ----------- */
@media only screen
and (min-device-width : 320px)
and (max-device-width : 480px) {
/* Styles */
}
/* Smartphones (landscape) ----------- */
@media only screen
and (min-width : 321px) {
/* Styles */
}
/* Smartphones (portrait) ----------- */
@media only screen
and (max-width : 320px) {
/* Styles */
}
/* iPads (portrait and landscape) ----------- */
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px) {
/* Styles */
}
/* iPads (landscape) ----------- */
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : landscape) {
/* Styles */
}
/* iPads (portrait) ----------- */
@media only screen
and (min-device-width : 768px)
and (max-device-width : 1024px)
and (orientation : portrait) {
/* Styles */
}
/* Desktops and laptops ----------- */
@media only screen
and (min-width : 1224px) {
/* Styles */
}
/* Large screens ----------- */
@media only screen
and (min-width : 1824px) {
/* Styles */
}
/* iPhone 4 ----------- */
@media
only screen and (-webkit-min-device-pixel-ratio : 1.5),
only screen and (min-device-pixel-ratio : 1.5) {
/* Styles */
}


Espero haber ayudado en algo. Hasta la próxima oportunidad!







No hay comentarios:

Publicar un comentario en la entrada