Quickly write delayed transitions.
A Pen by Matt Daniel Brown on CodePen.
<div></div> | |
<div></div> | |
<div></div> | |
<div></div> | |
<div></div> | |
<div></div> |
# applying and removing classes for demo | |
# you'll normally be doing interactive stuff like this with this mixin | |
toggle = -> | |
document.body.classList.toggle "active" | |
setTimeout => | |
toggle() | |
, 1000 | |
toggle() |
// actual mixin | |
@mixin stagger-delay( | |
// delay between staggers, any time | |
// unit is valid here | |
$delay: 0.1s, | |
// children you'd like to count up to | |
$total: 1, | |
// delay you'd like to start with | |
$start: 0s, | |
// any additional selectors you'd like | |
// to use, in case you're targeting a child | |
// of this nth element | |
$selector: "", | |
// nth kind you're targeting, | |
// so: "of-type" or "child" | |
$kind: "of-type" | |
){ | |
$i: 0; | |
@while $i < $total { | |
&:nth-#{$kind}( #{$total}n+#{$i+1})#{$selector} { | |
transition-delay: #{$start+($delay*$i)}; | |
} | |
$i: $i+1; | |
} | |
} | |
// sample usage | |
div { | |
transition: transform 0.15s ease-in-out; | |
transform: translate( 0 , 0% ); | |
@include stagger-delay( 0.15s , 6 ); | |
position: relative; | |
width: 5vw; | |
height: 5vw; | |
background-color: red; | |
display: inline-block; | |
border-radius: 50%; | |
margin: 1vw; | |
} | |
body.active { | |
div { | |
transform: translate( 0, 150% ); | |
} | |
} | |
// some base page styling | |
html , body { | |
position: absolute; | |
text-align: center; | |
line-height: 100vh; | |
overflow: hidden; | |
width: 100%; | |
height: 100%; | |
font-size: 0; | |
left: 0; | |
top: 0; | |
} |
Quickly write delayed transitions.
A Pen by Matt Daniel Brown on CodePen.