Loading video...

Video Failed to Load

Go Home

Future CSS Tip! ๐Ÿ”ฎ Use scroll-driven animations to create those cool Apple-style text reveals ๐Ÿ”ฅ No JavaScript required ๐Ÿ‘€ Responsive too! ๐Ÿ™Œ .sentence { animation: highlight; animation-timeline: view(); animation-range: cover 40% cover 75%; } CodePen.IO link below! ๐Ÿ‘‡

348,077 views โ€ข 3 years ago โ€ขvia X (Twitter)

10 Comments

jhey โ–ฒ๐Ÿป๐ŸŽˆ's profile picture
jhey โ–ฒ๐Ÿป๐ŸŽˆ3 years ago

Here's that @CodePen link! ๐Ÿš€ Remember, you'll need to be in Chrome Canary to see this in action. But, how exciting?! ๐Ÿคฏ

Shaun Levett's profile picture
Shaun Levett3 years ago

@CodePen This is highly erotic

jhey โ–ฒ๐Ÿป๐ŸŽˆ's profile picture
jhey โ–ฒ๐Ÿป๐ŸŽˆ3 years ago

@CodePen Hahaha ๐Ÿ‘๐Ÿ˜…

altino's profile picture
altino3 years ago

@CodePen that means it uses main thread or not ? Im confused ...

Ali's profile picture
Ali3 years ago

@CodePen @maryam_davoudi

Julien Van Beveren's profile picture
Julien Van Beveren3 years ago

@CodePen crazy that this works with css only! maybe scroll highjacking might be considered ok now

jhey โ–ฒ๐Ÿป๐ŸŽˆ's profile picture
jhey โ–ฒ๐Ÿป๐ŸŽˆ3 years ago

@CodePen Yeah, it's gonna make things pretty interesting ๐Ÿค“

Lucas Walder's profile picture
Lucas Walder3 years ago

@CodePen Olha isso @evvvrado

Santiago's profile picture
Santiago3 years ago

@CodePen @SaveToNotion #thread #css

Fradviam's profile picture
Fradviam3 years ago

@CodePen ๐Ÿ˜ณ๐Ÿ˜ณ

Related Videos

Future CSS Tip! ๐Ÿ You can create this Apple-style photo scroller by combining CSS scroll-driven animations and CSS scroll-snap ๐Ÿ˜ Peep those changing captions ๐Ÿ‘€ No JS! img { animation: highlight both linear; animation-timeline: view(inline); ๐Ÿ‘ˆ Horizontal animation-range: cover 0% cover 50%; ๐Ÿ‘ˆ Finish } @ keyframes highlight { 50% { translate: 0 0; scale: var(--starting-scale); ๐Ÿ‘ˆ props opacity: var(--starting-opacity); ๐Ÿ‘ˆ } 100% { translate: 0 0; scale: 1; opacity: 1; } } Without the animation support, you get a standard unordered list containing some s ๐Ÿค™ How do we swap the captions though? The "trick" is to use position: absolute on the figcaption and animate their opacity based on the ViewTimeline of their parent list item ๐Ÿ˜Ž figcaption { animation: show both linear; animation-timeline: --list-item; } @ keyframes show { 0%, 45%, 55%, 100% { opacity: 0; } 50% { opacity: 1; } } li { view-timeline-name: --list-item; view-timeline-axis: inline; ๐Ÿ‘ˆ important! } The parent of the scroll track uses position: relative so all the captions sit in the middle even though they are in the right place for the markup ๐Ÿ™Œ The last bit is the scroll-snap ๐Ÿค™ Not much to it at all. Wrap the list and make it scrollable. Then add scroll-snap-type .wrapper { scroll-snap-type: x mandatory; overflow-x: scroll; } Then make sure each list item has scroll-snap-align set on it li { scroll-snap-align: center; } That's it! Pretty cool demo to put together and see how to do this stuff with these APIs ๐Ÿค“ A lot of cool little tricks to pick up for writing your CSS! โญ๏ธ CodePen.IO link below! ๐Ÿ‘‡

jhey ส•โ€ขแดฅโ€ขส”

234,583 views โ€ข 3 years ago

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.IO link below! ๐Ÿ‘‡

jhey ส•โ€ขแดฅโ€ขส”

575,728 views โ€ข 2 years ago

CSS Tip! ๐Ÿณ You can add little details like this scale down on scroll effect with scroll-driven animations and some sticky positioning ๐Ÿค™ section { animation: scale-down; animation-timeline: view(); animation-range: exit; } @โ€‹keyframes scale-down { to { scale 0.8; } ] In this smaller example, you can lean into using the position to drive an animation that scales itself down as it leaves the viewport (Seen on the Apple Vision Pro site ๐Ÿ) The nice thing here is that if you don't have scroll-driven animations, the user still gets a good experience โœจ So how do you do it? There isn't much to it header { transform-origin: 50% 0%; animation: scale-down both ease-in; animation-timeline: view(); animation-range: exit; view-timeline: --header; } @โ€‹keyframes scale-down { to { scale: 0.8 0.8; } } That's it. The layout makes use of position: sticky so that the element stays in the shot whilst you scroll the page. As it leaves the page, it scales down inside the ๐Ÿซถ The other smol animation here is fading the overlay on the video out ๐Ÿ˜Ž Real easy. You may notice the view-timeline you defined above for the ๐Ÿ‘€ header { view-timeline: --header; } You have a pseudoelement on the text content of the header that lives inside a header > section::before { background: hsl(0 0% 0% / 0.75); opacity: 1; animation: fade both linear; animation-timeline: --header; animation-range: exit-crossing 0% exit 0%; } @โ€‹keyframes fade { to { opacity: 0; } } You use a slightly smaller range on this with exit-crossing to fade it out before you start the scale down animation ๐Ÿค That's it! Thought this smaller example would be easier to grok for people ๐Ÿ™ It's also covered with JavaScript if you really want it for your sites ๐Ÿค™ CodePen.IO link below ๐Ÿ‘‡

jhey ส•โ€ขแดฅโ€ขส”

146,270 views โ€ข 2 years ago