👨🍳 staff design engineer @shopify (ex @google, @vercel 🫡)
📚 making ui/ux course craftofui.dev
👰♀️ @seaotta.dev
it’s a shame there isn’t a nice way to magically scale the text to fit a path neatly
(the scale/blend trick is a nice touch)
it’s a shame there isn’t a nice way to magically scale the text to fit a path neatly
(the scale/blend trick is a nice touch)
2024 👇 (not posted here)
2024 👇 (not posted here)
works great for me. one small thing i see that doesn’t happen every single time but if you open a demo, sometimes you get a flash of the page before it fades in on the page transition. that’s Safari iOS.
works great for me. one small thing i see that doesn’t happen every single time but if you open a demo, sometimes you get a flash of the page before it fades in on the page transition. that’s Safari iOS.
instead of battling it, i'm jus' gonna try and take it out of the equation 😅
instead of battling it, i'm jus' gonna try and take it out of the equation 😅
felt like a way that would open up easy pointer position passing to styles 🤔
felt like a way that would open up easy pointer position passing to styles 🤔
.sticky-atc {
position: fixed;
inset: auto 0 0 0;
transition: translate 0.26s cubic-bezier(.55,0,.67,1.25);
/* hide when scrolling down */
@container scroll-state(scrolled: bottom) {
translate: 0 100%;
transition-delay: 0.5s;
}
}
.sticky-atc {
position: fixed;
inset: auto 0 0 0;
transition: translate 0.26s cubic-bezier(.55,0,.67,1.25);
/* hide when scrolling down */
@container scroll-state(scrolled: bottom) {
translate: 0 100%;
transition-delay: 0.5s;
}
}
then it had to be switched to [popover] + <button> because the API moved and we lost some of the functionality hooks we had + it needed to work in my deck
i'll have to try and piece it together again
then it had to be switched to [popover] + <button> because the API moved and we lost some of the functionality hooks we had + it needed to work in my deck
i'll have to try and piece it together again
use CSS pseudoelements to bridge the :hover gap w/ :has() + inset
a:has(+ .dots) a::after,
.dots + a::after {
position: absolute;
content: '';
}
a:has(+ .dots) a::after { inset: 0 -50% 0 100%; }
.dots + a::after { inset: 0 100% 0 -50%; }
use CSS pseudoelements to bridge the :hover gap w/ :has() + inset
a:has(+ .dots) a::after,
.dots + a::after {
position: absolute;
content: '';
}
a:has(+ .dots) a::after { inset: 0 -50% 0 100%; }
.dots + a::after { inset: 0 100% 0 -50%; }
i really want some more "editing" type features so i often end up exporting and then doing other things in Screenflow
i really want some more "editing" type features so i often end up exporting and then doing other things in Screenflow
::details-content {
interpolate-size: allow-keywords;
transition: content-visibility, height;
transition-behavior: allow-discrete;
}
[open]::details-content { height: fit-content; }
CSS :has() handling the image swaps 🤙
::details-content {
interpolate-size: allow-keywords;
transition: content-visibility, height;
transition-behavior: allow-discrete;
}
[open]::details-content { height: fit-content; }
CSS :has() handling the image swaps 🤙
i do this for Shopify, where anchor isn't supported, i do a rudimentary anchor with custom properties and have hide on resize/scroll 🤙
i do this for Shopify, where anchor isn't supported, i do a rudimentary anchor with custom properties and have hide on resize/scroll 🤙
yeah, the sheer amount of demos produced overwhelms me at the idea of trying to make them all fit into this format haha
i did audit the last couple of years and the config template has evolved
yeah, the sheer amount of demos produced overwhelms me at the idea of trying to make them all fit into this format haha
i did audit the last couple of years and the config template has evolved
use different CSS timing functions per axis for motion paths 👨🍳
.p {
animation: x .8s var(--x-time), y .8s var(--y-time);
animation-composition: accumulate; 👈
}
@keyframes x { to { translate: var(--x) 0 }
@keyframes y { to { translate: 0 var(--y) }
use different CSS timing functions per axis for motion paths 👨🍳
.p {
animation: x .8s var(--x-time), y .8s var(--y-time);
animation-composition: accumulate; 👈
}
@keyframes x { to { translate: var(--x) 0 }
@keyframes y { to { translate: 0 var(--y) }