Loading video...

Video Failed to Load

Go Home

reminder: you can use css mix-blend-mode to create knockout text ↓ 🧑‍🍳 .sticker { background: #000; color: #​fff; mix-blend-mode: multiply; }

54,161 views • 10 days ago •via X (Twitter)

29 Comments

Private WIFI's profile picture
Private WIFI10 days ago

Im still patiently waiting for the book or course...

Neil McArdle's profile picture
Neil McArdle10 days ago

love the exploded view!

Dusan Odalovic's profile picture
Dusan Odalovic10 days ago

backend guy here, css still feels like magic to me. does this still work when the background behind it isnt plain white, or does it just look a bit off then?

jhey ʕ•ᴥ•ʔ's profile picture
jhey ʕ•ᴥ•ʔ10 days ago

black/white work with the mix-blend-mode trick you can soften them "slightly" trick is to use the knockout part as a layer and then put things on top like the "exploded" view kinda shows in the video 🤙

Fred Wanders's profile picture
Fred Wanders10 days ago

Insane. Always a pleasure seeing your work ma

Chuks Gabriel's profile picture
Chuks Gabriel10 days ago

I don't know what to say anymore.

jhey ʕ•ᴥ•ʔ's profile picture
jhey ʕ•ᴥ•ʔ10 days ago

🥹

Alex Doda 🇦🇶's profile picture
Alex Doda 🇦🇶10 days ago

Beautiful 👏🏻

Yuri's profile picture
Yuri10 days ago

wow

Bai-ee's profile picture
Bai-ee10 days ago

love it when I didn't think about that :O

Shifat Masud's profile picture
Shifat Masud10 days ago

How to make the curl peel effect?

Olivér Varga's profile picture
Olivér Varga10 days ago

What did you use to make this?

DouDou_HMD's profile picture
DouDou_HMD10 days ago

Oh nice

Jooce's profile picture
Jooce10 days ago

This is mega sexy

Kartik Iyer's profile picture
Kartik Iyer10 days ago

Damn! That sticker peel is so satisfying. A can almost feel a really high quality vinyl sticker!

designing4ages's profile picture
designing4ages10 days ago

Incredible

gustavo marts V2.0's profile picture
gustavo marts V2.010 days ago

Realmente increible... Theme for E-commerce ....

Moen🌙's profile picture
Moen🌙10 days ago

failed to access

Jose Miguel Pulgarin's profile picture
Jose Miguel Pulgarin10 days ago

You public your demos somewhere? It would be nice learning from them

adeeb's profile picture
adeeb10 days ago

all concert tickets should be like this!

808's profile picture
80810 days ago

🤯🧠 no words

Luca Barone's profile picture
Luca Barone10 days ago

Wonder if you can use this trick for shimmer effect skeletons

Shubhu's profile picture
Shubhu10 days ago

what's that in back layer? shader or simple css?

Sasha ༊·˚'s profile picture
Sasha ༊·˚10 days ago

omggg looks so coool

Luis -Let´s 2026 ⚡️- Suarez's profile picture
Luis -Let´s 2026 ⚡️- Suarez10 days ago

Sick!

GT Neo's profile picture
GT Neo10 days ago

😲

Joel Nevius's profile picture
Joel Nevius10 days ago

Sheeeez bro. Nuts.

amen's profile picture
amen10 days ago

Woahhhh, I don't even know how to make those punched card cut out thingies

sucodee's profile picture
sucodee10 days ago

Nice work

Related Videos

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,763 views • 2 years ago

CSS Trick 🤙 You can create these tab bar controls by using :has() to count the number of tabs ⭐️ .tabs:has(input:nth-of-type(3)){--count: 3;} .tabs:has(:checked:nth-of-type(3)){--active: 200%;} .tabs::after{ translate:var(--active) 0;} Let's break it down in this ! 📼 Couple of CSS :has() tricks here combined with custom properties 😎 First things first, lay out the tabs using display: grid. This gives you a way to create equal-width tabs 🙏 .tabs { display: grid; grid-auto-flow: column; } Then you use :has() to count the number of tabs and store that in a custom property 🤓 .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 🫶 Using the tab count, you can size the tab indicator. For the tab indicator, use the tabs pseudoelement: .tabs::after { content: ""; position: absolute; height: 100%; width: calc(100% / var(--count)); } See how you can use --count to determine its size 📏 Next, use :has() to determine which tab is active or :checked with 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; } Or you could set active to the translation: .tabs:has(:checked:nth-of-type(2)) { --active: 100%; } Setting the custom property allows you to use the index elsewhere if you need it 🤙 The final piece 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 ʕ•ᴥ•ʔ

70,730 views • 2 years ago