lotsa dots... CSS only 🙇
A Pen by Riley Shaw on CodePen.
| .container | |
| - for i in 1..3 | |
| .shaker | |
| ul.group | |
| - for j in 1..14 | |
| li.line |
lotsa dots... CSS only 🙇
A Pen by Riley Shaw on CodePen.
| $size: 360px | |
| $ratio: 0.8660254038 // sqrt(3)/2 | |
| $spacing: $size / 10 / $ratio | |
| $offset: $ratio * 10px / 2 | |
| $period: 2s | |
| $jitter: 4px | |
| body | |
| background: #000 | |
| ul | |
| margin: 0 | |
| padding: 0 | |
| list-style: none | |
| .container | |
| position: absolute | |
| top: 50% | |
| left: 50% | |
| height: $size | |
| width: $size | |
| transform: translate3d(-50%, -50%, 0) | |
| border-radius: $size * 10 / 57 | |
| overflow: hidden | |
| background: #fff | |
| animation: glow $period alternate infinite linear | |
| .shaker | |
| height: 100% | |
| width: 100% | |
| position: absolute | |
| animation: jitter $period alternate infinite | |
| &:nth-child(2) | |
| .group | |
| transform: rotate(60deg) translate3d(.5 /* cos(60deg) */ * $spacing * -1, 0.8660254038 /* sin(60deg) */ * $spacing * -2, 0) | |
| .line | |
| animation-delay: -$period / 3 | |
| &:nth-child(3) | |
| .group | |
| transform: rotate(120deg) translate3d(-0.5 /*cos(120deg)*/ * $spacing * 0.5, 0.86602540378 /* sin(120deg) */ * $spacing * -2.5, 0) | |
| .line | |
| animation-delay: -$period * 2 / 3 | |
| .group | |
| height: 100% | |
| width: 100% | |
| .line | |
| position: relative | |
| right: $spacing * 2 | |
| height: $spacing * $ratio | |
| width: 140% | |
| background-image: radial-gradient(#000 10%, transparent 35%) | |
| background-size: $spacing $spacing | |
| background-position: $offset -1px -$spacing | |
| animation: slide $period infinite ease-in-out | |
| &:nth-child(even) | |
| right: $spacing * 3 / 2 | |
| animation-name: slide-reverse | |
| @keyframes slide | |
| 0% | |
| opacity: 0 | |
| background-position: $offset - 1px -$spacing | |
| 1% | |
| opacity: 1 | |
| 16.67% | |
| background-position: $offset - $spacing -$spacing | |
| 33.33% | |
| opacity: 1 | |
| 35.33% | |
| opacity: 0 | |
| 100% | |
| opacity: 0 | |
| background-position: $offset - $spacing -$spacing | |
| // Bummer. Since I wanted to make this fade-in-out, using | |
| // animation-direction: reverse was a non-starter. Ah well. | |
| @keyframes slide-reverse | |
| 0% | |
| opacity: 0 | |
| background-position: $offset - $spacing -$spacing | |
| 1% | |
| opacity: 1 | |
| 16.67% | |
| background-position: $offset -$spacing | |
| 33.33% | |
| opacity: 1 | |
| 35.33% | |
| opacity: 0 | |
| 100% | |
| opacity: 0 | |
| background-position: $offset -$spacing | |
| @keyframes jitter | |
| @for $i from 0 through 10 | |
| $x: (2 - random(3)) * $jitter | |
| $y: (2 - random(3)) * $jitter | |
| #{$i * 10%} | |
| transform: translate3d($x, $y, 0) | |
| @keyframes glow | |
| from | |
| box-shadow: 0 0 50px rgba(255, 255, 255, 0.7) | |
| to | |
| box-shadow: 0 0 100px rgba(255, 255, 255, 0.2) |