Inspired by https://dribbble.com/shots/2028561-Meta
A Pen by Paweł Kuna on CodePen.
Inspired by https://dribbble.com/shots/2028561-Meta
A Pen by Paweł Kuna on CodePen.
| <div class="dots"> | |
| <div class="dot"></div> | |
| <div class="dot"></div> | |
| <div class="dot"></div> | |
| <div class="dot"></div> | |
| <div class="dot"></div> | |
| </div> | |
| <svg version="1.1" xmlns="http://www.w3.org/2000/svg"> | |
| <defs> | |
| <filter id="goo"> | |
| <feGaussianBlur in="SourceGraphic" result="blur" stdDeviation="12" /> | |
| <feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -7" result="goo" /> | |
| <!--<feBlend in2="goo" in="SourceGraphic" result="mix" />--> | |
| </filter> | |
| </defs> | |
| </svg> |
| /** | |
| CSS Only! | |
| */ |
| $dot-color: #79C3CD; | |
| $dot-size: 35px; | |
| $circle-size: 70px; | |
| $animation-time: 4s; | |
| $color-yellow: #FBD301; | |
| $color-red: #FF3270; | |
| $color-blue: #208BF1; | |
| $color-green: #AFE102; | |
| $colors: ($color-red, $color-blue, $color-green, $color-yellow); | |
| body { | |
| background: #ffffff; | |
| } | |
| .dots { | |
| width: 0; | |
| height: 0; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| bottom: 0; | |
| right: 0; | |
| margin: auto; | |
| outline: 1px solid red; | |
| filter: url(#goo); | |
| } | |
| .dot { | |
| width: 0; | |
| height: 0; | |
| position: absolute; | |
| left: 0; | |
| top: 0; | |
| &:before { | |
| content: ''; | |
| width: $dot-size; | |
| height: $dot-size; | |
| border-radius: 50px; | |
| background: $color-yellow; | |
| position: absolute; | |
| left: 50%; | |
| transform: translateY(0); | |
| margin-left: -($dot-size/2); | |
| margin-top: -($dot-size/2); | |
| } | |
| @keyframes dot-move { | |
| 0% { | |
| transform: translateY(0); | |
| } | |
| 18%, 22% { | |
| transform: translateY(-($circle-size)); | |
| } | |
| 40%, 100% { | |
| transform: translateY(0); | |
| } | |
| } | |
| @keyframes dot-colors { | |
| @for $i from 0 to 4 { | |
| #{$i*25%} { | |
| background-color: nth($colors, ($i+3)%4+1); | |
| } | |
| } | |
| 100% { | |
| background-color: nth($colors, 4); | |
| } | |
| } | |
| &:nth-child(5):before { | |
| z-index: 100; | |
| width: $dot-size * 1.3; | |
| height: $dot-size * 1.3; | |
| margin-left: -($dot-size * .65); | |
| margin-top: -($dot-size * .65); | |
| animation: dot-colors $animation-time ease infinite; | |
| } | |
| @for $i from 0 to 4 { | |
| @keyframes dot-rotate-#{$i + 1} { | |
| 0% { | |
| transform: rotate(#{($i+1)*270deg - 375deg}); | |
| } | |
| 100% { | |
| transform: rotate(#{($i+1)*270deg + 0deg}); | |
| } | |
| } | |
| &:nth-child(#{$i + 1}) { | |
| animation: dot-rotate-#{$i + 1} $animation-time #{$i * $animation-time / 4} linear infinite; | |
| &:before { | |
| background-color: nth($colors, $i+1); | |
| animation: dot-move $animation-time #{$i * $animation-time/4} ease infinite; | |
| } | |
| } | |
| } | |
| } |