JSFiddle - React, Tailwind, and code Playground
HTML
<!--
Loader width: 70
SVG width: 70√2 = 98.994... ≈ 100
-->
<svg width="100" height="100" viewbox="0 0 100 100" clip-path="url(#loaderClipper)">
<use xlink:href="#loader" class="loader" x="15" y="15" />
<polygon class="spinner" points="0,0 100,0 50,50" x="30" y="30" />
</svg>
<svg height="0" width="0">
<defs>
<polygon id="loader" points="0,0 0,70 70,70 70,0 0,0 15,15 55,15 55,55 15,55 15,15" />
<clipPath id="loaderClipper">
<use xlink:href="#loader" x="15" y="15" />
</clipPath>
</defs>
</svg>
CSS
body {
background-image: repeating-linear-gradient(-45deg, #fff, #fff 8px, #eee 8px, #eee 15px);
height: 100vh;
margin: 0;
}
svg {
position: relative;
left: 15px;
top: 15px;
-webkit-animation: rotate 2s linear infinite;
animation: rotate 2s linear infinite;
transform-origin: 50px 50px;
}
.loader {
fill: #dcdada;
}
.spinner {
fill: #5cb85c;
-webkit-animation: rotate 1s linear infinite reverse;
animation: rotate 1s linear infinite reverse;
transform-origin: 50px 50px;
}
@-webkit-keyframes rotate {
0% { -webkit-transform: rotate(0deg); }
100% { -webkit-transform: rotate(360deg); }
}
@keyframes rotate {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}