Postcard From Web Directions Dev Summit, 2025
Lee Meyer recently spoke at Web Directions Summit 2025. This is his experience, not only speaking at the event, but experiencing the event through the lens of anxiety and imposter syndrome.
Lee Meyer recently spoke at Web Directions Summit 2025. This is his experience, not only speaking at the event, but experiencing the event through the lens of anxiety and imposter syndrome.
Powered by
DigitalOcean
Have you ever struggled to style an element while it’s being dragged? Sunkanmi explains some ways it could become easier in the future.
2026 is almost upon us. I know we’re all itching to see the clock strike midnight (cue The Final Countdown by Europe), but not without recapping the best CSS-related things that happened over the last two weeks!
This is the best job I’ve had in my life and it’s only possible because you keep showing up each day to read, learn, share, and discuss all-things-front-end (and a little CSS, of course) with us.
The text-decoration-inset property solves a problem that we’ve had since the beginning of the web, which is that text decorations such as underlines extend beyond the first and last characters, resulting in vertical misalignment.
It’s settled! A new CSS display property keyword called grid-lanes will trigger a masonry layout mode.
#
ReliCSS helps replace CSS hacks with @supports and modern CSS.
#
Chris Coyier swiftly demonstrates how !important works with CSS variables.
#
A fully-interactive Mario World demo built using HTML and CSS only (requires Chrome, for now).
#
.element { animation-range: cover; }
.element { corner-shape: superellipse(2); }
.element { corner-shape: scoop; }
.element { rotate: asin(-0.5); }
.element { rotate: acos(0.5) }
::picker-icon { content: "✓"; }
::scroll-marker:target-after { background: red; }
.element { transform: translateY(calc(sin(20deg * var(--i)) * 100px)); }
.element { transform: translateY(calc(cos(20deg * var(--i)) * 100px)); }
.element { transform: translateY(calc(tan(15deg * var(--i)) * 5dvh)); }
.element { background-image: cross-fade(url(a), url(b)); }
.element { background-image: image-set(url("image.png") 1x, url("image-large.png") 2x);
}
.triangle { clip-path: shape(from 50% 0%, line by 50% 100%, hline to 0%, line to 50% 0%, close); }
.element { background-image: paint(polka-dots); }