Идея взята у Dan Eden (demo), я лишь немного доработал способ.
Суть
В качестве круга используем обычный блок с рамкой. Рамка может иметь любой цвет и ширину (в этом и уникальность способа, что блок абсолютно независим от фона и прочих вещей). Рамку мы скругляем на 100% и делаем верхнюю её часть прозрачной. В этот самый пробел мы и вставляем треугольник (хак с нулевым размером блока и границей), используя наши любимые псевдо-элементы. Ну и под конец анимируем блок для имитации эффекта загрузки.
Разметка:
<span class="spinner"></span>
CSS:
.spinner {
display: block;
width: 35px;
height: 35px;
margin: 80px 150px;
position: relative;
border: 2px solid rgba(0,0,0,0.5);
border-top-color: transparent;
border-radius: 100%;
-webkit-animation: spin 1s infinite linear;
-moz-animation: spin 1s infinite linear;
-ms-animation: spin 1s infinite linear;
-o-animation: spin 1s infinite linear;
animation: spin 1s infinite linear;
}
.spinner:after {
content: '';
display: block;
width: 0;
height: 0;
position: absolute;
top: -6px;
left: 3px;
border: 6px solid transparent;
border-bottom-color: rgba(0,0,0,0.5);
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-o-transform: rotate(45deg);
transform: rotate(45deg);
}
@-webkit-keyframes spin {
to { -webkit-transform: rotate(360deg); }
}
@-moz-keyframes spin {
to { -moz-transform: rotate(360deg); }
}
@-ms-keyframes spin {
to { -ms-transform: rotate(360deg); }
}
@-o-keyframes spin {
to { -o-transform: rotate(360deg); }
}
@keyframes spin {
to { transform: rotate(360deg); }
}
Способ работает во всех современных браузерах (IE<=9, давай до свидания!)
Автор: CyberAP