CSS Tip! 🚥
You can create these trending expanding scroll indicators with scroll-driven animations and flex 🤙
.indicator {
animation: grow;
animation-range: contain calc(50% - var(--size)...;
animation-timeline: var(--card);
}
@keyframes grow { 50% { flex: 3; }}
What's the trick? Put the indicators in a container using flex layout and set a width larger than the number of indicators 😉
.indicators {
aspect-ratio: 7 / 1;
display: flex;
}
Importantly, set no gap 🤏
To mimic the gap set a transparent border on each indicator and set the background using padding-box
.indicator {
background: linear-gradient(#fff, #fff) padding-box;
border-radius: 50px;
border: 4px solid transparent;
}
Now for the animation. You want to create a view-timeline for each card that moves across 🤙
li:nth-of-type(1) { view-timeline: --one inline; }
li:nth-of-type(2) { view-timeline: --two inline; }
Make sure they use the inline axis too!
The trick is hoisting these view-timeline so the indicators can use them with timeline-scope 👀
.track { timeline-scope: --one, --two, ...; }
All that's left is for you to create the animation piece using some calc with the card size ⚡️
.indicator {
--size: calc(var(--card-width) * 0.9);
animation: grow both linear;
animation-range:
contain calc(50% - var(--size))
contain calc(50% + var(--size));
}
.indicator:nth-of-type(1) { animation-timeline: --one; }
.indicator:nth-of-type(2) { animation-timeline: --two; }
@keyframes grow { 50% { flex: 3; }}
And there you have it, responsive scroll indicators using CSS scroll-driven animations 😎
Sprinkle a little JavaScript to make them clickable and scroll the the right card ✨
const shift = (event) => {
if (event.target.tagName === "BUTTON") {
const index = [...event.target.parentNode.children].indexOf(event.target);
const item = document.querySelector(`li:nth-of-type(${index + 1})`);
item.scrollIntoView({
behavior: "smooth",
inline: "center"
});
}
};
As always, any questions or suggestions, let me know. I've put a JavaScript fallback in to use GSAP in browsers that don't have scroll-driven animations 🫶
@CodePen link below! 👇
@codewithvoid You can only reach 100% if you start building projects and figuring things out as you go
Though you can't really make it to 100% because you'll always have something new to learn
But it's not a waste to keep at it because overtime you'll always find yourself to get better
ChatGPT is a free university:
• You can learn to code
• You can learn copywriting
• You can learn marketing
• You can learn finance
• You can learn anything
Learn for free and make money in 2023.
Get started today with your laptop!