Starts small below its spot, accelerates up past it while growing to half size, then eases back down to full scale. Two legs, each with its own timing function.
Also known as: zoom in from bottom css, zoom in up animation, zoom up entrance.
<div class="kfa-zoom-in-up">Zoom</div>
.kfa-zoom-in-up {
--c: var(--kfa-color, #3b82f6);
font-size: var(--kfa-size, 16px);
display: grid;
place-items: center;
width: 5.5em;
height: 5.5em;
border-radius: 1em;
background: var(--c);
color: #fff;
font-family: system-ui, sans-serif;
font-weight: 700;
box-shadow: 0 0.6em 1.4em -0.6em color-mix(in srgb, var(--c) 70%, transparent);
animation: kfa-zoom-in-up-kf 0.8s both;
}
@keyframes kfa-zoom-in-up-kf {
0% {
opacity: 0;
transform: translateY(3em) scale(0.3);
animation-timing-function: cubic-bezier(0.11, 0, 0.5, 0);
}
25% { opacity: 1; }
55% {
opacity: 1;
transform: translateY(-0.8em) scale(0.5);
animation-timing-function: cubic-bezier(0.22, 1, 0.36, 1);
}
100% { opacity: 1; transform: none; }
}
@media (prefers-reduced-motion: reduce) {
.kfa-zoom-in-up, .kfa-zoom-in-up *, .kfa-zoom-in-up::before, .kfa-zoom-in-up::after, .kfa-zoom-in-up *::before, .kfa-zoom-in-up *::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}--kfa-color on the element or a parent.
Currently previewing #3b82f6.--kfa-size. Every other dimension is in
em, so the whole thing scales together. Currently previewing 16px.transition or animation
shorthand. Staggered delays are relative, so they keep their rhythm.