JSFiddle - React, Tailwind, and code Playground
HTML
<div class="pie" data-percent="78">
<div class="left">
<span></span>
</div>
<div class="right">
<span></span>
</div>
</div>
<div class="pie" data-percent="36">
<div class="left">
<span></span>
</div>
<div class="right">
<span></span>
</div>
</div>
<div class="pie" data-percent="24">
<div class="left">
<span></span>
</div>
<div class="right">
<span></span>
</div>
</div>
<div class="pie" data-percent="64">
<div class="left">
<span></span>
</div>
<div class="right">
<span></span>
</div>
</div>
CSS
.pie {
background-color: #dae7f7;
border-radius: 50%;
width: 200px;
height: 200px;
overflow: hidden;
position: relative;
float: left;
margin: 20px;
}
.pie > div {
float: left;
width: 50%;
height: 100%;
position: relative;
overflow: hidden;
}
.pie span {
background-color: #77aaf4;
display: block;
width: 100%;
height: 100%;
}
.pie .left span {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
-webkit-transform-origin: 100% 50%;
}
.pie .right span {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
-webkit-transform-origin: 0% 50%;
}
.pie:before,
.pie:after {
border-radius: 50%;
display: block;
position: absolute;
top: 50%;
left: 50%;
-webkit-transform: translateX(-50%) translateY(-50%);
}
.pie:before {
background-color: #fff;
content: "";
width: 75%;
height: 75%;
z-index: 100;
}
.pie:after {
content: attr(data-percent) "%";
font-family: Arial, sans-serif;
font-size: 2em;
font-weight: bold;
z-index: 200;
text-align: center;
}
JavaScript
$(function() {
$(".pie").each(function() {
var percent = $(this).data("percent"),
$left = $(this).find(".left span"),
$right = $(this).find(".right span"),
deg;
if(percent<=50) {
// Hide left
$left.hide();
// Adjust right
deg = 180 - (percent/100*360)
$right.css({
"-webkit-transform": "rotateZ(-"+deg+"deg)"
});
} else {
// Adjust left
deg = 180 - ((percent-50)/100*360)
$left.css({
"-webkit-transform": "rotateZ(-"+deg+"deg)"
});
}
});
});