- let data = [
-   { val: 65, col: '#f2d786', txt: 'html' }, 
-   { val: 70, col: '#ff9784', txt: 'css' }, 
-   { val: 25, col: '#c09491', txt: 'js' }
- ];
- let n = data.length;

h3 skills
ul(style=`--n: ${n}`)
  - for(let i = 0; i < n; i++)
    - let c = data[i]
    li(style=`--i: ${i}; --v: ${c.val}; background: ${c.col}`) #{c.txt}
View Compiled
$d: 7em;
$r:.5*$d;
$t: 1s;

@property --v {
  syntax: '<integer>';
  initial-value: 0;
  inherits: false
}

* { margin: 0; padding: 0; list-style: none; font: inherit }

body, h3, ul { display: grid }

body {
  box-sizing: border-box;
  place-content: end start;
  overflow: hidden;
  padding: $r;
  min-height: 100vh;
  background: #262626;
  font: 1.25em/ 1.5 ubuntu, rebuchet ms, sans-serif
}

h3, ul, li { grid-area: 1/ 1 }

h3 {
  place-content: center;
  overflow: hidden;
  z-index: 1;
  width: $d; height: $d;
  border-radius: 50%;
  box-shadow: inset 0 0 0 .75em rgba(#323232, .5);
  background: darkslategrey;
  color: gainsboro;
  text-transform: capitalize;
  animation: 
    disc $t cubic-bezier(.35, 1.65, .65, 1) $t both, 
    text $t ease-out 2*$t both
}

@keyframes disc {
  0% { transform: scale(0) }
  90% { transform: scale(.9) }
}

@keyframes text {
  0% {
    color: transparent;
    text-indent: -$d
  }
}

ul {
  --m: calc(.5*(var(--n) - 1));
  place-self: center;
  width: 0;
}

li {
  --o0: calc((30 + var(--v))*1%);
  --o1: calc(var(--o0) - .5em);
  padding-left: calc(#{$r} + .5em);
  width: 25em;
  transform-origin: 0;
  transform: rotate(calc((var(--i) - var(--m))*20deg));
  text-transform: uppercase;
  clip-path: 
    polygon(0 0, 0 100%, 
            var(--o1) 100%, var(--o0) 50%, var(--o1) 0);
  counter-reset: v var(--v);
  animation: 
    arrw 2*$t ease-in-out 3*$t both, 
    text $t ease-out 5*$t both, 
    v calc(var(--v)*.02s) linear 6*$t both;
  
  &::after { content: ' ' counter(v) '%' }
}

@keyframes arrw {
  0% { transform: rotate(-90deg) rotatey(90deg) }
  50% { transform: rotate(-90deg) }
}

@keyframes v { 0% { --v: 0 } }
View Compiled
// no JS
// demo uses Houdini, so it's fully functional in Chromium only
View Compiled

External CSS

  1. https://codepen.io/thebabydino/pen/evPbxv.scss

External JavaScript

  1. https://codepen.io/thebabydino/pen/evPbxv.js