jhey ʕ•ᴥ•ʔ's banner
jhey ʕ•ᴥ•ʔ's profile picture

jhey ʕ•ᴥ•ʔ

@jh3yy • 147,809 subscribers

designing interfaces. engineering experiences. many can build it. few can explain it. @shopify brand design studio 💎 ex @google @vercel

Shorts

reminder: ease your gradients ✨ crisper details, softer fades adds a subtle bit of polish to overlays, masks, etc. same endpoints, extra eased stops in between 🧑‍🍳

reminder: ease your gradients ✨ crisper details, softer fades adds a subtle bit of polish to overlays, masks, etc. same endpoints, extra eased stops in between 🧑‍🍳

251,935 views

one does not simply reveal a password 👁️

one does not simply reveal a password 👁️

197,087 views

magnetic bento hover effect w/ css anchor positioning .bento { li:hover article { anchor-name: --a; } .indicator { position-anchor: --a; inset: anchor(inside); transition: inset var(--dur) var(--ease); } }

magnetic bento hover effect w/ css anchor positioning .bento { li:hover article { anchor-name: --a; } .indicator { position-anchor: --a; inset: anchor(inside); transition: inset var(--dur) var(--ease); } }

85,921 views

slop grenade™

slop grenade™

122,634 views

this progressive blur effect interaction for the new iphone over on apple's site is pretty neat

this progressive blur effect interaction for the new iphone over on apple's site is pretty neat

153,228 views

this could've jus' been a checkbox, but they added a slider with a little friction at either end that reflects the physical behavior tiny details, thoughtfully considered

this could've jus' been a checkbox, but they added a slider with a little friction at either end that reflects the physical behavior tiny details, thoughtfully considered

94,945 views

`field-sizing: content` lets you autosize textareas in css but what if you want the height to transition instead of snap? wrap it and sync the wrapper height with a ResizeObserver ↓

`field-sizing: content` lets you autosize textareas in css but what if you want the height to transition instead of snap? wrap it and sync the wrapper height with a ResizeObserver ↓

41,562 views

you will learn a lot about animation by scrubbing things frame-by-frame make it a habit for example ↓ notice how apple transitions the lines in and out differently there's usually a reason 🤙

you will learn a lot about animation by scrubbing things frame-by-frame make it a habit for example ↓ notice how apple transitions the lines in and out differently there's usually a reason 🤙

224,554 views

one way: clip-path: shape() in css single element, draw outline, scoop corner no stitched-together pieces/mask gymnastics 🧙

one way: clip-path: shape() in css single element, draw outline, scoop corner no stitched-together pieces/mask gymnastics 🧙

101,755 views

if you’re dynamically masking a scroll container with css, consider leaving room for the scrollbar instead of masking it too 🧑‍🍳 mask-repeat: no-repeat; mask-size: calc(100% - 10px) 100px;

if you’re dynamically masking a scroll container with css, consider leaving room for the scrollbar instead of masking it too 🧑‍🍳 mask-repeat: no-repeat; mask-size: calc(100% - 10px) 100px;

213,001 views

one way w/ css 🪄 stack an image 2x filter 1st, unclip 2nd on :hover 🤙 a img { grid-area: 1 / 1; } img:first-of-type { filter: grayscale(1) invert(1); } img:last-of-type { clip-path: circle(0); transition: clip-path; } a:hover img:last-of-type { clip-path: circle(100%); }

one way w/ css 🪄 stack an image 2x filter 1st, unclip 2nd on :hover 🤙 a img { grid-area: 1 / 1; } img:first-of-type { filter: grayscale(1) invert(1); } img:last-of-type { clip-path: circle(0); transition: clip-path; } a:hover img:last-of-type { clip-path: circle(100%); }

326,445 views

if you build animated interfaces for the web, this is essential reading a clear, practical look at the main thread and the real cost of animation in javascript and css the difference isn't just measurable, it's something you feel ↓ 🔗

if you build animated interfaces for the web, this is essential reading a clear, practical look at the main thread and the real cost of animation in javascript and css the difference isn't just measurable, it's something you feel ↓ 🔗

46,709 views

this is a good keyboard gonna hack the led matrix to show agent status 🧑‍🍳

this is a good keyboard gonna hack the led matrix to show agent status 🧑‍🍳

37,362 views

had some requests for the code and a better angle of the folding shader in action 🤙 - ⌃⌘L to toggle - re-anchors on stop - pin + blur tidied uses the macbook lid angle sensor, combined with screencapturekit and a metal shader repo w/ app →

had some requests for the code and a better angle of the folding shader in action 🤙 - ⌃⌘L to toggle - re-anchors on stop - pin + blur tidied uses the macbook lid angle sensor, combined with screencapturekit and a metal shader repo w/ app →

44,365 views

turn it to eleven 🔊 gesture enhanced input[type=range]

turn it to eleven 🔊 gesture enhanced input[type=range]

23,662 views

you can totally do it with css 🧑‍🍳 use a border mask, layers + overflow: hidden, or other tricks skip animating the gradient though, jus' spin a 1:1 gradient layer 🤙

you can totally do it with css 🧑‍🍳 use a border mask, layers + overflow: hidden, or other tricks skip animating the gradient though, jus' spin a 1:1 gradient layer 🤙

286,798 views

turned the lights down and played with the shader a little 🔥👁️🔥

turned the lights down and played with the shader a little 🔥👁️🔥

36,049 views

Parallax cards with masked blurs 😷 Tweak that CSS until you get something you're happy with 🤙

Parallax cards with masked blurs 😷 Tweak that CSS until you get something you're happy with 🤙

583,216 views

using css pow() you can create runtime-configurable fluid typography that responds to viewport or container size 😉 for example, "minimum of 14px at 375px and scale to maximum 24px at 1500px" all powered by pow() and custom properties

using css pow() you can create runtime-configurable fluid typography that responds to viewport or container size 😉 for example, "minimum of 14px at 375px and scale to maximum 24px at 1500px" all powered by pow() and custom properties

118,288 views

css trick for the "shine" border 🧑‍🍳 take a pseudoelement position + give it an inset box-shadow mask it off at an angle with a linear-gradient 🤙 bonus: use corner-shape: squircle + rotate on pointer move

css trick for the "shine" border 🧑‍🍳 take a pseudoelement position + give it an inset box-shadow mask it off at an angle with a linear-gradient 🤙 bonus: use corner-shape: squircle + rotate on pointer move

200,156 views

Videos

jh3yy's profile picture

trans<form>er

jhey ʕ•ᴥ•ʔ

81,878 views • 18 days ago

jh3yy's profile picture

/effort 🧠⚡

jhey ʕ•ᴥ•ʔ

20,539 views • 11 days ago

jh3yy's profile picture

CSS Tip! 🤙 You can use mask-composite and some JavaScript to create this pointer proximity following glow border ✨ .glow { mask-composite: intersect; mask-clip: padding-box, border-box; mask: linear-gradient(#0000, #0000), conic-gradient(#0000 0deg, #​fff, #0000 45deg); } The trick is to mask a background-image with a combination of mask layers. mask-composite: intersect; means the mask used will be the intersection of the layers 🔥 use source-in, xor; in browsers that don't support intersect; In this demo, you can use pseudoelements and rely on scoped custom properties to do a lot of the heavy lifting for you 🙌 Once you've masked the background, you need to update the starting angle of the conic-gradient on pointermove 👆 You can work that out by getting the center point of each card and then calculating the angle between that and the pointer with Math.atan2 🤓 let ANGLE = Math.atan2( event?.y - CARD_CENTER[1], event?.x - CARD_CENTER[0] ) * 180 / Math.PI ANGLE = ANGLE < 0 ? ANGLE + 360 : ANGLE; CARD.​style.setProperty('--start', ANGLE + 90) You plug that into your conic-gradient mask as a custom property accounting for --spread ⚡️ conic-gradient(from calc((var(--angle) - (var(--spread) * 0.5)) * 1deg), #000 0deg, #​fff, #0000 calc(var(--spread) * 1deg)); To get the blur, you apply a blur to the glow container on each card 🤙 .glows { filter: blur(calc(var(--blur) * 1px); } That's it! Layers of masks that are clipped and composited before being blurred 😎 The added trick is to fade each one in when the pointer is in the defined proximity of the card. For example, don't show unless within 100px of a card. You can see that in the video. Check out the JavaScript code for that 🫶 Couldn't resist making this one 😁 CodePen.IO link below! 👇

jhey ʕ•ᴥ•ʔ

1,180,786 views • 2 years ago