This fantastic dribble shot by Nick Buturishvili, but built with only CSS (Chrome and Safari approved).
A Pen by Ryan Mulligan on CodePen.
This fantastic dribble shot by Nick Buturishvili, but built with only CSS (Chrome and Safari approved).
A Pen by Ryan Mulligan on CodePen.
| .mouse | |
| p Scroll |
| // Based on the Dribbble shot by Nick Buturishvili. Check it out here: https://dribbble.com/shots/2807757-Micro-animation-for-site-scroll |
| @import url(https://fonts.googleapis.com/css?family=Cabin); | |
| $colorBg: #222a30; | |
| $colorOutline: #ffffff; | |
| $colorOutlineFade: #4e5559; | |
| $widthMouse: 52px; | |
| $heightMouse: 88px; | |
| $borderMouse: 6px; | |
| $posMouse: 8px; | |
| $posText: 2px; | |
| $sizeTrackball: 10px; | |
| $posTrackball: 20px; | |
| $shrinkTrackball: 0.4; | |
| $animDuration: 5s; | |
| @mixin bgGradient { | |
| background: | |
| $colorOutlineFade | |
| linear-gradient( | |
| transparent 0%, | |
| transparent 50%, | |
| $colorOutline 50%, | |
| $colorOutline 100% | |
| ); | |
| } | |
| body { | |
| display: flex; | |
| flex-direction: column; | |
| align-items: center; | |
| justify-content: center; | |
| height: 100vh; | |
| background-color: $colorBg; | |
| } | |
| p { | |
| margin-top: 50px; | |
| font-family: "Cabin", sans-serif; | |
| letter-spacing: 12px; | |
| text-indent: 12px; | |
| color: $colorOutline; | |
| animation: | |
| colorText $animDuration ease-out infinite, | |
| nudgeText $animDuration ease-out infinite; | |
| } | |
| .mouse { | |
| @include bgGradient; | |
| position: relative; | |
| width: $widthMouse; | |
| height: $heightMouse; | |
| background-size: 100% 100%; | |
| border-radius: 100px; | |
| background-size: 225%; | |
| animation: | |
| colorSlide $animDuration linear infinite, | |
| nudgeMouse $animDuration ease-out infinite; | |
| &:before, | |
| &:after { | |
| content: ""; | |
| position: absolute; | |
| top: 0; right: 0; bottom: 0; left: 0; | |
| margin: auto; | |
| } | |
| &:before { | |
| width: $widthMouse - $borderMouse; | |
| height: $heightMouse - $borderMouse; | |
| background-color: $colorBg; | |
| border-radius: 100px; | |
| } | |
| &:after { | |
| background-color: $colorOutline; | |
| width: $sizeTrackball; | |
| height: $sizeTrackball; | |
| border-radius: 100%; | |
| animation: trackBallSlide $animDuration linear infinite; | |
| } | |
| } | |
| @keyframes colorSlide { | |
| 0% { background-position: 0% 100%; } | |
| 20% { background-position: 0% 0%; } | |
| 21% { background-color: $colorOutlineFade; } | |
| 29.99% { | |
| background-color: $colorOutline; | |
| background-position: 0% 0%; | |
| } | |
| 30% { | |
| background-color: $colorOutlineFade; | |
| background-position: 0% 100%; | |
| } | |
| 50% { background-position: 0% 0%; } | |
| 51% { background-color: $colorOutlineFade; } | |
| 59.99% { | |
| background-color: $colorOutline; | |
| background-position: 0% 0%; | |
| } | |
| 60% { | |
| background-color: $colorOutlineFade; | |
| background-position: 0% 100%; | |
| } | |
| 80% { background-position: 0% 0%; } | |
| 81% { background-color: $colorOutlineFade; } | |
| 89.99%, 100% { background-color: $colorOutline; } | |
| } | |
| @keyframes trackBallSlide { | |
| 0% { | |
| opacity: 1; | |
| transform: scale(1) translateY(-$posTrackball); | |
| } | |
| 6% { | |
| opacity: 1; | |
| transform: scale(0.9) translateY($posTrackball/4); | |
| } | |
| 14% { | |
| opacity: 0; | |
| transform: scale($shrinkTrackball) translateY($posTrackball*2); | |
| } | |
| 15%, 19% { | |
| opacity: 0; | |
| transform: scale($shrinkTrackball) translateY(-$posTrackball); | |
| } | |
| 28%, 29.99% { | |
| opacity: 1; | |
| transform: scale(1) translateY(-$posTrackball); | |
| } | |
| 30% { | |
| opacity: 1; | |
| transform: scale(1) translateY(-$posTrackball); | |
| } | |
| 36% { | |
| opacity: 1; | |
| transform: scale(0.9) translateY($posTrackball/4); | |
| } | |
| 44% { | |
| opacity: 0; | |
| transform: scale($shrinkTrackball) translateY($posTrackball*2); | |
| } | |
| 45%, 49% { | |
| opacity: 0; | |
| transform: scale($shrinkTrackball) translateY(-$posTrackball); | |
| } | |
| 58%, 59.99% { | |
| opacity: 1; | |
| transform: scale(1) translateY(-$posTrackball); | |
| } | |
| 60% { | |
| opacity: 1; | |
| transform: scale(1) translateY(-$posTrackball); | |
| } | |
| 66% { | |
| opacity: 1; | |
| transform: scale(0.9) translateY($posTrackball/4); | |
| } | |
| 74% { | |
| opacity: 0; | |
| transform: scale($shrinkTrackball) translateY($posTrackball*2); | |
| } | |
| 75%, 79% { | |
| opacity: 0; | |
| transform: scale($shrinkTrackball) translateY(-$posTrackball); | |
| } | |
| 88%, 100% { | |
| opacity: 1; | |
| transform: scale(1) translateY(-$posTrackball); | |
| } | |
| } | |
| @keyframes nudgeMouse { | |
| 0% { transform: translateY(0); } | |
| 20% { transform: translateY($posMouse); } | |
| 30% { transform: translateY(0); } | |
| 50% { transform: translateY($posMouse); } | |
| 60% { transform: translateY(0); } | |
| 80% { transform: translateY($posMouse); } | |
| 90% { transform: translateY(0); } | |
| } | |
| @keyframes nudgeText { | |
| 0% { transform: translateY(0); } | |
| 20% { transform: translateY($posText); } | |
| 30% { transform: translateY(0); } | |
| 50% { transform: translateY($posText); } | |
| 60% { transform: translateY(0); } | |
| 80% { transform: translateY($posText); } | |
| 90% { transform: translateY(0); } | |
| } | |
| @keyframes colorText { | |
| 21% { color: $colorOutlineFade; } | |
| 30% { color: $colorOutline; } | |
| 51% { color: $colorOutlineFade; } | |
| 60% { color: $colorOutline; } | |
| 81% { color: $colorOutlineFade; } | |
| 90% { color: $colorOutline; } | |
| } |
Is there a way to have the mouse icon be transparent that doesn't include a background color? Thanks in advance for your reply.