<div class="chart_pie_wrap">
<svg class="chart_pie" width="180" height="180">
<!-- chart -->
<circle class="pie_circle pie_circle1" cx="90" cy="90" r="65"></circle>
<circle class="pie_circle pie_circle2" cx="90" cy="90" r="65"></circle>
<circle class="pie_circle pie_circle3" cx="90" cy="90" r="65"></circle>
<circle class="pie_circle pie_circle4" cx="90" cy="90" r="65"></circle>
<!-- chart bg circle -->
<circle class="pie_circle pie_bg" cx="90" cy="90" r="65"></circle>
<!-- // chart -->
</svg>
</div>
<ul class="chart_cate">
<li class="chart_item1">item1 <span></span>%</li>
<li class="chart_item2">item2 <span></span>%</li>
<li class="chart_item3">item3 <span></span>%</li>
<li class="chart_item4">item4 <span></span>%</li>
</ul>
.chart_pie_wrap {
width: 180px;
height: 180px;
transform: scaleX(-1);
transform-origin: center;
margin: 50px auto 32px;
.chart_pie {
transform: rotate(-90deg);
transform-origin: center;
}
.pie_circle {
transform-origin: center;
fill: none;
stroke-width: 50;
&.pie_bg {
stroke: #f3f4f5;
stroke-width: 51;
stroke-dasharray: (2 * 3.1415926536 * 65);
stroke-dashoffset: 0;
animation: chartLoad 1s forwards;
transform: scaleX(-1) rotate(-180deg);
}
&.pie_circle1 {
stroke: #7734e2;
transform: rotate(0deg);
}
&.pie_circle2 {
stroke: #2474e2;
}
&.pie_circle3 {
stroke: #17e3d4;
}
&.pie_circle4 {
stroke: #ff7e1f;
}
}
}
.chart_cate {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
gap: 8px 9px;
max-width: 241px;
margin: 0 auto 32px;
li {
width: calc((100% - 9px) / 2);
&:before {
content: '';
display: inline-block;
width: 12px;
height: 12px;
margin-bottom: -1px;
margin-right: 9px;
}
}
.chart_item1 {
&:before {
background-color: #7734e2;
}
}
.chart_item2 {
&:before {
background-color: #2474e2;
}
}
.chart_item3 {
&:before {
background-color: #17e3d4;
}
}
.chart_item4 {
&:before {
background-color: #ff7e1f;
}
}
}
@keyframes chartLoad {
100% {
stroke-dashoffset: 2 * 3.1415926536 * 65;
}
}
View Compiled
const chartData = [50, 20, 25, 5]; // 차트 데이터
const pieR = 65, // R값
formula = (2 * 3.1415926536 * pieR);
let rotateFormula = 0;
const chartTextAll = document.querySelectorAll('.chart_cate li')
chartData.forEach((el, i) => {
idx = i + 1;
document.querySelector(`.pie_circle.pie_circle${idx}`).setAttribute('stroke-dashoffset', formula - (formula * (chartData[i]/100)));
document.querySelector(`.pie_circle.pie_circle${idx}`).setAttribute('stroke-dasharray', formula);
if (i !== 0) rotateFormula += chartData[i - 1];
document.querySelector(`.pie_circle.pie_circle${idx}`).style.transform = `rotate(${3.6 * rotateFormula}deg)`;
chartTextAll[i].querySelector('span').innerText = chartData[i];
});
This Pen doesn't use any external CSS resources.
This Pen doesn't use any external JavaScript resources.