Unlimited Wordpress themes, plugins, graphics & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Web Design
  2. CSS
Webdesign

Cómo construir un gráfico Rosquilla semi-círculo Con CSS

by
Difficulty:BeginnerLength:MediumLanguages:

Spanish (Español) translation by Elías Nicolás (you can also view the original English article)

Aunque HTML5 Canvas y SVG podrían ser soluciones más elegantes para la construcción de gráficos, en este tutorial aprenderemos cómo construir nuestro propio gráfico de rosquilla con nada más que simple CSS.

Para tener una idea de lo que vamos a crear, eche un vistazo a la demostración incorporada de CodePen a continuación:

Formato HTML

Comenzamos con un marcado muy básico; Una lista desordenada simple con un elemento span dentro de cada uno de los elementos de la lista:

Añadir estilos a la Lista

Con el formato listo, primero aplicamos algunos estilos básicos a la lista desordenada:

Luego, vamos a dar a cada uno un pseudo-elemento ::after y a ::before, y los estilamos:

Preste atención a los estilos para el pseudo-elemento ::before. Esto nos da nuestro medio círculo.

pseudo elements
Pseudo elementos

Hasta ahora, las reglas antes mencionadas nos dan este resultado:

Añadir estilos a los elementos de lista

Ahora vamos a discutir el estilo de los elementos de la lista.

Posicionamiento

Con respecto a la posición de los elementos de la lista, hacemos lo siguiente:

  • Colóquelos justo debajo de sus padres y
  • Darles estilos apropiados para crear un semicírculo inverso.

Además, un par de cosas valen la pena destacar aquí:

  • Los elementos de la lista están posicionados de forma absoluta, por lo que podemos establecer su propiedad z-index.
  • Modificamos el valor predeterminado de la propiedad de transform-origin (es decir, transform-origin: 50% 50%) de los elementos de la lista. Específicamente, establecemos transform-origin: 50% 0. De esta manera, cuando animamos (rotamos) los elementos, su esquina superior central se convertirá en el centro de rotación.

Estos son los estilos CSS asociados:

Echa un vistazo a lo que hemos construido hasta ahora en la siguiente visualización:

span y elementos de la lista

En la actualidad, el único elemento de lista que es visible es el verde (que tiene z-index: 4;) los otros están debajo de él.

Animaciones

Antes de cubrir los pasos para animar los elementos de nuestra lista, tomemos nota del porcentaje deseado para cada elemento (es decir, cuánto de la rosquilla cada uno cubrirá). Considere la siguiente tabla:

Lenguaje Porcentaje
CSS 12
HTML 32
PHP 34
Python 22

A continuación, calculamos cuántos grados tenemos para animar (rotar) cada uno de los elementos. Para averiguar el número exacto de grados para cada ítem, multiplicamos su porcentaje por 180° (no 360° porque estamos utilizando un gráfico rosquilla de semicírculo):

Lenguaje Porcentaje
Número de grados
CSS 12 12/100 * 180 = 21.6
HTML 32
32/100 * 180 = 57.6
PHP 34 34/100 * 180 = 61.2
Python 22 22/100 * 180 = 39.6

En este punto estamos listos para configurar las animaciones. En primer lugar, definimos algunos estilos de animación que se comparten entre todos los elementos, añadiendo algunas reglas a .chart-skills li:

A continuación, definimos los estilos únicos de animación:

Tenga en cuenta que agregamos un retraso a todos los elementos, excepto para el primero. De esta manera, creamos buenas animaciones secuenciales. Por ejemplo, cuando la animación del primer elemento termina, aparece el segundo elemento, y así sucesivamente.

El siguiente paso es especificar las animaciones reales:

Antes de seguir adelante, veremos brevemente cómo funcionan las animaciones:

El primer elemento pasa de transform: none a transform: rotate (21.6deg).

El segundo elemento pasa de transform: rotate(21.6deg) (comienza desde la posición final del primer elemento) a transform: rotate(79.2deg) (57.6deg + 21.6deg).

