Los diseños de nuestras páginas suelen acompañar a los textos una pequeña imagen o nuestros menús requieren que los items sean una imagen y que al hacer roll-over una cambie por otra u otras funcionalidades. Al maquetar podemos hacer que cada item tenga una imagen asociada, esto hace que durante unos segundos el hueco del menú quede vacío durante el roll-over, esto ocurre porque las imágenes están separadas en distintas imágenes y cada una significa una carga independiente del resto, esto afecta a que la experiencia de usuario no sea la deseada y que el servidor sufra más llamadas innecesarias.
Para solucionar estos problemas se usan los sprites en css. Los sprites son simplemente imágenes de gran tamaño que contienen imágenes más pequeñas. Este concepto viene de los antiguos videojuegos, donde los personajes se movían gracias a estas imágenes, en la imagen se contenía al personaje en todas sus posiciones, luego, mediante código hacemos que esas imágenes parezcan movimiento. Pongo un ejemplo de como es el sprite con los movimientos de Super Mario 3.
Con este concepto vamos a ver como llevarlo a web. Lo que hacemos es crear una imagen con los distintos iconos que tendrá la web o con cada item del menú y su respectivo roll-over, en el siguiente ejemplo tenemos 4 items de menú el lado derecho corresponde al item en reposo y el lado izquierdo representa a cada item activado:
De esta forma hacemos que el servidor entregue una sóla imagen y nuestro visitante también, lo único que tendremos que hacer es cambiar la posición de fondo de la imagen para que se vea cada item donde debe.
También podemos usar los sprites para todos los iconos o bullets que encontramos en la web. En la página de youtube.com, usan la siguiente imagen que contiene a las imágenes que se usan como iconos o fondos en la web:
En este ejemplo, todos los items que van a usar una de esas imágenes de fondo tienen por css la orden de que su imagen de fondo sea esta. En el ejemplo que os voy a poner queremos que todos los vínculos tengan una imagen de fondo.
CSS:
-
a {
-
background:url(gran-imagen-fondo.gif) no-repeat;
-
padding: 0 0 0 15px;
-
}
Así todos nuestros vínculos van a tener la misma imagen de fondo y un hueco a su izquierda para que la imagen se vea sin que el texto aparezca encima, también dejamos una posición genérica para los vínculos. Ahora vamos a diferenciar entre vínculos.
CSS:
-
a.media {
-
background-position: 0 25px;
-
}
Con esto lo que queremos ahora es que los vínculos que sean de media muestren de la imagen de fondo que les hemos dado la que está a 0px de la izquierda y 25px del top de la imagen. A continuación un ejemplo mejor desarrollado:
Código
HTML:
-
<div id="contenedor_menu">
-
-
<li class="item1"><a href="#">Item 1
</a></li>
-
<li class="item2"><a href="#">Item 2
</a></li>
-
<li class="item3"><a href="#">Item 3
</a></li>
-
<li class="item4"><a href="#">Item 4
</a></li>
-
</ul>
-
</div>
CSS:
-
#contenedor_menu{float:left;width:178px;}
-
ul li{width:178px;height:78px;float:left;}
-
ul li a{
-
background:url("http://morenogil.com/victor/wp-content/ejemplosprite.jpg") no-repeat scroll 0 0 transparent;
-
display: block;
-
float: left;
-
height: 56px;
-
text-indent: -9999px;
-
width: 180px;}
-
ul li.item1 a{background-position:0 0;}
-
ul li.item1 a:hover{background-position:-183px 0;}
-
ul li.item2 a{background-position:0 -58px;}
-
ul li.item2 a:hover{background-position:-183px -58px;}
-
ul li.item3 a{background-position:0 -124px;}
-
ul li.item3 a:hover{background-position:-183px -124px;}
-
ul li.item4 a{background-position:0 -176px;}
-
ul li.item4 a:hover{background-position:-183px -176px;}
En funcionamiento: