CSS radial progress indicator - The Basics

by Annie Lagang

HTML

<script src="//cdnjs.cloudflare.com/ajax/libs/less.js/1.6.1/less.min.js"></script>
<div class="radial-progress">
	<div class="circle">
		<div class="fill"></div>
	</div>
</div>

CSS

body {
	margin: 50px;
}
.radial-progress {
	@circle-size: 120px;
	@circle-background: #d6dadc;
	@circle-color: #97a71d;
	@transition-length: 1s;

	width:  @circle-size;
	height: @circle-size;

	background-color: @circle-background;
	.circle .fill {
		width:    @circle-size;
		height:   @circle-size;
		position: absolute;

		transition: -webkit-transform @transition-length;
		transition: -ms-transform @transition-length;
		transition: transform @transition-length;
		-webkit-backface-visibility: hidden;

		clip: rect(0px, @circle-size/2, @circle-size, 0px);
		background-color: @circle-color;
	}
}

JavaScript

$('head style[type="text/css"]').attr('type', 'text/less');
less.refreshStyles();
var transform_styles = ['-webkit-transform', '-ms-transform', 'transform'];
window.randomize = function() {
	var rotation = Math.floor(Math.random() * 360);
	for(i in transform_styles) {
		$('.circle .fill').css(transform_styles[i], 'rotate(' + rotation + 'deg)');
	}
}
setTimeout(window.randomize, 200);
$('.radial-progress').click(window.randomize);

// Read more here: https://medium.com/@andsens/radial-progress-indicator-using-css-a917b80c43f9