Hay varias cosas a tener en cuenta al servir imágenes a los espectadores.
- Mantenga la proporción de la imagen igual que las dimensiones originales
Hacemos esto para evitar que la imagen se sesgue y para evitar que las imágenes se vean borrosas. Podemos mantener la relación de dimensión igual o recortar partes que no encajan.
Cuando se usa un <img>
elemento o algo similar, esto es bastante sencillo, solo requiere el uso de un conjunto width
o height
conjunto OR max-width
o max-height
.
Sin embargo, en el caso de una imagen de ancho de ventana completa, esto es un poco más complejo. Hay varias formas de CSS para hacerlo , la mejor de las cuales es background-size:cover
como el primer ejemplo vinculado en el artículo y el programa de respuestas de Talkingrock .
Además, ahora tenemos la capacidad de usar las características que se encuentran en la especificación de imágenes receptivas, incluido srcset
el <picture>
elemento, que son bastante útiles. Hablo de esto más adelante en esta respuesta.
- Proporcione a los espectadores solo las imágenes que necesitan
Para tener una carga de página más rápida y evitar que los usuarios necesiten transferir más datos, es de vital importancia brindarle al usuario final solo las imágenes que necesita, cuando las necesita. Esto significa que les servimos una imagen del mismo tamaño o un poco más grande que la vista que están usando y esperando para cargar imágenes que no se verán inmediatamente hasta después de la carga inicial de la página.
Podemos servir una imagen de tamaño más apropiado usando CSS usando @media
consultas cuando usamos imágenes de fondo. Las imágenes que no están en la consulta de medios que se utilizan no se cargan . Recomiendo usar al menos tres tamaños de fotos (lo que significa al menos 3 consultas de medios), pero tener un par más podría ser muy útil en cuanto al rendimiento. El siguiente es un ejemplo, pero generalmente debe coincidir con algunos puntos de interrupción generales para el diseño de su sitio.
@media (max-width: 320px) { /* For phones (this breakpoint is the one I'm least sure about) */
... background-image(imageURLforPhones.png); ...
}
@media (min-width:501px) and (max-width: 1024px) { /* For tablets and such */
... background-image(imageURLforTablets.png); ...
}
@media (min-width: 1025px) { /* For large screens */
... background-image(imageURLforLargeScreens.png); ...
}
Pero, seamos sinceros: no somos buenos para elegir puntos de interrupción ni somos perfectos para elegir dimensiones de imagen dado un cierto tamaño de pantalla. ¿No sería genial si pudiéramos dejar que algo haga esto "mágicamente" por nosotros?
¡La buena noticia es que ahora podemos !
Con la especificación de imágenes receptivas, podemos dejar que el navegador decida todo esto por nosotros, siempre que lo ayudemos un poco. La srcset
propiedad siempre tan útil se puede usar con un <img>
o un <picture>
elemento. Para cambiar la resolución como lo estamos haciendo aquí, deberíamos usar un <img>
elemento.
El siguiente es un ejemplo del HTML necesario para permitir srcset
hacer su trabajo. Para más información, puede leer el gran artículo de Yoav Weiss sobre el tema. El ejemplo se extrae de él.
<img src="cat_500px.jpg"
srcset="cat_750px.jpg 1.5x, cat_1000px.jpg 2x"
width="500" alt="lolcat">
Nota al margen: si necesita publicar la misma imagen con diferentes dimensiones en ciertos tamaños de ventana gráfica, puede usar el sizes
atributo.
No digo que usar srcset
sea necesariamente mejor que usar una imagen de fondo CSS, no he trabajado lo suficiente para decirlo con certeza, pero es potencialmente una mejor manera.
Además, para ayudar con el rendimiento, podemos "cargar lentamente" imágenes que inicialmente no serán visibles. Esto significa que evitamos que se carguen inicialmente, pero comenzamos a cargarlos tan pronto como la página inicial termine de cargarse. De esa forma podemos hacer que el espectador vea la página lo antes posible y complete algunos detalles más adelante. Aquí hay una manera de hacerlo, no voy a entrar en muchos detalles en este momento.
- Asegúrese de que se muestre el contenido de la imagen que desea mostrar
Si tenemos las dimensiones correctas y un gran rendimiento, eso es increíble, pero si el espectador no ve lo que queremos que vean, no tiene sentido. Si estamos mostrando la imagen completamente todo el tiempo, esto no es un problema, pero si tenemos que recortar la imagen, puede ser un problema.
Podemos recortar background-image
s usando CSS usando background-size
y background-position
(y más clip
o menos, pero eso generalmente se usa para formas más artísticas y complejas). Los detalles exactos de esto variarán de una imagen a otra dependiendo de cómo se implemente.
La segunda opción es usar el <picture>
elemento. Usamos esto cuando solo queremos que se muestre parte de la imagen, como se ve aquí , pero aquí hay un ejemplo simple de ello en la práctica (extraído del gran artículo de Jason Grigsby sobre este tema).
<picture>
<source media="(min-width: 45em)" srcset="large.jpg">
<source media="(min-width: 32em)" srcset="med.jpg">
<img src="small.jpg" alt="The president giving an award.">
</picture>
Quiero reiterar, si solo necesita hacer un cambio de resolución , no use el <picture>
elemento , solo use el <img>
elemento con srcset
. El único momento en que necesitamos el <picture>
elemento es para esta dirección de arte, es decir, recorte, etc.
También existe la posibilidad de hacer un recorte del lado del servidor, usar una máscara SVG o hacer algunas cosas con Canvas, pero eso está un poco fuera del alcance de esta respuesta.
Algunas otras notas
Los puntos de interrupción específicos no son tan importantes. Al igual que con todos los diseños receptivos, es importante hacer lo mejor que podamos para todas las ventanas gráficas, pero no hay consultas de medios que sean perfectas para todos los sitios.
El tiempo de carga de la página es muy importante , y las imágenes pueden ralentizar mucho el tiempo de carga inicial. Asegúrese de cargar imágenes que se verán inmediatamente primero, luego otras. Intente evitar que las imágenes (como JPEG) muestren parte de la imagen mientras carga el resto. También optimice todas sus imágenes para que tengan el tamaño de archivo más pequeño posible y al mismo tiempo tengan la cantidad de calidad que necesita.
Es importante recordar que las imágenes, en la mayoría de los casos, deberían ser un accesorio, no una necesidad. Recomiendo probar siempre cómo se ve una página web sin imágenes para asegurarse de que se pueda usar.
Nota : Podemos usar un polyfill llamado Picturefill para servir a los navegadores más antiguos que no admiten la especificación de imágenes receptivas.