El tercer elemento pasa de transform: rotate(79.2deg) (comienza desde la posición final del segundo elemento) hasta transform: rotate(140.4deg) (61.2deg + 79.2deg).

El cuarto elemento pasa de transform: rotate(140.4deg) (comienza desde la posición final del tercer elemento) hasta transform: rotate(180deg) (140.4deg + 39.6deg).

¡Ocultar!

Por último, pero no menos importante, para ocultar la mitad inferior del gráfico, tenemos que añadir las siguientes reglas:

El valor de propiedad overflow: hidden garantiza que sólo se vea el primer semicírculo (el creado con el pseudo-elemento ::before). Siéntase libre de eliminar esa propiedad si desea probar la posición inicial de los elementos de la lista.

Las propiedades de transform-style: preserve-3d y backface-visibility: hidden evitan efectos parpadeantes que pueden ocurrir en diferentes navegadores debido a animaciones. Si este problema persiste en su navegador, quizás desee probar estas soluciones también.

¡El gráfico está casi listo! Lo único que queda es diseñar las etiquetas del gráfico, lo que haremos en la siguiente sección.

Aquí está la demostración de CodePen que muestra la apariencia actual de nuestro gráfico:

Añadir estilos a las etiquetas

En esta sección, diseñaremos las etiquetas del gráfico.

Posicionamiento

Con respecto a su posición, hacemos lo siguiente:

  • Déles la position: absolute y utilice las propiedades top e left para fijar su posición deseada.
  • Utilice valores negativos para rotarlos. Por supuesto, estos no son valores aleatorios. De hecho, estos se extraen del último frame del elemento de su padre. Por ejemplo, la última frame del segundo elemento de lista incluye transform: rotate(79.2deg), y por lo tanto su etiqueta relacionada tendrá transform: rotate(-79.2deg).

A continuación se muestran los estilos CSS correspondientes:

Animaciones

Ahora que hemos colocado las etiquetas, es hora de animarlas. Dos cosas que vale la pena mencionar aquí:

  • De forma predeterminada, todas las etiquetas estan ocultas y se hacen visibles a medida que se anima su elemento padre.
  • De forma similar a los elementos padres, usamos la propiedad animation-delay para crear animaciones secuenciales. Además, agregamos el valor de la propiedad backface-visibility: hidden para asegurar que no haya efectos de parpadeo debido a las animaciones.

Las reglas CSS que se ocupan de la animación de las etiquetas del gráfico se muestran a continuación:

Aquí está el gráfico final:

Soporte del navegador y problemas

En general, la demostración funciona bien en todos los navegadores. Sólo quiero discutir dos pequeños problemas que están relacionados con la propiedad border-radius.

En primer lugar, si tuviera que dar diferentes colores a nuestros artículos, el gráfico podría ser algo como esto:

Observe por ejemplo las esquinas superior e inferior del tercer elemento. Hay dos líneas rojas que vienen del color del borde del cuarto artículo. Podemos ver esas líneas porque el cuarto elemento tiene un color de borde más oscuro en comparación con el tercero. Aunque esto es un tema pequeño, es bueno estar al tanto de ello para elegir colores apropiados para sus propios gráficos.

En segundo lugar, en Safari el gráfico aparece como se ve abajo:

Mira los pequeños espacios que aparecen en el segundo y tercer elementos. Si sabe algo sobre este tema, háganoslo saber en los comentarios a continuación.

Conclusion

En este tutorial, pasamos por el proceso de crear un gráfico rosquilla de semicírculo con CSS puro. Una vez más, como se mencionó en la introducción, existen soluciones potencialmente más potentes (por ejemplo, HTML5 Canvas y SVG) que existen para crear este tipo de cosas. Sin embargo, si quieres construir algo simple y ligero, y disfrutar de un desafío, ¡CSS es el camino a seguir!

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.