Tutorial básico sobre CSS Sprite

La primera vez en mi vida que escuche hablar sobre las CSS Sprite fue hace casi 5 años cuando Dave Shea escribió un interesante articulo en Alistapart, desde ese momento siempre quise hacer una serie de simples pruebas para publicar en este blog mostrando las ventajas de utilizar esta practica, además de mostrar lo sencillo que es aplicarla.

¿Que son los CSS Sprites?

Simplemente se trata de una antigua técnica que al comienzo fue utilizada por los desarrolladores de videojuegos, y que principalmente consiste en utilizar una sola imagen compuesta por varias y que haciendo uso de las propiedades background-position de CSS se visualice cada imagen de forma individual.

¿No se entiendo muy bien? No hay problema, vamos con una empresa que seguramente conoces y que los utiliza desde hace mucho  tiempo, Google. Si realizas cualquier búsqueda en Google veras que se muestran varias imágenes, por ejemplo en la paginación de resultados, lo que muchos no se dan cuenta es que detrás de todas estas imágenes se encuentra SOLO UN ARCHIVO y no un archivo por imagen.

Sprite Google

Esto acelera significativamente la descarga, y todos sabemos lo rápido que es Google :D

En la imagen remarco al menos dos imágenes para que vean donde se ubican en el archivo.

ejemplo google

¿Y las ventajas?

La utilización de la técnica de los CSS Sprites tiene principalmente dos ventajas: por un lado tendremos más velocidad en la descarga y renderizado de nuestro sitio web por parte de los navegadores y por otro lado tendremos una significativa reducción de consumo de recursos del servidor.

Dos claras ventajas y que son mas que suficientes para que amerite aprender un poquito mas sobre esta técnica.

Me convenciste, ¿Como empezamos?

Empecemos con un ejemplo practico. Al final de este articulo podrán ver una lista de enlaces para enviar este post a los distintos sitios sociales, antes de hacer este articulo estaba cargando una imagen distinta por cada enlace, de la siguiente forma.

Imagenes sin css sprites

Y el código HTML que  no cambiara en ninguno de los dos casos y que se podía hacer con listas :P

HTML:
  1. <div id="social"><a title="Enviar a Twitter" rel="nofollow" href="#">Twitter</a>
  2. <a title="Compartir en Facebook" rel="nofollow" href="#">Facebook</a>
  3. <a title="Guardar en delicious" rel="nofollow" href="#">Delicious</a>
  4. <a title="Enviar a Menéame" rel="nofollow" href="#">Menéame</a>
  5. <a title="Enviar a Stumbleupon" rel="nofollow" href="#">Stumbleupon</a></div>

Utilizando Firebug a continuación muestro lo que ocurría y como se desempeñaba ese código al ser descargado en el navegador.

rendimiento sin sprites

Como podrán ver en los resultados cada imagen realiza una nueva petición al servidor, por lo que mostrar ese bloque de enlaces termina siendo un pedido de ni más ni menos que 5 solicitudes al server.

Ahora utilizando la técnica de los CSS Sprites

Lo primero que necesitamos es generar un único archivo que contenga las 5 imágenes, en este caso los iconos sociales, y aunque lo podemos hacer de forma manual yo para estos casos lo que recomiendo es utilizar el sitio csssprites que por un lado nos pide que subamos las imágenes y por otro lado nos genera la imagen resultado junto con el código CSS necesario para mostrarlas de forma individual. En mi caso el archivo que me genero es el siguiente.

sprite social

En mi caso elegí PNG pero el sitio además de esta extensión también nos permite descargar el archivo en formato GIF. En la imagen se puede ver que todas las imágenes quedan con cierto orden, esto esta diseñado principalmente para que luego su posicionamiento con la propiedad background-position sea mas simple.

Ahora solo falta colocar el nuevo CSS, el código HTML es idéntico y no tiene absolutamente ninguna diferencia con el anterior que no utilizaba los sprites.

CSS:
  1. #social a, #social a:hover { padding: 2px 2px 2px 25px; margin-left:15px; background: #fff url('images/sprite-social.png') no-repeat}
  2. .twitter {background-position: -9px -153px !important;}
  3. .facebook {background-position: -9px -45px !important;}
  4. .meneame {background-position: -9px -81px !important;}
  5. .delicious {background-position: -9px -9px !important;}
  6. .stumbleupon {background-position: -9px -117px !important;}

En el código CSS esta todo el asunto, al utilizar una sola  imagen lo único que tenemos que hacer es ir jugando con la posición de fondo para mostrar cada imagen de forma individual. Es bastante fácil de aplicar, quizás comprenderlo lleva un poquito de mas tiempo al principio pero cuando lo hagan la primera vez entenderán de inmediato como funciona.

Ahora lo mejor los resultados de Firebug con la versión que utiliza los sprites.

rendimiento con sprites

Una sola petición al servidor y menos de la mitad del tiempo. Vale la pena utilizar esta técnica :D

