Oops, I intended to send that e-mail to the list, must have hit "Reply" instead of "Reply All".
On Fri, Apr 26, 2024 at 10:45 AM Anders Hartvoll Ruud <andr...@chromium.org> wrote: > > > On Fri, Apr 26, 2024 at 4:09 AM Domenic Denicola <dome...@chromium.org> > wrote: > >> >> >> On Thu, Apr 25, 2024 at 6:14 PM Anders Hartvoll Ruud < >> andr...@chromium.org> wrote: >> >>> Contact emails >>> >>> andr...@chromium.org >>> >>> Specification >>> >>> https://drafts.csswg.org/css-nesting-1/#nest-rule >>> >>> Summary >>> >>> CSS Nesting initially shipped with an interesting quirk that would cause >>> bare declarations that come after a nested rule to “shift”, for example: >>> >>> .foo { >>> >>> width: 100px; >>> >>> height: 100px; >>> >>> @media screen { >>> >>> background-color: red; >>> >>> } >>> >>> background-color: green; >>> >>> } >>> >>> You would think that the background-color of <div class=foo> would be >>> green here, but no, that declaration is shifted up to the main (leading) >>> block of declarations during parsing: >>> >>> .foo { >>> >>> width: 100px; >>> >>> height: 100px; >>> >>> background-color: green; /* I’m here now */ >>> >>> @media screen { >>> >>> background-color: red; >>> >>> } >>> >>> } >>> >>> This was at the time done intentionally for a mix of CSSOM and >>> historical reasons, and all implementations of CSS Nesting currently agree >>> on this behavior. However, it turns out this shifting behavior isn’t what >>> authors expect (WebKit blog post >>> <https://webkit.org/blog/14571/css-nesting-and-the-cascade/#:~:text=an%20element%20selector.-,Another%20question,-There%20is%20one>), >>> and the CSSWG now consider the decision a mistake. In October 2023, the >>> CSSWG resolved >>> <https://github.com/w3c/csswg-drafts/issues/8738#issuecomment-1768977689> >>> to not do the shifting behavior anymore, without explaining how to >>> solve the problems that would arise from that (Issue 9492 >>> <https://github.com/w3c/csswg-drafts/issues/9492>). >>> >>> One promising approach, @nest (proposed by Tab >>> <https://github.com/w3c/csswg-drafts/issues/9492#issuecomment-1779739434:~:text=Add%20a%20new%20%40nest%20rule>), >>> became the basis for my web compat investigation (Doc >>> <https://docs.google.com/document/d/1G7R-Pqk33J8ho3ad-ZpkdBIRvG2xt1ZQwQI_clPlroU/edit?usp=sharing>, >>> @chromium.org), and recently I shared some good news >>> <https://github.com/w3c/csswg-drafts/issues/8738#issuecomment-2048158814> >>> from the use-counters with the CSSWG. This restarted the discussion, and >>> while the CSSWG did agree >>> <https://github.com/w3c/csswg-drafts/issues/8738#issuecomment-2061777236> >>> on the underlying @nest approach, it also basically split people into two >>> camps: >>> >>> >>> 1. >>> >>> @nest should be a web-exposed construct. (Currently specified, per Issue >>> 8738 >>> <https://github.com/w3c/csswg-drafts/issues/8738#issuecomment-2061777236> >>> ). >>> 2. >>> >>> @nest should as much as possible be an implementation detail, >>> unobservable to the author. (Issue 10234 >>> <https://github.com/w3c/csswg-drafts/issues/10234>). >>> >>> >>> The apparent positions so far are that Firefox and Chrome support (1), >>> and Safari (+ other prominent CSSWG members) support (2). At the time of >>> writing, this is where the discussion is now. >>> >>> The CSSWG agrees that addressing the “bare declaration shift” is the >>> most important thing, and also quite urgent, since we don’t know how long >>> the window for making a change here is going to stay open. The >>> expectation >>> <https://github.com/w3c/csswg-drafts/issues/10234#issuecomment-2067746133> >>> of the CSSWG seems to be that browsers first ship @nest as it’s currently >>> specified (1), and then we possibly move towards (2) later. I find this >>> move problematic, since moving to (2) would break the API again, and even >>> if we reasonably believe it will break the API in a much less severe way, >>> it may be hard to actually prove this. >>> >>> Despite this, I have agreed to try to ship @nest, on the condition that >>> we have clear signals from Firefox and Safari that they’ll do the same. I >>> don’t yet have those signals, but I’m sending the intent “early” anyway, to >>> give this issue some visibility. >>> >> >> I saw this morning that WebKit now opposes this proposal >> <https://github.com/WebKit/standards-positions/issues/337>. Since you >> phrased this as a condition, should we consider the Intent withdrawn, as >> the condition is not met? >> > > Yes, consider it withdrawn. I am happy with this outcome for now. > > >> >>> Blink component >>> >>> Blink>CSS >>> <https://bugs.chromium.org/p/chromium/issues/list?q=component:Blink%3ECSS> >>> >>> TAG review >>> >>> None >>> >>> TAG review status >>> >>> Not applicable >>> >>> Risks >>> >>> This intent is a breaking change, with two main points of breakage: >>> >>> >>> - >>> >>> Keeping the bare declarations in place can affect the winner of the >>> cascade (the example in the introduction). This is covered by >>> CSSBareDeclarationShift >>> <https://chromestatus.com/metrics/feature/timeline/popularity/4783> >>> (0.00027%). >>> - >>> >>> Additionally, @nest will have different specificity behavior for >>> nested group rules, and this can also affect the winner of the cascade. >>> This is covered by CSSNestedGroupRuleSpecificity >>> <https://chromestatus.com/metrics/feature/timeline/popularity/4784> >>> (0.00017%). >>> >>> >>> Interoperability and Compatibility >>> >>> Gecko: No signal ( >>> https://github.com/mozilla/standards-positions/issues/1013) - Emilio >>> seems positive, but the issue is still open. >>> >>> WebKit: No signal ( >>> https://github.com/WebKit/standards-positions/issues/337) >>> >>> Web developers: No signals >>> >>> Other signals: >>> >>> WebView application risks >>> >>> Does this intent deprecate or change behavior of existing APIs, such >>> that it has potentially high risk for Android WebView-based applications? >>> >>> None >>> >>> >>> Debuggability >>> >>> None >>> >>> >>> Will this feature be supported on all six Blink platforms (Windows, Mac, >>> Linux, ChromeOS, Android, and Android WebView)? >>> >>> No >>> >>> Is this feature fully tested by web-platform-tests >>> <https://chromium.googlesource.com/chromium/src/+/main/docs/testing/web_platform_tests.md> >>> ? >>> >>> Not yet. >>> >>> Flag name on chrome://flags >>> >>> None >>> >>> Finch feature name >>> >>> None (yet). I’m not yet sure whether or not this change can be done >>> behind a flag. >>> >>> Non-finch justification >>> >>> None >>> >>> Requires code in //chrome? >>> >>> False >>> >>> Estimated milestones >>> >>> M126 >>> >>> >>> Anticipated spec changes >>> >>> Yes, a major one, as explained in the introduction: Issue 10234 >>> <https://github.com/w3c/csswg-drafts/issues/10234>. >>> >>> I am attempting to ship despite this issue, since that’s what the CSSWG >>> wants. >>> >>> Note also: Recently in the above issue, we are now considering a third >>> approach: renaming @nest to something more generic, with the intent to >>> maybe make it more useful in the future, and therefore making its >>> web-exposed presence less annoying. This shows some promise in terms of >>> unifying camps (1) and (2), so we’ll see how this plays out in the next few >>> days. >>> >> >> In the WebKit issue >> <https://github.com/WebKit/standards-positions/issues/337#issuecomment-2072349711>, >> a CSSWG Invited Expert adds context by saying >> >> > perhaps a way to guarantee that the current proposal will *not* become >> a de facto standard is to simply implement a non author-facing @nest 👿 >> It does solve the immediate CSS Nesting issue, and the lack of interop will >> force a resolution sooner rather than later, instead of letting inertia >> take over. >> > > Yes, I also had a negative reaction to that comment. > > >> This doesn't seem like an appropriate use of the Blink process. Exposing >> our users to a non-interoperable situation in order to overcome inertia or >> disagreement within a standards-body is against the values >> <https://www.chromium.org/blink/guidelines/web-platform-changes-guidelines/> >> that >> guide shipping approvals. >> > > That is not what this is. > > - The CSSWG, both camps (1) and (2), *agreed* to add @nest to the spec. > - I initially thought it obvious > > <https://github.com/w3c/csswg-drafts/issues/10234#issuecomment-2067727812:~:text=after%20even%20longer.-,To%20be%20clear%2C%20this%20issue%20blocks%20actually%20carrying%20out,-%238738.%20The%20more> > that Issue 10234 would block carrying out @nest in practice. > - But then prominent CSSWG members clarified that, no, it should > <https://github.com/w3c/csswg-drafts/issues/10234#issuecomment-2067746133> > not > <https://github.com/w3c/csswg-drafts/issues/10234#issuecomment-2069212736> > block. > - Lacking any objection from camp (2) on the above comments, I > reluctantly agreed to *try* and carry out what was the *apparent > agreement within the standards body*. > > I welcome corrections if I've misunderstood that comment, or more >> perspective if you have it to give. >> > > The problem here is that the clock is ticking, and everyone (CSSWG) agrees > that inaction is probably the worst outcome. It could lead to Issue 8738 > <https://github.com/w3c/csswg-drafts/issues/8738> not being addressed at > all, in which case we'd have *interop*, but on an API which is now seen > as a mistake. Or the outcome that worries me the most: some browser ships > something @nest-like, but we do nothing, and we end up with a *very* bad > interop issue vs. shipping @nest with Issue 10234 still open. So really I > was just trying to ensure that our users aren't exposed to the *worst* > non-interoperable situation that can arise from this. > > > +1 to this, but can you also explain why you think it's a good idea to > ship, despite finding the proposal problematic? > > I don't find the proposal problematic (what is specified now looks good), > but I'm not comfortable shipping with Issue 10234 still open. But for > reasons explained above, doing nothing makes me equally uncomfortable, > especially if the other browsers had intended to ship @nest. > > But with WebKit's opposition now crystal clear, I think we should just do > nothing for now. > > Thanks for the feedback Domenic and Mike. > > >> >>> >>> Link to entry on the Chrome Platform Status >>> >>> https://chromestatus.com/feature/5123929441304576?gate=5374099609354240 >>> >>> This intent message was generated by Chrome Platform Status >>> <https://chromestatus.com/>. >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "blink-dev" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to blink-dev+unsubscr...@chromium.org. >>> To view this discussion on the web visit >>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAKFBnUoz6xu3S_V-N8NiUMtphKmXh1_-4ozaY1WT4Ko0nXLkFg%40mail.gmail.com >>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAKFBnUoz6xu3S_V-N8NiUMtphKmXh1_-4ozaY1WT4Ko0nXLkFg%40mail.gmail.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- You received this message because you are subscribed to the Google Groups "blink-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to blink-dev+unsubscr...@chromium.org. To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAKFBnUou98dbsCej%3Dji3AgL7-esjCzvnYUByA6hG6PKzZ2vdQw%40mail.gmail.com.