Avatares circulares con CSS

Avatares circulares con CSS

  • 2 minutos

Últimamente están muy de moda los avatares circulares. En este artículo voy a hablar sobre algunas de las formas que existen en CSS de conseguir este efecto.

La solución mala

Lo primero que se nos pasa por la cabeza cuando queremos avatares circulares es aplicar un border-radius: 50%. Puede parecer una buena solución, y desde luego es la más compacta, pero esto nos obliga a que las imágenes sean cuadradas, es decir, que tengan el mismo ancho que alto. Si somos nosotros los que gestionamos el diseño, podemos evitarlo haciendo todas las imágenes cuadradas de antemano. Pero, ¿y si permitimos que los usuarios suban sus propios avatares? Podríamos denegar las subidas de todos los avatares que no sean cuadrados, pero eso puede llegar a confundir al usuario. Tenemos que buscar otra solución.

Avatar envuelto en una elipse (en rojo como tendría que quedar)

La solución fea

Una forma de resolver este problema sería con la propiedad background-image de CSS. Para ello crearíamos en nuestro HTML:

<div class="avatar"></div>

Y darle los siguientes estilos:

.avatar {
    border-radius: 50%;
    background-image: url('avatar.png');
    background-position: center;
    background-size: cover;
    height: 64px;
    width: 64px;
}

Aunque esta solución pueda parecer óptima, tiene un inconveniente importante: encerrar una imagen en un div no es semántico, y por tanto no es bueno para el SEO.

Una buena solución

Gracias a los avances de CSS, hoy en día tenemos las propiedades object-fit y object-position, que cumplen la misma función que background-size y background-position pero con el objeto en sí. Esto nos permite usar en el HTML la etiqueta para imágenes, que es la más correcta semánticamente.

<img class="avatar" src="avatar.png">

Mientras que en el CSS es donde residirá la magia:

.avatar {
    border-radius: 50%;
    height: 64px;
    object-fit: cover;
    object-position: center;
    width: 64px;
}

Si vemos el soporte de navegadores gracias a Can I use, podemos comprobar que Firefox, Chrome y Safari tienen soporte completo. Edge también lo soporta si se aplica a imágenes (como es el caso), y si queremos soporte para Opera Mini deberemos añadir el prefijo -o-. Si queréis soportar Internet Explorer entonces no quedará más remedio que utilizar la solución fea.

En un futuro cercano, los usuarios de Internet Explorer acabarán mudándose a un navegador moderno, por lo que esta última solución se convertirá en la más conveniente para todos los casos.

Por supuesto estas propiedades no se limitan a los avatares circulares, y pueden ser usadas en infinidad de situaciones. Por ejemplo, en la entrada de mi blog, las imágenes de los posts tienen unas medidas concretas y para evitar que se deformen utilizo object-fit.