Obviamente en mi caso solo hice esto con solo una parte del diseño del blog, pero se puede hacer algo mucho mas avanzado, hay casos como el de Google que todo el esquema de un sitio puede estar prácticamente en una sola imagen. Las posibilidades son casi infinitas, me gusto mucho por ejemplo los botones con rollover que hizo Manz.

Tags:

Compartir esta entrada

Entradas relacionadas

16 Comentarios en “Tutorial básico sobre CSS Sprite”

  1. Gabriel Cuesta Dice:

    Esta técnica a mí con Internet Explorer 6 me ha dado a veces problemas, especialmente cuando tengo que utilizar PNGs con transparencia y usar algún script para parchearlos.

    Pero para el resto de navegadores va ha ido siempre genial.

  2. alsanan Dice:

    El SpriteMe de Steve Souders es genial. Permite automatizar los sprites y generar las imágenes y el CSS a partir de cualquier página existente ahorrando una cantidad de tiempo ingente.

  3. Nico Dice:

    Muy buen post Pablo. Conocía la técnica pero siempre me dió pereza usarla :D Lo tendré en cuenta para la próxima.

    IE 6 da problemas con los pngs transparentes, pero en mi caso ya no diseño para esa versión ya que IE está en la versión 8. Igual hay formas de hacerlo, como se ve en este post:

    http://vagabundia.blogspot.com/2008/01/los-png-en-internet-explorer.html

    Saludos

  4. Carlos Dice:

    Muy bueno el tutorial. Era justo la explicación que andaba buscando.

    Saludos!

  5. Jonateo Dice:

    Interesante, me servirá para mis tareas de “Programación Web” y próximos proyectos.
    Gracias por la info.

  6. Tutorial básico sobre CSS Sprite | Kabytes Dice:

    [...] Tutorial básico sobre CSS Sprite | Kabyteswww.kabytes.com/programacion/tutorial-basico-sobre-css-sprite/ por fmj hace pocos segundos [...]

  7. dannyfilth Dice:

    gracias, estoy diseñando un sitio web donde utilice el jquery Cycle Plugin y en todos, TODOS! (a execcion de IEx) las imágenes se cargan de inmediato, en el mencionado IEx se ven primero la lista de imágenes grandes y cuando se cargan todas se acoplan a la funcionalidad del plugin, que raro k ocurra esto en tan buen navegador!!!, fui sarcástico! Lool, en fin, hoy mismo me pongo a pasar las imágenes a una sola, a ver como me va.
    saludos desde caracas Venezuela.

  8. Paloma Dice:

    Gracias por toda la información de tu blog. Casi que no hace ni falta comprarse revistas de informática!

  9. Enlaces a sitios sociales en Wordpress y sin plugins | Kabytes Dice:

    [...] que finalicen con este tutorial el resultado es el siguiente, obviamente voy a excluir la parte del CSS sprite que ya explique [...]

  10. Tutorial básico sobre CSS Sprite | Kabytes | My Web Development Bookmarks Dice:

    [...] Read the original: Tutorial básico sobre CSS Sprite | Kabytes [...]

  11. Herramienta para crear CSS Sprites | Kabytes Dice:

    [...] unos meses les contaba como crear manualmente sus propios CSS Sprites, hoy y buscando otra cosa llego de casualidad al sitio SpriteMe, que como se imaginaran sirve para [...]

  12. Velocidad de carga, un Factor Seo o de Usabilidad? Dice:

    [...] y sobre todo la carga de las imágenes del sitio. Para esto ultimo existe una técnica llamada “CSS sprite” que intenta mediante CSS, mostrar todas la imágenes del sitio en una sola imagen unificada, de [...]

  13. SpriteMe, herramienta para crear CSS Sprite fácilmente | Nosolocodigo Dice:

    [...] práctica que facilita enormemente la tarea de optimización de páginas web mediante la técnica CSS sprite. La herramienta detecta todas las imágenes de fondo asignadas con CSS mediante la propiedad [...]

  14. Reducir el número de peticiones http con CSS Sprites Dice:

    [...] Tutorial básico de CSS Sprites: un tutorial para iniciarse en el uso de esta técnica y empezar a ver sus ventajas, muy sencillo. [...]

  15. Reducir el número de peticiones http con CSS Sprites | Alojate.com Tu Proveedor de Web Hosting, Dominios, VPS, Servidores Dedicados, Factura Electrónica y Marketing para Buscadores en México Dice:

    [...] Tutorial básico de CSS Sprites: un tutorial para iniciarse en el uso de esta técnica y empezar a ver sus ventajas, muy sencillo. [...]

  16. Optimización de la carga de la Web en ASP.NET Dice:

    [...] 1º las pequeñas imágenes que se usan repetidamente en la web deberían estar juntas en un sólo archivo de imagen y mostrarlas usando la técnica de css sprites. He buscado con G y este artículo creo que te puede ayudar a implementarlo sin muchas complicaciones. http://www.kabytes.com/programacion/tutorial-basico-sobre-css-sprite/ [...]

Deja tu comentario

Seguir comentarios por RSS