1 element, some spare time and an inspiring gif
sadly, due to shadow-dom differences, only webkit/blink supported, for now...
more updates to come!
A Pen by tomasz stryjewski on CodePen.
1 element, some spare time and an inspiring gif
sadly, due to shadow-dom differences, only webkit/blink supported, for now...
more updates to come!
A Pen by tomasz stryjewski on CodePen.
| <marquee><progress>loading...</progress></marquee> | |
| <progress>loading...</progress> |
| @import "compass/css3"; | |
| @mixin positionC( $radius, $amount:5, $ratio:1, $offsetX:0, $offsetY:0 ) { | |
| $deg: 0deg; | |
| $prc: 0%; | |
| $degInc : 360deg / $amount; | |
| $prcInc : 100% / $amount; | |
| @for $i from 0 through $amount { | |
| $x : $radius * cos( $deg ) * $ratio; | |
| $y : $radius * sin( $deg ) / $ratio; | |
| #{$prc} { | |
| //transform: translate( $x, $y ); | |
| left: $x - $offsetX; | |
| top: $y - $offsetY; | |
| } | |
| $deg : $deg + $degInc; | |
| $prc : $prc + $prcInc; | |
| } | |
| } | |
| $time: .8s; | |
| $blobTime: $time; | |
| $hoolaTime: $time * .5; | |
| $faceTime: $time * .5; | |
| body { | |
| text-align: center; | |
| font-family: sans-serif; | |
| } | |
| progress { | |
| -webkit-appearance: none; | |
| width: 100px; | |
| height: 100px; | |
| border: none; | |
| position: relative; | |
| z-index: 1; | |
| margin: 1em; | |
| -webkit-transform: translateZ( 0 ) rotate( 90deg ); | |
| &::-webkit-progress-value { | |
| position: relative; | |
| appearance: none; | |
| border-radius: 100% / 100% 90% 90% 100%; | |
| background: #6ba; | |
| box-shadow: 0 0 10px -2px #6ba; | |
| height: 100%; | |
| width: 100% !important; | |
| -webkit-animation: blob $blobTime linear infinite; | |
| &::before, | |
| &::after { | |
| content: ''; | |
| width: 30px; | |
| height: 120px; | |
| border-radius: 100%; | |
| border: 10px solid #f30; | |
| position: absolute; | |
| top: -15px; | |
| left: 40%; | |
| -webkit-animation: hoola $hoolaTime ease-in-out infinite; | |
| } | |
| &::before { | |
| clip: rect( 0px, 25px, 140px, 0 ); | |
| z-index: -1; | |
| } | |
| &::after { | |
| clip: rect( 0px, 50px, 140px, 25px ); | |
| z-index: 1; | |
| } | |
| } | |
| &::-webkit-progress-bar { | |
| appearance: none; | |
| background: none; | |
| height: 100%; | |
| width: 100%; | |
| text-align: center; | |
| transform: translateZ( 0 ); | |
| position: relative; | |
| font-size: 48px; | |
| -webkit-animation: face $faceTime linear infinite; | |
| &::before, | |
| &::after { | |
| position: absolute; | |
| left: 0; | |
| right: 0; | |
| top: 46%; | |
| width: 100%; | |
| z-index: 1; | |
| } | |
| &::before { | |
| content: ':'; | |
| color: #088; | |
| transform: translate( -.5em, -50% ); | |
| } | |
| &::after { | |
| content: ')'; | |
| color: #fff; | |
| transform: translate( -.2em, -50% ); | |
| } | |
| } | |
| } | |
| @keyframes hoola { | |
| @include positionC( 5px, 11, .5, -40px, 20px ); | |
| } | |
| @keyframes blob { | |
| @include positionC( 1px, 11, .1 ); | |
| 50% { | |
| border-radius: 100% / 100% 90% 90% 100%; | |
| } | |
| } | |
| @keyframes face { | |
| @include positionC( 3px, 3 ); | |
| } |