swirling circles experiment
css screen saver style animation transform rotate translate
by trentHarlem
HTML
<div class="grid-container">
<div class="canvas grid-item tl">
<div class="circle is-first"></div>
<div class="circle is-second"></div>
<div class="circle is-third"></div>
<div class="circle is-fourth"></div>
<div class="circle is-fifth"></div>
<div class="circle is-sixth"></div>
<div class="circle is-seventh"></div>
<div class="circle is-eighth"></div>
<div class="meetingPoint"></div>
</div>
<div class="canvas grid-item tr">
<div class="circle is-first"></div>
<div class="circle is-second"></div>
<div class="circle is-third"></div>
<div class="circle is-fourth"></div>
<div class="circle is-fifth"></div>
<div class="circle is-sixth"></div>
<div class="circle is-seventh"></div>
<div class="circle is-eighth"></div>
<div class="meetingPoint"></div>
</div>
<div class="center">
<div class="canvas grid-item bl">
<div class="circle is-first"></div>
<div class="circle is-second"></div>
<div class="circle is-third"></div>
<div class="circle is-fourth"></div>
<div class="circle is-fifth"></div>
<div class="circle is-sixth"></div>
<div class="circle is-seventh"></div>
<div class="circle is-eighth"></div>
<div class="meetingPoint"></div>
</div>
</div>
<div class="canvas grid-item br">
<div class="circle is-first"></div>
<div class="circle is-second"></div>
<div class="circle is-third"></div>
<div class="circle is-fourth"></div>
<div class="circle is-fifth"></div>
<div class="circle is-sixth"></div>
<div class="circle is-seventh"></div>
<div class="circle is-eighth"></div>
<div class="meetingPoint"></div>
</div>
<div class="canvas5 grid-item c">
<div class="circle is-first"></div>
<div class="circle is-second"></div>
<div class="circle is-third"></div>
<div class="circle is-fourth"></div>
<div class="circle is-fifth"></div>
<div class="circle is-sixth"></div>
...
CSS
/* credit: https://codepen.io/juan-antonio-ledesma/pen/MWZNvwM */
:root {
--background-color: #1b1b2c;
--main-color: #0ff;
--main-color-2: #00f;
--meeting-point-color: #7fffff;
--canvas-size: 68vmin;
--canvas-max-size: 500px;
--circle-size: 8vmin;
--animation-duration: 30000ms;
--rotate-duration: 9000ms;
--blur-amount: 0.5rem;
}
body {
margin: 0;
/* display: grid; */
/* place-items: center; */
min-height: 100vh;
background-color: var(--background-color);
}
/* .container {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
grid-template-rows: 1fr 1fr 1fr;
grid-template-areas:
"tl none tr"
"none c none"
"bl none br";
} */
.c {
grid-area: c;
}
.canvas {
width: var(--canvas-size);
height: var(--canvas-size);
max-width: var(--canvas-max-size);
max-height: var(--canvas-max-size);
animation: rotate var(--rotate-duration) linear infinite;
filter: blur(var(--blur-amount));
}
.tl {
grid-area: tl;
animation: rotate var(--rotate-duration) linear infinite;
}
.tr {
grid-area: tr;
animation: rotate var(--rotate-duration) ease-in-out infinite both;
}
.bl {
grid-area: bl;
animation: rotate var(--rotate-duration) linear infinite;
}
.br {
grid-area: br;
animation: rotate var(--rotate-duration) linear infinite;
}
/* .canvas3,
.canvas4 {
display: grid;
position: relative;
width: var(--canvas-size);
height: var(--canvas-size);
max-width: var(--canvas-max-size);
max-height: var(--canvas-max-size);
animation: rotate var(--rotate-duration) linear infinite;
filter: blur(var(--blur-amount));
} */
@keyframes rotate {
0% {
transform: rotate(0deg);
filter: blur(var(--blur-amount));
}
50% {
filter: blur(0rem)
}
100% {
transform: rotate(359deg);
filter: blur(var(--blur-amount));
}
}
.circle {
position: absolute;
width: var(--circle-size);
height: var(--circle-size);
background-color: var(--main-color2);
border-radius: 50%;
box-shadow: 0 0...
JavaScript
/* const canvas = document.getElementById('canvas') */
/* const ctx = canvas.getContext("2d") */
/* ctx.globalCompositeOperation = "overlay"; */