Video yükleniyor...

Video Yüklenemedi

Ana Sayfaya Dön

Neat trick here is how you "split" the CTA ✨ Pseudoelements in CSS will pick up pointer events 👀 When the Nav is collapsed, scale up a pseudoelement on the CTA so it's like the CTA takes up all the space 😎 Check out the purple highlighted pseudo 👇

77,094 görüntüleme • 2 yıl önce •via X (Twitter)

10 Yorum

Arc Terminus profil fotoğrafı
Arc Terminus2 yıl önce

At this point your posts are about 90% of my bookmarks.

jhey ▲🐻🎈 profil fotoğrafı
jhey ▲🐻🎈2 yıl önce

@lee_marjon jheymarks™ 😅

Mery profil fotoğrafı
Mery2 yıl önce

Never seen this kinda animation in a website before. So so cool

jhey ▲🐻🎈 profil fotoğrafı
jhey ▲🐻🎈2 yıl önce

Definitely a fun opportunity to mess with some of the new stuff 😁 Interesting problem here is that it needs to appear like a clickable button before revealing the navigation 🤓

liro crocodilo profil fotoğrafı
liro crocodilo2 yıl önce

@buenomrl

Sebastian profil fotoğrafı
Sebastian2 yıl önce

so good dude

jhey ▲🐻🎈 profil fotoğrafı
jhey ▲🐻🎈2 yıl önce

🤙🤙🤙

Patrick Petcu profil fotoğrafı
Patrick Petcu2 yıl önce

@learnframer is this possible in framer? Looks wild and awesome. Would love to see you give it a try!

Design With Ay profil fotoğrafı
Design With Ay2 yıl önce

Oh man this is so cool!

jhey ▲🐻🎈 profil fotoğrafı
jhey ▲🐻🎈2 yıl önce

🙏🙏🙏

Benzer Videolar

CSS Tip! 🍬 You can create a CSS-only sticky CTA using position: sticky or scroll-driven animations 🤙 .cta { position: sticky; margin-top: 110vh; bottom: 2rem; /* 👈 Stick! */ } This is one way 👀 This first way relies on you setting a layout on the body and putting the CTA in a zero-space part of the layout body { display: grid; grid-template-columns: auto 0; } The children of the body are an element with your content and then the CTA. You could also use display:flex too. .content { flex: 1 0 100%; } .cta { place-self: end; } As you scroll the body, the CTA comes into view and sticks in position 🙌 That's one way. If you want to take it further and do something like flip between showing or not, maybe scale it up, or add some special easing, etc. an animation is another way 📜 First, change the styles for your CTA. Note the translate property that's powered by a custom property .cta { position: fixed; bottom: 2rem; right: 2rem; translate: 0 calc(20vh - (var(--show) * 20vh)); transition: translate 0.875s var(--elastic); } Next you need a custom property that you're going to animate @​property --show { inherits: true; initial-value: 0; syntax: ' '; } Lastly, you animate this value on the body. As the property value changes, the value will trickle down to the CTA @​supports (animation-timeline: scroll()) { body { animation: show-cta both steps(1); animation-timeline: scroll(root); animation-range: 0 10vh; } @​keyframes show-cta { to { --show: 1; } } } Using @​supports you can use this as a progressive enhancement. If scroll-driven animations are supported, use them. Otherwise fallback to using position: sticky 🤙 That's it! As always, any questions or requests, hit me up! 🙏 CodePen.IO link below! 👇

jhey ʕ•ᴥ•ʔ

133,020 görüntüleme • 2 yıl önce

CSS Tip! 💪 You can create these tab controls with CSS :has() + radio buttons ✨ .tabs:has(input:nth-of-type(3)) { --count: 3; } .tabs:has(:checked:nth-of-type(3)) { --active: 2; } .tabs::after { translate: calc(var(--active, 0) * 100%) 0; width: calc(100% / var(--count)); } Two CSS :has() tricks here combined with a rendering trick 🤙 The tab control is a container using display: grid. You can use :has() to count the number of tabs in the container: .tabs:has(input:nth-of-type(3)) { --count: 3; } .tabs:has(input:nth-of-type(4)) { --count: 4; } Using the cascade, the last valid :has() gives you the number of tabs 🫶 Once you know the number of tabs, you know how to size the indicator: .tabs::after { content: ""; position: absolute; height: 100%; width: calc(100% / var(--count)); } It's a pseudoelement that uses --count to determine its size 📏 The next :has() trick is determining which tab is active or :checked as it's an input [type=radio] .tabs:has(:checked:nth-of-type(2)) { --active: 1; } .tabs:has(:checked:nth-of-type(3)) { --active: 2; } You can use a zero-indexed translation here. If the second input is :checked, set --active: 1, then translate the pseudoelement on the tabs to that position 👉 .tabs::after { translate: calc(var(--active, 0) * 100%) 0; } The last rendering trick is using mix-blend-mode 👀 The tabs have a black background-color, the pseudoelement is white, and the label text is white. When you use mix-blend-mode: difference on the pseudoelement it will give this effect that the text transitions from white to black sliding across 😎 .tabs::after { color: hsl(0 0% 100%); mix-blend-mode: difference; } You can totally mix up the colors here though and go with a different effect. The mechanics of how you can use CSS :has() is the main point here 🙏 As always, any questions, suggestions, etc. let me know CodePen.IO link below! 👇 (There's even a Tailwind CSS play for this one too 👀)

jhey ʕ•ᴥ•ʔ

437,426 görüntüleme • 2 yıl önce