Firefox is joining the shape() game π€©
It's a good time for some blobs: css-generators.com/blob/
Or maybe a nice wavy divider: css-generators.com/wavy-divider/
And stay tuned for another generator and more shapes next week! π€«
Firefox is joining the shape() game π€©
It's a good time for some blobs: css-generators.com/blob/
Or maybe a nice wavy divider: css-generators.com/wavy-divider/
And stay tuned for another generator and more shapes next week! π€«
border-shape is coming.
Enough with the rectangular web!
Probably an SVG of sorts.
20.02.2026 19:25 β π 0 π 0 π¬ 0 π 0
Yea, for various reasons we can't expand the background beyond the border-box. Using padding for that area is the way to go atm.
In the future we might allow separating the border-width from the stroke width of the border-shape, in which case the border width can account for this area.
Thanks @fserb.com for working on the hardest bits of this! Couldn't have done this without you.
19.02.2026 16:20 β π 2 π 0 π¬ 0 π 0
Blog post: some inner workings of implementing CSS corner-shape in Blink.
@developer.chrome.com
developer.chrome.com/blog/impleme...
Element-Scoped View Transitions are gonna be **SO GOOD**
Thereβs still some details to settle, but the main thing is there: run VTs on a subtree of the DOM, allowing parallel VTs.
And with `view-transition-scope` you can limit the scope of `view-transition-name` values, allowing VTs to be nested.
Needless to say, Lotsa feedback welcome!
17.02.2026 20:44 β π 1 π 0 π¬ 0 π 0
I've created a lot of little example for JS/HTML streaming (aka declarative partial updates).
Check it out: wicg.github.io/declarative-...
or source: github.com/WICG/declara...
(Needs up to date chrome canary with experimental features enabled)
It's coming soon!
15.02.2026 12:30 β π 1 π 0 π¬ 0 π 0Yea, that technique only works with things that are popup-like or that have space reserved for them from the outside.
10.02.2026 13:12 β π 1 π 0 π¬ 0 π 0
nice!
btw do these web components have external styles in their shadow DOM? Because that would be another FoUC... I would probably do something like "styling them into existence" in this case, where they are hidden by default external stylesheet shows them using opacity or whatnot.
Also the above reset means that if an unknown component is discovered after the body is already shown, the entire page would disappear until its JS is defined... I guess that would work in very particular circumstances of how the web components are defined/served.
10.02.2026 09:47 β π 0 π 0 π¬ 1 π 0Render blocking would only work for the first render... so if you've rendered once and you want to reduce FoUC for the following loaded components you'd need some other technique.
10.02.2026 09:44 β π 0 π 0 π¬ 1 π 0
border-shape can handle both insets and outsets, so you can do effects like this chevron nav (corner-shape can't do both).
This means you get a perfectly-wrapping focus ring without needing to manage z-index or having it partially covered due to overlap.
Demo: codepen.io/una/pen/ByzY...
Yea mine apparently needed one π
06.02.2026 14:18 β π 0 π 0 π¬ 0 π 0
Haha thanks
Yea shopping is a good remedy for sure!
I can install them back
But it's a fun chore π
Yea he's a thorough kid for sure...
05.02.2026 20:45 β π 0 π 0 π¬ 0 π 0Mechanical keyboard meets 3yo
05.02.2026 20:28 β π 8 π 0 π¬ 5 π 0In other other words, 0x80 black on a white background *substracts* 0x80 from all the 0xff channels of white, so (0xff - 0x80 = 0x7f).
03.02.2026 21:56 β π 3 π 0 π¬ 1 π 0
The formula is:
(foreground * alpha/0xff) + (background * (1 - alpha/0xff)
foreground = 0, white=0xff
So
(0 * 1) + (1 * (255 - 128) = 0 + 127
In other words, the max is 255 and not 256, and what's multiplied is the background with the inverse, so you get 127 and not 128.
Old has always been the new new
03.02.2026 14:55 β π 2 π 0 π¬ 0 π 0Working on some interesting stuff...
03.02.2026 12:54 β π 9 π 3 π¬ 3 π 0Also, let's continue this party at github.com/w3c/csswg-dr... ?
01.02.2026 20:41 β π 0 π 0 π¬ 0 π 0Note that those have meaning beyond adding and removing - the inner shape is the overflow area for the contents and the outer shape interacts with shape-outside.
01.02.2026 19:17 β π 2 π 0 π¬ 1 π 0Yea we could bikeshed something better for this for sure.
01.02.2026 19:11 β π 0 π 0 π¬ 0 π 0I wonder if we should use keywords instead of rely on the order, e.g. `circle() enclosing square()` or `circle() clipped-by square()` or some variation.
01.02.2026 10:19 β π 2 π 0 π¬ 2 π 0See related poll: bsky.app/profile/noms...
01.02.2026 09:26 β π 0 π 0 π¬ 0 π 0