Noam Rosenthal's Avatar

Noam Rosenthal

@nomster.bsky.social

Web platform engineer @ Chrome

1,104 Followers  |  803 Following  |  327 Posts  |  Joined: 22.08.2023
Posts Following

Posts by Noam Rosenthal (@nomster.bsky.social)

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! 🀫

26.02.2026 11:23 β€” πŸ‘ 42    πŸ” 8    πŸ’¬ 0    πŸ“Œ 0

border-shape is coming.
Enough with the rectangular web!

20.02.2026 19:27 β€” πŸ‘ 8    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0

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.

20.02.2026 19:24 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

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
Preview
The corner cases of implementing CSS corner-shape in Blink Β |Β  Blog Β |Β  Chrome for Developers Learn about the complexity of implementing the corner-shape feature.

developer.chrome.com/blog/impleme...

19.02.2026 13:56 β€” πŸ‘ 3    πŸ” 3    πŸ’¬ 0    πŸ“Œ 0
Preview
The corner cases of implementing CSS corner-shape in Blink Β |Β  Blog Β |Β  Chrome for Developers Learn about the complexity of implementing the corner-shape feature.

Blog post: some inner workings of implementing CSS corner-shape in Blink.

@developer.chrome.com

developer.chrome.com/blog/impleme...

19.02.2026 13:56 β€” πŸ‘ 17    πŸ” 4    πŸ’¬ 1    πŸ“Œ 0
Video thumbnail

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.

18.02.2026 11:14 β€” πŸ‘ 220    πŸ” 37    πŸ’¬ 5    πŸ“Œ 2

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)

17.02.2026 20:39 β€” πŸ‘ 13    πŸ” 4    πŸ’¬ 1    πŸ“Œ 1

It's coming soon!

15.02.2026 12:30 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Yea, 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.

10.02.2026 10:51 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

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    πŸ“Œ 0

Render 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...

05.02.2026 20:08 β€” πŸ‘ 206    πŸ” 31    πŸ’¬ 9    πŸ“Œ 6

Yea mine apparently needed one 😁

06.02.2026 14:18 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Haha thanks
Yea shopping is a good remedy for sure!

06.02.2026 09:49 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

I can install them back
But it's a fun chore 😊

05.02.2026 21:01 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Yea he's a thorough kid for sure...

05.02.2026 20:45 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image

Mechanical keyboard meets 3yo

05.02.2026 20:28 β€” πŸ‘ 8    πŸ” 0    πŸ’¬ 5    πŸ“Œ 0

In 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.

03.02.2026 21:52 β€” πŸ‘ 5    πŸ” 1    πŸ’¬ 2    πŸ“Œ 0

Old has always been the new new

03.02.2026 14:55 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Working on some interesting stuff...

03.02.2026 12:54 β€” πŸ‘ 9    πŸ” 3    πŸ’¬ 3    πŸ“Œ 0
Preview
[css-borders-4]: `border-shape` order of shapes in the two-shape variant Β· Issue #13308 Β· w3c/csswg-drafts Currently the spec for border-shape: <<basic-shape>> <<basic-shape>> defines that the first shape is the outer one and the second shape is the inner one. I don't know if this was 100% thought out. ...

Also, let's continue this party at github.com/w3c/csswg-dr... ?

01.02.2026 20:41 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

Note 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    πŸ“Œ 0

Yea we could bikeshed something better for this for sure.

01.02.2026 19:11 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

I 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    πŸ“Œ 0

See related poll: bsky.app/profile/noms...

01.02.2026 09:26 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0