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