25 CSS Spinners04 / 25
Gradient Conic Sweep Spinner
A conic-gradient disk sweeps through deep violet-to-cyan colours with a transparent cutout tail, creating a smooth colour-wheel spinner with a bright leading-edge tip.
Published
This is a full-page demo — interact inside the frame above, or open it in the playground for the full-screen experience.
The code
<div class="sp-04">
<div class="sp-04__wrap">
<div class="sp-04__spinner">
<div class="sp-04__conic"></div>
<div class="sp-04__hole"></div>
<div class="sp-04__tip"></div>
</div>
</div>
</div><div class="sp-04">
<div class="sp-04__wrap">
<div class="sp-04__spinner">
<div class="sp-04__conic"></div>
<div class="sp-04__hole"></div>
<div class="sp-04__tip"></div>
</div>
</div>
</div>.sp-04,
.sp-04 *,
.sp-04 *::before,
.sp-04 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.sp-04 {
--bg: #050510;
--c1: #00e5ff;
--c2: #1976d2;
--c3: #6200ea;
--hole: #050510;
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
background: var(--bg);
}
.sp-04__wrap {
position: relative;
width: 80px;
height: 80px;
}
.sp-04__spinner {
position: absolute;
inset: 0;
animation: sp-04-spin 1s linear infinite;
}
.sp-04__conic {
width: 100%;
height: 100%;
border-radius: 50%;
/*
Bright cyan tip lands at 360deg (= 0deg = 12 o'clock). Arc fades
BACKWARD (counter-clockwise from the tip): purple → blue → cyan
arriving at the tip. Transparent gap from 0-60deg = clean cutoff
after the tip in the rotation direction. Tail points CCW from
head = correct comet physics for CLOCKWISE rotation (tail trails
behind the direction of motion). Same direction as Demo 09 so
they read consistently.
*/
background: conic-gradient(
transparent 0deg,
transparent 60deg,
var(--c3) 120deg,
var(--c2) 240deg,
var(--c1) 360deg
);
filter: drop-shadow(0 0 6px var(--c1));
}
.sp-04__hole {
position: absolute;
inset: 10px;
border-radius: 50%;
background: var(--hole);
}
/* Tip at 12-o'clock (0deg) = exact bright start of the arc. The
conic disc is 80px and the donut hole is inset:10px so the ring
spans outer-radius 40 → inner-radius 30 → midline at radius 35
(= 5px from the outer top edge). The tip dot's CENTER must land
on that midline, so we offset the 10x10 dot up by half its size
via the translateY(-50%) trick. left:50% + translateX(-50%)
centers it horizontally on the same axis. */
.sp-04__tip {
position: absolute;
top: 5px;
left: 50%;
width: 10px;
height: 10px;
transform: translate(-50%, -50%);
border-radius: 50%;
background: var(--c1);
box-shadow: 0 0 12px var(--c1),0 0 24px var(--c1);
}
@keyframes sp-04-spin {
to {
transform: rotate(360deg);
}
}
@media (prefers-reduced-motion: reduce) {
.sp-04__spinner {
animation: none;
}
}.sp-04,
.sp-04 *,
.sp-04 *::before,
.sp-04 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.sp-04 {
--bg: #050510;
--c1: #00e5ff;
--c2: #1976d2;
--c3: #6200ea;
--hole: #050510;
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
background: var(--bg);
}
.sp-04__wrap {
position: relative;
width: 80px;
height: 80px;
}
.sp-04__spinner {
position: absolute;
inset: 0;
animation: sp-04-spin 1s linear infinite;
}
.sp-04__conic {
width: 100%;
height: 100%;
border-radius: 50%;
/*
Bright cyan tip lands at 360deg (= 0deg = 12 o'clock). Arc fades
BACKWARD (counter-clockwise from the tip): purple → blue → cyan
arriving at the tip. Transparent gap from 0-60deg = clean cutoff
after the tip in the rotation direction. Tail points CCW from
head = correct comet physics for CLOCKWISE rotation (tail trails
behind the direction of motion). Same direction as Demo 09 so
they read consistently.
*/
background: conic-gradient(
transparent 0deg,
transparent 60deg,
var(--c3) 120deg,
var(--c2) 240deg,
var(--c1) 360deg
);
filter: drop-shadow(0 0 6px var(--c1));
}
.sp-04__hole {
position: absolute;
inset: 10px;
border-radius: 50%;
background: var(--hole);
}
/* Tip at 12-o'clock (0deg) = exact bright start of the arc. The
conic disc is 80px and the donut hole is inset:10px so the ring
spans outer-radius 40 → inner-radius 30 → midline at radius 35
(= 5px from the outer top edge). The tip dot's CENTER must land
on that midline, so we offset the 10x10 dot up by half its size
via the translateY(-50%) trick. left:50% + translateX(-50%)
centers it horizontally on the same axis. */
.sp-04__tip {
position: absolute;
top: 5px;
left: 50%;
width: 10px;
height: 10px;
transform: translate(-50%, -50%);
border-radius: 50%;
background: var(--c1);
box-shadow: 0 0 12px var(--c1),0 0 24px var(--c1);
}
@keyframes sp-04-spin {
to {
transform: rotate(360deg);
}
}
@media (prefers-reduced-motion: reduce) {
.sp-04__spinner {
animation: none;
}
}Here's a working CSS Spinner from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Gradient Conic Sweep Spinner
Source: https://codefronts.com/motion/css-spinner-designs/gradient-conic-sweep-spinner/
A conic-gradient disk sweeps through deep violet-to-cyan colours with a transparent cutout tail, creating a smooth colour-wheel spinner with a bright leading-edge tip.
## HTML
```html
<div class="sp-04">
<div class="sp-04__wrap">
<div class="sp-04__spinner">
<div class="sp-04__conic"></div>
<div class="sp-04__hole"></div>
<div class="sp-04__tip"></div>
</div>
</div>
</div>
```
## CSS
```css
.sp-04,
.sp-04 *,
.sp-04 *::before,
.sp-04 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.sp-04 {
--bg: #050510;
--c1: #00e5ff;
--c2: #1976d2;
--c3: #6200ea;
--hole: #050510;
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
background: var(--bg);
}
.sp-04__wrap {
position: relative;
width: 80px;
height: 80px;
}
.sp-04__spinner {
position: absolute;
inset: 0;
animation: sp-04-spin 1s linear infinite;
}
.sp-04__conic {
width: 100%;
height: 100%;
border-radius: 50%;
/*
Bright cyan tip lands at 360deg (= 0deg = 12 o'clock). Arc fades
BACKWARD (counter-clockwise from the tip): purple → blue → cyan
arriving at the tip. Transparent gap from 0-60deg = clean cutoff
after the tip in the rotation direction. Tail points CCW from
head = correct comet physics for CLOCKWISE rotation (tail trails
behind the direction of motion). Same direction as Demo 09 so
they read consistently.
*/
background: conic-gradient(
transparent 0deg,
transparent 60deg,
var(--c3) 120deg,
var(--c2) 240deg,
var(--c1) 360deg
);
filter: drop-shadow(0 0 6px var(--c1));
}
.sp-04__hole {
position: absolute;
inset: 10px;
border-radius: 50%;
background: var(--hole);
}
/* Tip at 12-o'clock (0deg) = exact bright start of the arc. The
conic disc is 80px and the donut hole is inset:10px so the ring
spans outer-radius 40 → inner-radius 30 → midline at radius 35
(= 5px from the outer top edge). The tip dot's CENTER must land
on that midline, so we offset the 10x10 dot up by half its size
via the translateY(-50%) trick. left:50% + translateX(-50%)
centers it horizontally on the same axis. */
.sp-04__tip {
position: absolute;
top: 5px;
left: 50%;
width: 10px;
height: 10px;
transform: translate(-50%, -50%);
border-radius: 50%;
background: var(--c1);
box-shadow: 0 0 12px var(--c1),0 0 24px var(--c1);
}
@keyframes sp-04-spin {
to {
transform: rotate(360deg);
}
}
@media (prefers-reduced-motion: reduce) {
.sp-04__spinner {
animation: none;
}
}
```Here's a working CSS Spinner from CodeFronts. Use it as-is or adapt to your framework. All classes are scoped under a unique prefix so the code won't collide with your existing styles. MIT licensed.
Demo: Gradient Conic Sweep Spinner
Source: https://codefronts.com/motion/css-spinner-designs/gradient-conic-sweep-spinner/
A conic-gradient disk sweeps through deep violet-to-cyan colours with a transparent cutout tail, creating a smooth colour-wheel spinner with a bright leading-edge tip.
## HTML
```html
<div class="sp-04">
<div class="sp-04__wrap">
<div class="sp-04__spinner">
<div class="sp-04__conic"></div>
<div class="sp-04__hole"></div>
<div class="sp-04__tip"></div>
</div>
</div>
</div>
```
## CSS
```css
.sp-04,
.sp-04 *,
.sp-04 *::before,
.sp-04 *::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.sp-04 {
--bg: #050510;
--c1: #00e5ff;
--c2: #1976d2;
--c3: #6200ea;
--hole: #050510;
display: flex;
align-items: center;
justify-content: center;
min-height: 100vh;
background: var(--bg);
}
.sp-04__wrap {
position: relative;
width: 80px;
height: 80px;
}
.sp-04__spinner {
position: absolute;
inset: 0;
animation: sp-04-spin 1s linear infinite;
}
.sp-04__conic {
width: 100%;
height: 100%;
border-radius: 50%;
/*
Bright cyan tip lands at 360deg (= 0deg = 12 o'clock). Arc fades
BACKWARD (counter-clockwise from the tip): purple → blue → cyan
arriving at the tip. Transparent gap from 0-60deg = clean cutoff
after the tip in the rotation direction. Tail points CCW from
head = correct comet physics for CLOCKWISE rotation (tail trails
behind the direction of motion). Same direction as Demo 09 so
they read consistently.
*/
background: conic-gradient(
transparent 0deg,
transparent 60deg,
var(--c3) 120deg,
var(--c2) 240deg,
var(--c1) 360deg
);
filter: drop-shadow(0 0 6px var(--c1));
}
.sp-04__hole {
position: absolute;
inset: 10px;
border-radius: 50%;
background: var(--hole);
}
/* Tip at 12-o'clock (0deg) = exact bright start of the arc. The
conic disc is 80px and the donut hole is inset:10px so the ring
spans outer-radius 40 → inner-radius 30 → midline at radius 35
(= 5px from the outer top edge). The tip dot's CENTER must land
on that midline, so we offset the 10x10 dot up by half its size
via the translateY(-50%) trick. left:50% + translateX(-50%)
centers it horizontally on the same axis. */
.sp-04__tip {
position: absolute;
top: 5px;
left: 50%;
width: 10px;
height: 10px;
transform: translate(-50%, -50%);
border-radius: 50%;
background: var(--c1);
box-shadow: 0 0 12px var(--c1),0 0 24px var(--c1);
}
@keyframes sp-04-spin {
to {
transform: rotate(360deg);
}
}
@media (prefers-reduced-motion: reduce) {
.sp-04__spinner {
animation: none;
}
}
```How this works
The spinner disc is a single border-radius:50% element styled with conic-gradient — three colour stops from deep purple through royal blue to cyan, followed by a transparent zone from 300° to 360° to create the open tail. Rotating this element with sp-04-spin at 1s linear infinite makes the gradient appear to sweep.
A centred child div with the same background colour as the page creates the hollow-ring illusion (pseudo-donut). The bright white-cyan tip dot sits at top:5px;left:50% and shares the same keyframe, so it always orbits exactly at the leading edge of the colour arc.
Make it yours
- Widen the tail by changing the transparent zone from
300degto260deg— shorter arc, longer invisible gap. - Edit the three gradient stops to any brand hue sequence; the sweep effect works with any conic-gradient range.
- Add a second, slower counter-rotating conic spinner at 50% opacity behind the first for a woven-light effect.
- Change
--holeto a semi-transparent colour and the spinner becomes a solid disc with a gradient fade instead of a ring. - Increase the tip dot size to
14pxand addfilter:blur(2px)for a softer leading comet head.
Gotchas — read before shipping
conic-gradientrequires Chrome 69+, Safari 12.1+, Firefox 83+ — always provide a plain border-based spinner as fallback for environments that block modern CSS.- The "donut hole" uses a child element matching the page background — this breaks over images or gradients; use
mask-image:radial-gradient(transparent 48%,black 49%)instead for composable contexts. - The tip dot's
top:5px;left:50%offset is sized for the default 80px container; recalculate if you change the wrapper size.
Browser support
| Chrome | Safari | Firefox | Edge |
|---|---|---|---|
| 69+ | 12.1+ | 83+ | 69+ |
conic-gradient support required; older browsers need a fallback border-based spinner.