Supongamos que tenemos una imagen de 400 píxeles de ancho por 300 píxeles de alto. Pues bien, ver esta imagen a tamaño real requiere de un dispositivo con un ancho como mínimo de 400px, ya que una resolución inferior requeriría de scroll horizontal, y esto, a menos que sea imprescindible, vamos a tratar siempre de erradicarlo.
La opción a día de hoy más factible es redimensionar dicha imagen con respecto al contenedor, para así hacerla adaptable a las distintas resoluciones posibles. y esto sólo es posible olvidándonos de la unidad píxel, y pensando en unidades relativas.
Olvídate igualmente en tener varias imágenes en píxeles concretos para según qué dispositivo (iphone 5 o una determinada tablet). El mundo de los dispositivos cambia muy rápido, y día a día salen al mercado nuevos elementos con conexión a Internet, y con resoluciones de lo más variadas. Con el trabajo que cuesta seleccionar buenas imágenes de bancos.
1.- CSS y las imágenes responsive
Sigamos con nuestra imagen de 400px de ancho. Vamos a declarar que dicha imagen tenga un ancho relativo. En este caso del 100%
Bien, con esto hemos logrado desprendernos de los píxeles. Ahora la imagen siempre se ajustará a su contenedor. Si está dentro de un artículo, ocupará el 100% del ancho de dicho artículo. Si está dentro de un widget en el sidebar o aside (elemento HTML5), siempre ocupará el 100% del ancho de dicho widget. Perfecto. Hemos pasado de una imagen de ancho fijo a una imagen fluida.
Vayamos al siguiente nivel. Tener una imagen fluida está genial, ya podemos empezar a utilizar el poder de las imágenes. El problema es: ¿Que pasa cuando nuestro contenedor supera el tamaño en píxeles de la imagen?. Supongamos un contenedor de 1200 píxeles. ¿Que hace nuestra imagen fluida? Llenar el 100% del espacio. Por lo tanto, nuestra imagen de 400px pasa a convertirse en una imagen de 1200px. Responsive total, eso sí, pero pixelada, eso también. Esto no es buena idea.
Tenemos que conseguir que dicha imagen sea fluida, pero hasta un límite! Solución: la regla CSS max-width. Mediante dicha regla vamos a indicar que la imagen tenga su ancho en píxeles, pero que como máximo, siempre esté al 100% de la anchura del contenedor. Dicho de forma clara:
- Si el contenedor tiene 300px: nuestra imagen 300px (max-width: 100%)
- Si el contenedor tiene 400px: nuestra imagen 400px (max-width: 100%)
- Si el contenedor tiene 1200px: nuestra imagen se queda en 400px!
Tenemos lo bueno de las imágenes fluidas y no tenemos pixelación por exceso de estiramiento.
2.- Alto ( height ) en imágenes responsives.
Con el valor height la cosa cambia un poco. Normalmente solemos guiarnos por el ancho de los dispositivos y contenedores para ubicar nuestro contenido. Rara vez en diseño web el valor height es un elemento a tener en cuenta. Existen webs con navegación horizontal, pero la mayoría suelen ser en vertical, por lo tanto son valores a los que no se les presenta mucho control.
Sin embargo, es interesante su uso en diseño web con elementos fijos, por ejemplo un menú de navegación fixed, al que seguramente tengamos que definir un alto concreto. Pero más allá de esto, y volviendo con las imágenes responsive, lo mejor para el alto es indicar un valor auto, es decir, delegar al explorador que calcule el alto del elemento.
En la mayoría de los casos, esto hará que el alto no pierda proporción con respecto al ancho. Si el ancho de la imagen se reduce para adaptarse a responsive, el alto también lo hace. Si el ancho se queda fijo, el alto también lo hará. Así que completemos nuestra regla para imágenes responsives:
img { height: auto; max-width: 100%; }
Con esto tendremos listo nuestra web para que todas las imágenes sean responsive.