@import "variables.less"; @-webkit-keyframes rotating { from{ -webkit-transform: rotate(0deg); } to{ -webkit-transform: rotate(360deg); } } .radial-progress { &.radial-spinner { -webkit-animation: rotating 2.4s linear infinite; } @circle-size: 140px; @circle-background: #F2F2F2; @inset-size: 136px; @inset-color: white; @transition-length: 1s; // @percentage-color: #3FD899; @percentage-font-size: 24px; @percentage-text-width: 57px; margin: 0 auto; width: @circle-size; height: @circle-size; background-color: @circle-background; border-radius: 100%; .circle { .mask, .fill, .shadow { width: @circle-size; height: @circle-size; position: absolute; border-radius: 100%; } .mask, .fill { -webkit-backface-visibility: hidden; transition: -webkit-transform @transition-length; transition: -ms-transform @transition-length; transition: transform @transition-length; border-radius: 100%; } .mask { clip: rect(0px, @circle-size, @circle-size, @circle-size/2.0); .fill { clip: rect(0px, @circle-size/2.0, @circle-size, 0px); background-color: @brand-action; } } } .inset { width: @inset-size; height: @inset-size; position: absolute; margin-left: (@circle-size - @inset-size) / 2.0; margin-top: (@circle-size - @inset-size) / 2.0; background-color: @inset-color; border-radius: 100%; .percentage { width: @percentage-text-width; position: absolute; top: (@inset-size - @percentage-font-size) / 2.0; left: (@inset-size - @percentage-text-width) / 2.0; line-height: 1; text-align: center; color: @brand-primary; font-weight: 500; font-size: @percentage-font-size; } } &.radial-negative .circle .mask .fill { background-color: @brand-negative; } &.radial-positive .circle .mask .fill { background-color: @brand-positive; } @i: 0; @increment: 180deg / 100; .loop (@i) when (@i <= 100) { &[data-progress="@{i}"] { .circle { .mask.full, .fill { -webkit-transform: rotate(@increment * @i); -ms-transform: rotate(@increment * @i); transform: rotate(@increment * @i); } .fill.fix { -webkit-transform: rotate(@increment * @i * 2); -ms-transform: rotate(@increment * @i * 2); transform: rotate(@increment * @i * 2); } } .inset .percentage:before { content: "@{i}%" } } .loop(@i + 1); } .loop(@i); }