A set of CSS loading animations created with three dots which made by just single element. https://github.com/nzbin/three-dots
Created
November 28, 2024 22:11
-
-
Save MFathurrohmanMauludin/94585e3aaa2375b72f6bd0e128fe51ac to your computer and use it in GitHub Desktop.
Three Dots - CSS loading animations made with single element
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <style> | |
| html, | |
| body { | |
| height: 100%; | |
| background: #f6f7fd; | |
| font-size: 16px; | |
| } | |
| .heading { | |
| margin: 36px 0; | |
| padding: 24px 32px; | |
| background: rgba(255, 255, 255, 0.4); | |
| border: 1px solid rgba(0, 32, 128, 0.12); | |
| border-radius: 16px; | |
| font-size: 18px; | |
| } | |
| .snippet { | |
| position: relative; | |
| background: #fff; | |
| padding: 32px 5%; | |
| margin: 24px 0; | |
| box-shadow: 0 4px 12px -2px rgba(0, 32, 128, .1), 0 0 0 1px rgba(60, 80, 120, 0.1); | |
| border-radius: 16px; | |
| } | |
| .snippet::before { | |
| display: inline-block; | |
| position: absolute; | |
| top: 6px; | |
| left: 6px; | |
| padding: 0 8px; | |
| content: attr(data-title); | |
| font-size: 12px; | |
| font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; | |
| color: white; | |
| background-color: rgb(255, 25, 100); | |
| border-radius: 10px; | |
| line-height: 20px; | |
| } | |
| .snippet:hover { | |
| cursor: pointer; | |
| outline: 2px solid rgb(255, 25, 100); | |
| } | |
| .stage { | |
| display: flex; | |
| justify-content: center; | |
| align-items: center; | |
| position: relative; | |
| padding: 32px 0; | |
| margin: 0 -5%; | |
| overflow: hidden; | |
| } | |
| .filter-contrast { | |
| filter: contrast(5); | |
| background-color: white; | |
| } | |
| .footer { | |
| margin: 120px 0 20px; | |
| text-align: center; | |
| overflow: auto; | |
| } | |
| .tooltip::after { | |
| position: absolute; | |
| top: 100%; | |
| left: 50%; | |
| margin-top: 8px; | |
| padding: 6px 8px; | |
| border-radius: 4px; | |
| font-size: 12px; | |
| line-height: 1; | |
| color: white; | |
| background-color: rgba(97, 97, 97, .9); | |
| transform: translateX(-50%); | |
| content: attr(aria-label); | |
| pointer-events: none; | |
| } | |
| </style> | |
| <main> | |
| <div class="container"> | |
| <div class="heading"> | |
| 🔮 <a href="https://github.com/nzbin/three-dots" target="_blank" title="three-dots"> | |
| Three Dots</a> is a set of CSS loading animations made with just single element. | |
| </div> | |
| <div class="row examples"> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-elastic"> | |
| <div class="stage"> | |
| <div class="dot-elastic"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-pulse"> | |
| <div class="stage"> | |
| <div class="dot-pulse"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-flashing"> | |
| <div class="stage"> | |
| <div class="dot-flashing"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-collision"> | |
| <div class="stage"> | |
| <div class="dot-collision"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-revolution"> | |
| <div class="stage"> | |
| <div class="dot-revolution"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-carousel"> | |
| <div class="stage"> | |
| <div class="dot-carousel"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-typing"> | |
| <div class="stage"> | |
| <div class="dot-typing"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-windmill"> | |
| <div class="stage"> | |
| <div class="dot-windmill"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-bricks"> | |
| <div class="stage"> | |
| <div class="dot-bricks"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-floating"> | |
| <div class="stage"> | |
| <div class="dot-floating"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-fire"> | |
| <div class="stage"> | |
| <div class="dot-fire"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-spin"> | |
| <div class="stage"> | |
| <div class="dot-spin"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-falling"> | |
| <div class="stage"> | |
| <div class="dot-falling"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-stretching"> | |
| <div class="stage"> | |
| <div class="dot-stretching"></div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="heading"> | |
| ⚗️ Experiment: The experimental loading animations require some special conditions. | |
| </div> | |
| <div class="row examples"> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-gathering"> | |
| <div class="stage filter-contrast"> | |
| <div class="dot-gathering"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-hourglass"> | |
| <div class="stage filter-contrast"> | |
| <div class="dot-hourglass"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-overtaking"> | |
| <div class="stage filter-contrast"> | |
| <div class="dot-overtaking"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-shuttle"> | |
| <div class="stage filter-contrast"> | |
| <div class="dot-shuttle"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-bouncing"> | |
| <div class="stage"> | |
| <div class="dot-bouncing"></div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="col-3"> | |
| <div class="snippet" data-title="dot-rolling"> | |
| <div class="stage"> | |
| <div class="dot-rolling"></div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </main> | |
| <footer class="footer text-center"> | |
| <p> | |
| Created with ❤️ by <a href="https://github.com/nzbin" target="_blank">nzbin</a>. | |
| Made with <a href="https://github.com/nzbin/snack" target="_blank">snack</a>. | |
| </p> | |
| </footer> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const snippets = document.querySelectorAll('.snippet'); | |
| for (let i = 0; i < snippets.length; i++) { | |
| snippets[i].addEventListener('mouseleave', clearTooltip); | |
| snippets[i].addEventListener('blur', clearTooltip); | |
| } | |
| function showTooltip(el, msg) { | |
| el.setAttribute('class', 'snippet tooltip'); | |
| el.setAttribute('aria-label', msg); | |
| } | |
| function clearTooltip(e) { | |
| e.currentTarget.setAttribute('class', 'snippet'); | |
| e.currentTarget.removeAttribute('aria-label'); | |
| } | |
| const clipboardSnippets = new ClipboardJS('.snippet', { | |
| text: trigger => trigger.getAttribute('data-title') | |
| }); | |
| clipboardSnippets.on('success', e => { | |
| e.clearSelection(); | |
| showTooltip(e.trigger, 'Copied!'); | |
| }); | |
| clipboardSnippets.on('error', e => { | |
| showTooltip(e.trigger, 'Copy failed!'); | |
| }); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.11/clipboard.min.js"></script> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /*! | |
| * three-dots - v0.3.2 | |
| * CSS loading animations made with single element | |
| * https://nzbin.github.io/three-dots/ | |
| * | |
| * Copyright (c) 2018 nzbin | |
| * Released under MIT License | |
| */ | |
| @charset "UTF-8"; | |
| /** | |
| * ============================================== | |
| * Dot Elastic | |
| * ============================================== | |
| */ | |
| .dot-elastic { | |
| position: relative; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| animation: dot-elastic 1s infinite linear; | |
| } | |
| .dot-elastic::before, .dot-elastic::after { | |
| content: ""; | |
| display: inline-block; | |
| position: absolute; | |
| top: 0; | |
| } | |
| .dot-elastic::before { | |
| left: -15px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| animation: dot-elastic-before 1s infinite linear; | |
| } | |
| .dot-elastic::after { | |
| left: 15px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| animation: dot-elastic-after 1s infinite linear; | |
| } | |
| @keyframes dot-elastic-before { | |
| 0% { | |
| transform: scale(1, 1); | |
| } | |
| 25% { | |
| transform: scale(1, 1.5); | |
| } | |
| 50% { | |
| transform: scale(1, 0.67); | |
| } | |
| 75% { | |
| transform: scale(1, 1); | |
| } | |
| 100% { | |
| transform: scale(1, 1); | |
| } | |
| } | |
| @keyframes dot-elastic { | |
| 0% { | |
| transform: scale(1, 1); | |
| } | |
| 25% { | |
| transform: scale(1, 1); | |
| } | |
| 50% { | |
| transform: scale(1, 1.5); | |
| } | |
| 75% { | |
| transform: scale(1, 1); | |
| } | |
| 100% { | |
| transform: scale(1, 1); | |
| } | |
| } | |
| @keyframes dot-elastic-after { | |
| 0% { | |
| transform: scale(1, 1); | |
| } | |
| 25% { | |
| transform: scale(1, 1); | |
| } | |
| 50% { | |
| transform: scale(1, 0.67); | |
| } | |
| 75% { | |
| transform: scale(1, 1.5); | |
| } | |
| 100% { | |
| transform: scale(1, 1); | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Dot Pulse | |
| * ============================================== | |
| */ | |
| .dot-pulse { | |
| position: relative; | |
| left: -9999px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| box-shadow: 9999px 0 0 -5px; | |
| animation: dot-pulse 1.5s infinite linear; | |
| animation-delay: 0.25s; | |
| } | |
| .dot-pulse::before, .dot-pulse::after { | |
| content: ""; | |
| display: inline-block; | |
| position: absolute; | |
| top: 0; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| } | |
| .dot-pulse::before { | |
| box-shadow: 9984px 0 0 -5px; | |
| animation: dot-pulse-before 1.5s infinite linear; | |
| animation-delay: 0s; | |
| } | |
| .dot-pulse::after { | |
| box-shadow: 10014px 0 0 -5px; | |
| animation: dot-pulse-after 1.5s infinite linear; | |
| animation-delay: 0.5s; | |
| } | |
| @keyframes dot-pulse-before { | |
| 0% { | |
| box-shadow: 9984px 0 0 -5px; | |
| } | |
| 30% { | |
| box-shadow: 9984px 0 0 2px; | |
| } | |
| 60%, 100% { | |
| box-shadow: 9984px 0 0 -5px; | |
| } | |
| } | |
| @keyframes dot-pulse { | |
| 0% { | |
| box-shadow: 9999px 0 0 -5px; | |
| } | |
| 30% { | |
| box-shadow: 9999px 0 0 2px; | |
| } | |
| 60%, 100% { | |
| box-shadow: 9999px 0 0 -5px; | |
| } | |
| } | |
| @keyframes dot-pulse-after { | |
| 0% { | |
| box-shadow: 10014px 0 0 -5px; | |
| } | |
| 30% { | |
| box-shadow: 10014px 0 0 2px; | |
| } | |
| 60%, 100% { | |
| box-shadow: 10014px 0 0 -5px; | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Dot Flashing | |
| * ============================================== | |
| */ | |
| .dot-flashing { | |
| position: relative; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| animation: dot-flashing 1s infinite linear alternate; | |
| animation-delay: 0.5s; | |
| } | |
| .dot-flashing::before, .dot-flashing::after { | |
| content: ""; | |
| display: inline-block; | |
| position: absolute; | |
| top: 0; | |
| } | |
| .dot-flashing::before { | |
| left: -15px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| animation: dot-flashing 1s infinite alternate; | |
| animation-delay: 0s; | |
| } | |
| .dot-flashing::after { | |
| left: 15px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| animation: dot-flashing 1s infinite alternate; | |
| animation-delay: 1s; | |
| } | |
| @keyframes dot-flashing { | |
| 0% { | |
| background-color: #9880ff; | |
| } | |
| 50%, 100% { | |
| background-color: rgba(152, 128, 255, 0.2); | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Dot Collision | |
| * ============================================== | |
| */ | |
| .dot-collision { | |
| position: relative; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| } | |
| .dot-collision::before, .dot-collision::after { | |
| content: ""; | |
| display: inline-block; | |
| position: absolute; | |
| top: 0; | |
| } | |
| .dot-collision::before { | |
| left: -10px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| animation: dot-collision-before 2s infinite ease-in; | |
| } | |
| .dot-collision::after { | |
| left: 10px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| animation: dot-collision-after 2s infinite ease-in; | |
| animation-delay: 1s; | |
| } | |
| @keyframes dot-collision-before { | |
| 0%, 50%, 75%, 100% { | |
| transform: translateX(0); | |
| } | |
| 25% { | |
| transform: translateX(-15px); | |
| } | |
| } | |
| @keyframes dot-collision-after { | |
| 0%, 50%, 75%, 100% { | |
| transform: translateX(0); | |
| } | |
| 25% { | |
| transform: translateX(15px); | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Dot Revolution | |
| * ============================================== | |
| */ | |
| .dot-revolution { | |
| position: relative; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| } | |
| .dot-revolution::before, .dot-revolution::after { | |
| content: ""; | |
| display: inline-block; | |
| position: absolute; | |
| } | |
| .dot-revolution::before { | |
| left: 0; | |
| top: -15px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| transform-origin: 5px 20px; | |
| animation: dot-revolution 1.4s linear infinite; | |
| } | |
| .dot-revolution::after { | |
| left: 0; | |
| top: -30px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| transform-origin: 5px 35px; | |
| animation: dot-revolution 1s linear infinite; | |
| } | |
| @keyframes dot-revolution { | |
| 0% { | |
| transform: rotateZ(0deg) translate3d(0, 0, 0); | |
| } | |
| 100% { | |
| transform: rotateZ(360deg) translate3d(0, 0, 0); | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Dot Carousel | |
| * ============================================== | |
| */ | |
| .dot-carousel { | |
| position: relative; | |
| left: -9999px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| box-shadow: 9984px 0 0 0 #9880ff, 9999px 0 0 0 #9880ff, 10014px 0 0 0 #9880ff; | |
| animation: dot-carousel 1.5s infinite linear; | |
| } | |
| @keyframes dot-carousel { | |
| 0% { | |
| box-shadow: 9984px 0 0 -1px #9880ff, 9999px 0 0 1px #9880ff, 10014px 0 0 -1px #9880ff; | |
| } | |
| 50% { | |
| box-shadow: 10014px 0 0 -1px #9880ff, 9984px 0 0 -1px #9880ff, 9999px 0 0 1px #9880ff; | |
| } | |
| 100% { | |
| box-shadow: 9999px 0 0 1px #9880ff, 10014px 0 0 -1px #9880ff, 9984px 0 0 -1px #9880ff; | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Dot Typing | |
| * ============================================== | |
| */ | |
| .dot-typing { | |
| position: relative; | |
| left: -9999px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| box-shadow: 9984px 0 0 0 #9880ff, 9999px 0 0 0 #9880ff, 10014px 0 0 0 #9880ff; | |
| animation: dot-typing 1.5s infinite linear; | |
| } | |
| @keyframes dot-typing { | |
| 0% { | |
| box-shadow: 9984px 0 0 0 #9880ff, 9999px 0 0 0 #9880ff, 10014px 0 0 0 #9880ff; | |
| } | |
| 16.667% { | |
| box-shadow: 9984px -10px 0 0 #9880ff, 9999px 0 0 0 #9880ff, 10014px 0 0 0 #9880ff; | |
| } | |
| 33.333% { | |
| box-shadow: 9984px 0 0 0 #9880ff, 9999px 0 0 0 #9880ff, 10014px 0 0 0 #9880ff; | |
| } | |
| 50% { | |
| box-shadow: 9984px 0 0 0 #9880ff, 9999px -10px 0 0 #9880ff, 10014px 0 0 0 #9880ff; | |
| } | |
| 66.667% { | |
| box-shadow: 9984px 0 0 0 #9880ff, 9999px 0 0 0 #9880ff, 10014px 0 0 0 #9880ff; | |
| } | |
| 83.333% { | |
| box-shadow: 9984px 0 0 0 #9880ff, 9999px 0 0 0 #9880ff, 10014px -10px 0 0 #9880ff; | |
| } | |
| 100% { | |
| box-shadow: 9984px 0 0 0 #9880ff, 9999px 0 0 0 #9880ff, 10014px 0 0 0 #9880ff; | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Dot Windmill | |
| * ============================================== | |
| */ | |
| .dot-windmill { | |
| position: relative; | |
| top: -10px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| transform-origin: 5px 15px; | |
| animation: dot-windmill 2s infinite linear; | |
| } | |
| .dot-windmill::before, .dot-windmill::after { | |
| content: ""; | |
| display: inline-block; | |
| position: absolute; | |
| } | |
| .dot-windmill::before { | |
| left: -8.66254px; | |
| top: 15px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| } | |
| .dot-windmill::after { | |
| left: 8.66254px; | |
| top: 15px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| } | |
| @keyframes dot-windmill { | |
| 0% { | |
| transform: rotateZ(0deg) translate3d(0, 0, 0); | |
| } | |
| 100% { | |
| transform: rotateZ(720deg) translate3d(0, 0, 0); | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Dot Bricks | |
| * ============================================== | |
| */ | |
| .dot-bricks { | |
| position: relative; | |
| top: 8px; | |
| left: -9999px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| box-shadow: 9991px -16px 0 0 #9880ff, 9991px 0 0 0 #9880ff, 10007px 0 0 0 #9880ff; | |
| animation: dot-bricks 2s infinite ease; | |
| } | |
| @keyframes dot-bricks { | |
| 0% { | |
| box-shadow: 9991px -16px 0 0 #9880ff, 9991px 0 0 0 #9880ff, 10007px 0 0 0 #9880ff; | |
| } | |
| 8.333% { | |
| box-shadow: 10007px -16px 0 0 #9880ff, 9991px 0 0 0 #9880ff, 10007px 0 0 0 #9880ff; | |
| } | |
| 16.667% { | |
| box-shadow: 10007px -16px 0 0 #9880ff, 9991px -16px 0 0 #9880ff, 10007px 0 0 0 #9880ff; | |
| } | |
| 25% { | |
| box-shadow: 10007px -16px 0 0 #9880ff, 9991px -16px 0 0 #9880ff, 9991px 0 0 0 #9880ff; | |
| } | |
| 33.333% { | |
| box-shadow: 10007px 0 0 0 #9880ff, 9991px -16px 0 0 #9880ff, 9991px 0 0 0 #9880ff; | |
| } | |
| 41.667% { | |
| box-shadow: 10007px 0 0 0 #9880ff, 10007px -16px 0 0 #9880ff, 9991px 0 0 0 #9880ff; | |
| } | |
| 50% { | |
| box-shadow: 10007px 0 0 0 #9880ff, 10007px -16px 0 0 #9880ff, 9991px -16px 0 0 #9880ff; | |
| } | |
| 58.333% { | |
| box-shadow: 9991px 0 0 0 #9880ff, 10007px -16px 0 0 #9880ff, 9991px -16px 0 0 #9880ff; | |
| } | |
| 66.666% { | |
| box-shadow: 9991px 0 0 0 #9880ff, 10007px 0 0 0 #9880ff, 9991px -16px 0 0 #9880ff; | |
| } | |
| 75% { | |
| box-shadow: 9991px 0 0 0 #9880ff, 10007px 0 0 0 #9880ff, 10007px -16px 0 0 #9880ff; | |
| } | |
| 83.333% { | |
| box-shadow: 9991px -16px 0 0 #9880ff, 10007px 0 0 0 #9880ff, 10007px -16px 0 0 #9880ff; | |
| } | |
| 91.667% { | |
| box-shadow: 9991px -16px 0 0 #9880ff, 9991px 0 0 0 #9880ff, 10007px -16px 0 0 #9880ff; | |
| } | |
| 100% { | |
| box-shadow: 9991px -16px 0 0 #9880ff, 9991px 0 0 0 #9880ff, 10007px 0 0 0 #9880ff; | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Dot Floating | |
| * ============================================== | |
| */ | |
| .dot-floating { | |
| position: relative; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| animation: dot-floating 3s infinite cubic-bezier(0.15, 0.6, 0.9, 0.1); | |
| } | |
| .dot-floating::before, .dot-floating::after { | |
| content: ""; | |
| display: inline-block; | |
| position: absolute; | |
| top: 0; | |
| } | |
| .dot-floating::before { | |
| left: -12px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| animation: dot-floating-before 3s infinite ease-in-out; | |
| } | |
| .dot-floating::after { | |
| left: -24px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| animation: dot-floating-after 3s infinite cubic-bezier(0.4, 0, 1, 1); | |
| } | |
| @keyframes dot-floating { | |
| 0% { | |
| left: calc(-50% - 5px); | |
| } | |
| 75% { | |
| left: calc(50% + 105px); | |
| } | |
| 100% { | |
| left: calc(50% + 105px); | |
| } | |
| } | |
| @keyframes dot-floating-before { | |
| 0% { | |
| left: -50px; | |
| } | |
| 50% { | |
| left: -12px; | |
| } | |
| 75% { | |
| left: -50px; | |
| } | |
| 100% { | |
| left: -50px; | |
| } | |
| } | |
| @keyframes dot-floating-after { | |
| 0% { | |
| left: -100px; | |
| } | |
| 50% { | |
| left: -24px; | |
| } | |
| 75% { | |
| left: -100px; | |
| } | |
| 100% { | |
| left: -100px; | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Dot Fire | |
| * ============================================== | |
| */ | |
| .dot-fire { | |
| position: relative; | |
| left: -9999px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| box-shadow: 9999px 22.5px 0 -5px #9880ff; | |
| animation: dot-fire 1.5s infinite linear; | |
| animation-delay: -0.85s; | |
| } | |
| .dot-fire::before, .dot-fire::after { | |
| content: ""; | |
| display: inline-block; | |
| position: absolute; | |
| top: 0; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| } | |
| .dot-fire::before { | |
| box-shadow: 9999px 22.5px 0 -5px #9880ff; | |
| animation: dot-fire 1.5s infinite linear; | |
| animation-delay: -1.85s; | |
| } | |
| .dot-fire::after { | |
| box-shadow: 9999px 22.5px 0 -5px #9880ff; | |
| animation: dot-fire 1.5s infinite linear; | |
| animation-delay: -2.85s; | |
| } | |
| @keyframes dot-fire { | |
| 1% { | |
| box-shadow: 9999px 22.5px 0 -5px #9880ff; | |
| } | |
| 50% { | |
| box-shadow: 9999px -5.625px 0 2px #9880ff; | |
| } | |
| 100% { | |
| box-shadow: 9999px -22.5px 0 -5px #9880ff; | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Dot Spin | |
| * ============================================== | |
| */ | |
| .dot-spin { | |
| position: relative; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: transparent; | |
| color: transparent; | |
| box-shadow: 0 -18px 0 0 #9880ff, 12.727926px -12.727926px 0 0 #9880ff, 18px 0 0 0 #9880ff, 12.727926px 12.727926px 0 0 rgba(152, 128, 255, 0), 0 18px 0 0 rgba(152, 128, 255, 0), -12.727926px 12.727926px 0 0 rgba(152, 128, 255, 0), -18px 0 0 0 rgba(152, 128, 255, 0), -12.727926px -12.727926px 0 0 rgba(152, 128, 255, 0); | |
| animation: dot-spin 1.5s infinite linear; | |
| } | |
| @keyframes dot-spin { | |
| 0%, 100% { | |
| box-shadow: 0 -18px 0 0 #9880ff, 12.727926px -12.727926px 0 0 #9880ff, 18px 0 0 0 #9880ff, 12.727926px 12.727926px 0 -5px rgba(152, 128, 255, 0), 0 18px 0 -5px rgba(152, 128, 255, 0), -12.727926px 12.727926px 0 -5px rgba(152, 128, 255, 0), -18px 0 0 -5px rgba(152, 128, 255, 0), -12.727926px -12.727926px 0 -5px rgba(152, 128, 255, 0); | |
| } | |
| 12.5% { | |
| box-shadow: 0 -18px 0 -5px rgba(152, 128, 255, 0), 12.727926px -12.727926px 0 0 #9880ff, 18px 0 0 0 #9880ff, 12.727926px 12.727926px 0 0 #9880ff, 0 18px 0 -5px rgba(152, 128, 255, 0), -12.727926px 12.727926px 0 -5px rgba(152, 128, 255, 0), -18px 0 0 -5px rgba(152, 128, 255, 0), -12.727926px -12.727926px 0 -5px rgba(152, 128, 255, 0); | |
| } | |
| 25% { | |
| box-shadow: 0 -18px 0 -5px rgba(152, 128, 255, 0), 12.727926px -12.727926px 0 -5px rgba(152, 128, 255, 0), 18px 0 0 0 #9880ff, 12.727926px 12.727926px 0 0 #9880ff, 0 18px 0 0 #9880ff, -12.727926px 12.727926px 0 -5px rgba(152, 128, 255, 0), -18px 0 0 -5px rgba(152, 128, 255, 0), -12.727926px -12.727926px 0 -5px rgba(152, 128, 255, 0); | |
| } | |
| 37.5% { | |
| box-shadow: 0 -18px 0 -5px rgba(152, 128, 255, 0), 12.727926px -12.727926px 0 -5px rgba(152, 128, 255, 0), 18px 0 0 -5px rgba(152, 128, 255, 0), 12.727926px 12.727926px 0 0 #9880ff, 0 18px 0 0 #9880ff, -12.727926px 12.727926px 0 0 #9880ff, -18px 0 0 -5px rgba(152, 128, 255, 0), -12.727926px -12.727926px 0 -5px rgba(152, 128, 255, 0); | |
| } | |
| 50% { | |
| box-shadow: 0 -18px 0 -5px rgba(152, 128, 255, 0), 12.727926px -12.727926px 0 -5px rgba(152, 128, 255, 0), 18px 0 0 -5px rgba(152, 128, 255, 0), 12.727926px 12.727926px 0 -5px rgba(152, 128, 255, 0), 0 18px 0 0 #9880ff, -12.727926px 12.727926px 0 0 #9880ff, -18px 0 0 0 #9880ff, -12.727926px -12.727926px 0 -5px rgba(152, 128, 255, 0); | |
| } | |
| 62.5% { | |
| box-shadow: 0 -18px 0 -5px rgba(152, 128, 255, 0), 12.727926px -12.727926px 0 -5px rgba(152, 128, 255, 0), 18px 0 0 -5px rgba(152, 128, 255, 0), 12.727926px 12.727926px 0 -5px rgba(152, 128, 255, 0), 0 18px 0 -5px rgba(152, 128, 255, 0), -12.727926px 12.727926px 0 0 #9880ff, -18px 0 0 0 #9880ff, -12.727926px -12.727926px 0 0 #9880ff; | |
| } | |
| 75% { | |
| box-shadow: 0 -18px 0 0 #9880ff, 12.727926px -12.727926px 0 -5px rgba(152, 128, 255, 0), 18px 0 0 -5px rgba(152, 128, 255, 0), 12.727926px 12.727926px 0 -5px rgba(152, 128, 255, 0), 0 18px 0 -5px rgba(152, 128, 255, 0), -12.727926px 12.727926px 0 -5px rgba(152, 128, 255, 0), -18px 0 0 0 #9880ff, -12.727926px -12.727926px 0 0 #9880ff; | |
| } | |
| 87.5% { | |
| box-shadow: 0 -18px 0 0 #9880ff, 12.727926px -12.727926px 0 0 #9880ff, 18px 0 0 -5px rgba(152, 128, 255, 0), 12.727926px 12.727926px 0 -5px rgba(152, 128, 255, 0), 0 18px 0 -5px rgba(152, 128, 255, 0), -12.727926px 12.727926px 0 -5px rgba(152, 128, 255, 0), -18px 0 0 -5px rgba(152, 128, 255, 0), -12.727926px -12.727926px 0 0 #9880ff; | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Dot Falling | |
| * ============================================== | |
| */ | |
| .dot-falling { | |
| position: relative; | |
| left: -9999px; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| box-shadow: 9999px 0 0 0 #9880ff; | |
| animation: dot-falling 1s infinite linear; | |
| animation-delay: 0.1s; | |
| } | |
| .dot-falling::before, .dot-falling::after { | |
| content: ""; | |
| display: inline-block; | |
| position: absolute; | |
| top: 0; | |
| } | |
| .dot-falling::before { | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| animation: dot-falling-before 1s infinite linear; | |
| animation-delay: 0s; | |
| } | |
| .dot-falling::after { | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| animation: dot-falling-after 1s infinite linear; | |
| animation-delay: 0.2s; | |
| } | |
| @keyframes dot-falling { | |
| 0% { | |
| box-shadow: 9999px -15px 0 0 rgba(152, 128, 255, 0); | |
| } | |
| 25%, 50%, 75% { | |
| box-shadow: 9999px 0 0 0 #9880ff; | |
| } | |
| 100% { | |
| box-shadow: 9999px 15px 0 0 rgba(152, 128, 255, 0); | |
| } | |
| } | |
| @keyframes dot-falling-before { | |
| 0% { | |
| box-shadow: 9984px -15px 0 0 rgba(152, 128, 255, 0); | |
| } | |
| 25%, 50%, 75% { | |
| box-shadow: 9984px 0 0 0 #9880ff; | |
| } | |
| 100% { | |
| box-shadow: 9984px 15px 0 0 rgba(152, 128, 255, 0); | |
| } | |
| } | |
| @keyframes dot-falling-after { | |
| 0% { | |
| box-shadow: 10014px -15px 0 0 rgba(152, 128, 255, 0); | |
| } | |
| 25%, 50%, 75% { | |
| box-shadow: 10014px 0 0 0 #9880ff; | |
| } | |
| 100% { | |
| box-shadow: 10014px 15px 0 0 rgba(152, 128, 255, 0); | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Dot Stretching | |
| * ============================================== | |
| */ | |
| .dot-stretching { | |
| position: relative; | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| transform: scale(1.25, 1.25); | |
| animation: dot-stretching 2s infinite ease-in; | |
| } | |
| .dot-stretching::before, .dot-stretching::after { | |
| content: ""; | |
| display: inline-block; | |
| position: absolute; | |
| top: 0; | |
| } | |
| .dot-stretching::before { | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| animation: dot-stretching-before 2s infinite ease-in; | |
| } | |
| .dot-stretching::after { | |
| width: 10px; | |
| height: 10px; | |
| border-radius: 5px; | |
| background-color: #9880ff; | |
| color: #9880ff; | |
| animation: dot-stretching-after 2s infinite ease-in; | |
| } | |
| @keyframes dot-stretching { | |
| 0% { | |
| transform: scale(1.25, 1.25); | |
| } | |
| 50%, 60% { | |
| transform: scale(0.8, 0.8); | |
| } | |
| 100% { | |
| transform: scale(1.25, 1.25); | |
| } | |
| } | |
| @keyframes dot-stretching-before { | |
| 0% { | |
| transform: translate(0) scale(0.7, 0.7); | |
| } | |
| 50%, 60% { | |
| transform: translate(-20px) scale(1, 1); | |
| } | |
| 100% { | |
| transform: translate(0) scale(0.7, 0.7); | |
| } | |
| } | |
| @keyframes dot-stretching-after { | |
| 0% { | |
| transform: translate(0) scale(0.7, 0.7); | |
| } | |
| 50%, 60% { | |
| transform: translate(20px) scale(1, 1); | |
| } | |
| 100% { | |
| transform: translate(0) scale(0.7, 0.7); | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Experimental: Gooey Effect | |
| * Dot Gathering | |
| * ============================================== | |
| */ | |
| .dot-gathering { | |
| position: relative; | |
| width: 12px; | |
| height: 12px; | |
| border-radius: 6px; | |
| background-color: hsl(0deg, 100%, 0%); | |
| color: transparent; | |
| margin: -1px 0; | |
| filter: blur(2px); | |
| } | |
| .dot-gathering::before, .dot-gathering::after { | |
| content: ""; | |
| display: inline-block; | |
| position: absolute; | |
| top: 0; | |
| left: -50px; | |
| width: 12px; | |
| height: 12px; | |
| border-radius: 6px; | |
| background-color: hsl(0deg, 100%, 0%); | |
| color: transparent; | |
| opacity: 0; | |
| filter: blur(2px); | |
| animation: dot-gathering 2s infinite ease-in; | |
| } | |
| .dot-gathering::after { | |
| animation-delay: 0.5s; | |
| } | |
| @keyframes dot-gathering { | |
| 0% { | |
| opacity: 0; | |
| transform: translateX(0); | |
| } | |
| 35%, 60% { | |
| opacity: 1; | |
| transform: translateX(50px); | |
| } | |
| 100% { | |
| opacity: 0; | |
| transform: translateX(100px); | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Experimental: Gooey Effect | |
| * Dot Hourglass | |
| * ============================================== | |
| */ | |
| .dot-hourglass { | |
| position: relative; | |
| top: -15px; | |
| width: 12px; | |
| height: 12px; | |
| border-radius: 6px; | |
| background-color: hsl(0deg, 100%, 0%); | |
| color: transparent; | |
| margin: -1px 0; | |
| filter: blur(2px); | |
| transform-origin: 5px 20px; | |
| animation: dot-hourglass 2.4s infinite ease-in-out; | |
| animation-delay: 0.6s; | |
| } | |
| .dot-hourglass::before, .dot-hourglass::after { | |
| content: ""; | |
| display: inline-block; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: 12px; | |
| height: 12px; | |
| border-radius: 6px; | |
| background-color: hsl(0deg, 100%, 0%); | |
| color: transparent; | |
| filter: blur(2px); | |
| } | |
| .dot-hourglass::before { | |
| top: 30px; | |
| } | |
| .dot-hourglass::after { | |
| animation: dot-hourglass-after 2.4s infinite cubic-bezier(0.65, 0.05, 0.36, 1); | |
| } | |
| @keyframes dot-hourglass { | |
| 0% { | |
| transform: rotateZ(0deg); | |
| } | |
| 25% { | |
| transform: rotateZ(180deg); | |
| } | |
| 50% { | |
| transform: rotateZ(180deg); | |
| } | |
| 75% { | |
| transform: rotateZ(360deg); | |
| } | |
| 100% { | |
| transform: rotateZ(360deg); | |
| } | |
| } | |
| @keyframes dot-hourglass-after { | |
| 0% { | |
| transform: translateY(0); | |
| } | |
| 25% { | |
| transform: translateY(30px); | |
| } | |
| 50% { | |
| transform: translateY(30px); | |
| } | |
| 75% { | |
| transform: translateY(0); | |
| } | |
| 100% { | |
| transform: translateY(0); | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Experimental: Gooey Effect | |
| * Dot Overtaking | |
| * ============================================== | |
| */ | |
| .dot-overtaking { | |
| position: relative; | |
| width: 12px; | |
| height: 12px; | |
| border-radius: 6px; | |
| background-color: transparent; | |
| color: hsl(0deg, 100%, 0%); | |
| margin: -1px 0; | |
| box-shadow: 0 -20px 0 0; | |
| filter: blur(2px); | |
| animation: dot-overtaking 2s infinite cubic-bezier(0.2, 0.6, 0.8, 0.2); | |
| } | |
| .dot-overtaking::before, .dot-overtaking::after { | |
| content: ""; | |
| display: inline-block; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: 12px; | |
| height: 12px; | |
| border-radius: 6px; | |
| background-color: transparent; | |
| color: hsl(0deg, 100%, 0%); | |
| box-shadow: 0 -20px 0 0; | |
| filter: blur(2px); | |
| } | |
| .dot-overtaking::before { | |
| animation: dot-overtaking 2s infinite cubic-bezier(0.2, 0.6, 0.8, 0.2); | |
| animation-delay: 0.3s; | |
| } | |
| .dot-overtaking::after { | |
| animation: dot-overtaking 1.5s infinite cubic-bezier(0.2, 0.6, 0.8, 0.2); | |
| animation-delay: 0.6s; | |
| } | |
| @keyframes dot-overtaking { | |
| 0% { | |
| transform: rotateZ(0deg); | |
| } | |
| 100% { | |
| transform: rotateZ(360deg); | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Experimental: Gooey Effect | |
| * Dot Shuttle | |
| * ============================================== | |
| */ | |
| .dot-shuttle { | |
| position: relative; | |
| left: -15px; | |
| width: 12px; | |
| height: 12px; | |
| border-radius: 6px; | |
| background-color: hsl(0deg, 100%, 0%); | |
| color: transparent; | |
| margin: -1px 0; | |
| filter: blur(2px); | |
| } | |
| .dot-shuttle::before, .dot-shuttle::after { | |
| content: ""; | |
| display: inline-block; | |
| position: absolute; | |
| top: 0; | |
| width: 12px; | |
| height: 12px; | |
| border-radius: 6px; | |
| background-color: hsl(0deg, 100%, 0%); | |
| color: transparent; | |
| filter: blur(2px); | |
| } | |
| .dot-shuttle::before { | |
| left: 15px; | |
| animation: dot-shuttle 2s infinite ease-out; | |
| } | |
| .dot-shuttle::after { | |
| left: 30px; | |
| } | |
| @keyframes dot-shuttle { | |
| 0%, 50%, 100% { | |
| transform: translateX(0); | |
| } | |
| 25% { | |
| transform: translateX(-45px); | |
| } | |
| 75% { | |
| transform: translateX(45px); | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Experimental: Emoji | |
| * Dot Bouncing | |
| * ============================================== | |
| */ | |
| .dot-bouncing { | |
| position: relative; | |
| height: 10px; | |
| font-size: 10px; | |
| } | |
| .dot-bouncing::before { | |
| content: "⚽🏀🏐"; | |
| display: inline-block; | |
| position: relative; | |
| animation: dot-bouncing 1s infinite; | |
| } | |
| @keyframes dot-bouncing { | |
| 0% { | |
| top: -20px; | |
| animation-timing-function: ease-in; | |
| } | |
| 34% { | |
| transform: scale(1, 1); | |
| } | |
| 35% { | |
| top: 20px; | |
| animation-timing-function: ease-out; | |
| transform: scale(1.5, 0.5); | |
| } | |
| 45% { | |
| transform: scale(1, 1); | |
| } | |
| 90% { | |
| top: -20px; | |
| } | |
| 100% { | |
| top: -20px; | |
| } | |
| } | |
| /** | |
| * ============================================== | |
| * Experimental: Emoji | |
| * Dot Rolling | |
| * ============================================== | |
| */ | |
| .dot-rolling { | |
| position: relative; | |
| height: 10px; | |
| font-size: 10px; | |
| } | |
| .dot-rolling::before { | |
| content: "⚽"; | |
| display: inline-block; | |
| position: relative; | |
| transform: translateX(-25px); | |
| animation: dot-rolling 3s infinite; | |
| } | |
| @keyframes dot-rolling { | |
| 0% { | |
| content: "⚽"; | |
| transform: translateX(-25px) rotateZ(0deg); | |
| } | |
| 16.667% { | |
| content: "⚽"; | |
| transform: translateX(25px) rotateZ(720deg); | |
| } | |
| 33.333% { | |
| content: "⚽"; | |
| transform: translateX(-25px) rotateZ(0deg); | |
| } | |
| 34.333% { | |
| content: "🏀"; | |
| transform: translateX(-25px) rotateZ(0deg); | |
| } | |
| 50% { | |
| content: "🏀"; | |
| transform: translateX(25px) rotateZ(720deg); | |
| } | |
| 66.667% { | |
| content: "🏀"; | |
| transform: translateX(-25px) rotateZ(0deg); | |
| } | |
| 67.667% { | |
| content: "🏐"; | |
| transform: translateX(-25px) rotateZ(0deg); | |
| } | |
| 83.333% { | |
| content: "🏐"; | |
| transform: translateX(25px) rotateZ(720deg); | |
| } | |
| 100% { | |
| content: "🏐"; | |
| transform: translateX(-25px) rotateZ(0deg); | |
| } | |
| } | |
| /*# sourceMappingURL=three-dots.css.map */ |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <link href="https://codepen.io/nzbin/pen/brwxvz.css" rel="stylesheet" /> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment