Skip to content

Instantly share code, notes, and snippets.

@nfreear
Last active November 13, 2021 17:26
Show Gist options
  • Select an option

  • Save nfreear/ae83b11a7572cd3122a181bb6ebb7fff to your computer and use it in GitHub Desktop.

Select an option

Save nfreear/ae83b11a7572cd3122a181bb6ebb7fff to your computer and use it in GitHub Desktop.
Pure CSS Spinner
<!doctype html> <title> Pure CSS spinner </title>
<style>
/*
https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/hsl()
https://developer.mozilla.org/en-US/docs/Web/CSS/color_value#fully_saturated_colors
https://colordesigner.io/convert/hextohsl
https://una.im/css-color-theming/
*/
:root {
--spinner-duration: 1.5s;
--X-spinner-color: #44f; /* hsl(240, 100%, 63%) */ /* teal hsl(180, 100, 25) */
--spinner-hue: 240deg;
--spinner-lightness: 63%;
--spinner-darken: 30%;
--spinner-size: 40vh; /* Was: 12rem; */
}
body {
margin: 1rem auto;
max-width: 33rem;
}
@keyframes SpinnerY {
0% { transform: rotateY(0deg); }
100% { transform: rotateY(180deg); }
}
@keyframes SpinnerX {
0% { transform: rotateX(0deg); }
100% { transform: rotateX(180deg); }
}
/* Was: 'SpinnerZ' */
@keyframes Rotate {
0% { transform: rotateZ(0deg); }
/* 12.5%{ transform: rotateZ(45deg); }
...
87.5%{ transform: rotateZ(315deg); } */
100% { transform: rotateZ(360deg); }
}
@keyframes AntiClockwise {
0% { transform: rotate(360deg); }
/* 50% { transform: rotate(180deg); } */
100% { transform: rotate(0deg); }
}
.css-spinner {
X-border: 2.5vh solid var(--spinner-color);
border-color: hsl(var(--spinner-hue), 100%, var(--spinner-lightness));
border-style: solid;
border-width: 2.5vh;
border-radius: 50%;
margin: 2rem auto;
height: var(--spinner-size);
width: var(--spinner-size);
animation-direction: normal;
animation-duration: var(--spinner-duration);
animation-iteration-count: infinite;
animation-timing-function: linear; /* << +1 ! */
animation-play-state: running;
}
.css-spinner.pause {
animation-play-state: paused;
}
.css-spinner.y {
animation-name: SpinnerY;
}
.css-spinner.x {
animation-name: SpinnerX;
/* transform: rotateZ(90deg); */
}
/* .css-spinner.y45 {
animation-name: SpinnerY;
transform: rotateZ(45deg);
} */
.css-spinner.z,
.css-spinner.rotate {
animation-name: Rotate;
background-color: #eef;
border-bottom-color: hsl(var(--spinner-hue), 100%, calc(var(--spinner-lightness) - var(--spinner-darken)));
X-border-bottom-color: #006;
border-style: outset;
}
.css-spinner.z.anti,
.css-spinner.rotate.anti {
animation-name: AntiClockwise;
border-left-color: hsl(var(--spinner-hue), 100%, calc(var(--spinner-lightness) - var(--spinner-darken)));
}
</style>
<h1> Pure CSS spinner </h1>
<div class="css-spinner z XX_anti" aria-label="Loading" title="Loading"></div>
<div class="css-spinner y" aria-label="Loading" title="Loading"></div>
<pre>&copy; 2021-10-26 Nick Freear. </pre>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment