Hay un tutorial que por petición me gustaría hacer, pero que últimamente no estoy encontrando tiempo para ello. Se trata de hacer una pequeña clasificación con estrellas, lo típico que veis en miles de web, pero bien hechas. No usaremos imágenes: sólo texto y CSS para el efecto.

También hace falta algo de Javascript para llevar a cabo el envío de los datos, y PHP para recibirlos, pero eso lo voy a dejar para un poco más adelante.

Así que empezaremos por un poquito de HTML básico: un contenedor con 5 links (uno por estrella), con el carácter unicode de la estrella (★). Además, añadiremos un noscript para que los usuarios que no tengan Javascipt:

<div class="ec-stars-wrapper">
	<a href="#" data-value="1" title="Votar con 1 estrellas">&#9733;</a>
	<a href="#" data-value="2" title="Votar con 2 estrellas">&#9733;</a>
	<a href="#" data-value="3" title="Votar con 3 estrellas">&#9733;</a>
	<a href="#" data-value="4" title="Votar con 4 estrellas">&#9733;</a>
	<a href="#" data-value="5" title="Votar con 5 estrellas">&#9733;</a>
</div>
<noscript>Necesitas tener habilitado javascript para poder votar</noscript>

Actualmente quedaría algo así:

El CSS

Ahora viene la parte truculenta, el CSS, que hará el efecto :hover. Brevemente: Símplemente cuando tengan el ratón encima del padre, pondremos las estrellas como activas. Luego utilizamos el selector ~ para seleccionar las de la derecha, y quitárselo.

.ec-stars-wrapper {
	/* Espacio entre los inline-block (los hijos, los `a`) 
	   http://ksesocss.blogspot.com/2012/03/display-inline-block-y-sus-empeno-en.html */
	font-size: 0;
	/* Podríamos quitarlo, 
		pero de esta manera (siempre que no le demos padding), 
		sólo aplicará la regla .ec-stars-wrapper:hover a cuando
		también se esté haciendo hover a alguna estrella */
	display: inline-block;
}
.ec-stars-wrapper a {
	text-decoration: none;
	display: inline-block;
	/* Volver a dar tamaño al texto */
	font-size: 32px;
	font-size: 2rem;
	
	color: #888;
}

.ec-stars-wrapper:hover a {
	color: rgb(39, 130, 228);
}
/*
 * El selector de hijo, es necesario para aumentar la especifidad
 */
.ec-stars-wrapper > a:hover ~ a {
	color: #888;
}

Ahora tendríamos algo como ésto:

Ir más allá

El efecto ahora mismo no es precisamente alucinante, pero puedes hacer ciertas cosas para mejorarlo:

  • Usa text-shadow: Las estrellas son textos, así que puedes jugar con esta propiedad tanto como quieras para crear efectos mejores (ver ejemplo).
  • Gradientes (sólo webkit): Usando -webkit-background-clip: text;, junto con -webkit-text-fill-color: transparent;, podrás aplicar un gradiente a las estrellas (Ver ejemplo)
  • Fuentes con iconos: Así podrás usar la estrella que más te parezca, y además los que tengan navegadores que no soporten ese carácter, verán la estrella en todo su esplendor, y no ese cuadrado molesto de unicode.

14 pensamientos en “Calificación con estrellas sólo con CSS

  1. Bitacoras.com
  2. Imagen de MagoplupMagoplup el dijo:

    Perfecto Emilio este es uno de los más sencillos que he visto y con la facilidad de poder personalizarlo a gusto de cada usuario valla que esta interesante

  3. Imagen de MiguelMiguel el dijo:

    Apreciado Emilio: Quiero agradecerle nuevamente por disponer parte de su tiempo para ofrecerme su apoyo, que estimo de gran valor. Igualmente, quiero darte las Mil GRACIAS por el tutorial que me proporcionó, me ha sido de gran utilidad. Estoy seguro de que también ha sido de interés a muchos lectores de la bitácora. Espero que siga manteniendo la lámpara encendida por mucho tiempo y nos sigas iluminando.

    Un Abrazo, amigo.

  4. Imagen de PedroPedro el dijo:

    Y de alguna manera no es posible, colocar algo como un script en dropbox y alojar el php ahí e insertarlo en blogger como un archivo css, o un js?

  5. Calificación con estrellas para WordPress: EC-Stars-Rating | Emilio Cobos-CMC
  6. Imagen de juanjuan el dijo:

    Hola saludos y donde esta la segunda parte? es mejor que hagas las cosas bien o de lo contrario no hagas nada, internet es a si RÁPIDO Y CONFIABLE

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

Puedes usar las siguientes etiquetas y atributos HTML:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre data-language=""> <ul> <ol> <li>
Para poner código usa <pre data-language="[lenguaje]"><code>[código]</code></pre>, y no olvides escapar el HTMl.