Professional element entrance effects for modern web applications
Same animation (Slide In Bottom) with different timing functions
Ease Inease-in
Ease Outease-out
Ease In Outease-in-out
Linearlinear
Springcubic-bezier
Elements appear one after another with delay
<div class="box fade-in animate">Content</div>
// Add animation class when element is in viewport
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
entry.target.classList.add('animate');
}
});
});
document.querySelectorAll('.fade-in').forEach(el => {
observer.observe(el);
});
See 04_scroll-reveal.html for native CSS scroll-triggered animations using animation-timeline: view()
@media (prefers-reduced-motion: reduce)@media (prefers-reduced-motion: reduce) {
.animate {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
}
}