The stated answer to "Will this feature be supported on all six Blink 
platforms" is "No", but I'd expect this to be the same on all platforms - is 
that right?

Could you elaborate a bit on why this might not be doable behind a flag?

-- Dan

From: Anders Hartvoll Ruud <andr...@chromium.org>
Sent: Thursday, August 1, 2024 4:14 AM
To: blink-dev <blink-dev@chromium.org>
Subject: [blink-dev] Intent to Ship: The Nested Declarations Rule


Note: See also the previous (failed) 
intent<https://groups.google.com/a/chromium.org/g/blink-dev/c/prg4CN0eEGg> for 
@nest. All CSSWG disagreements around this are now resolved.

Contact emails

andr...@chromium.org<mailto:andr...@chromium.org>

Specification

https://drafts.csswg.org/css-nesting-1/#nested-declarations-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, and after a long debate on how to 
handle the implications of this (Issue 
10234<https://github.com/w3c/csswg-drafts/issues/10234>), the CSSWG finally 
resolved to introduce the CSSNestedDeclarations rule to solve the problem.

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.00042%).
  *   Additionally, CSSNestingDeclarations 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.00046%).

Interoperability and Compatibility


Gecko: No signal (https://github.com/mozilla/standards-positions/issues/1048) - 
"looks acceptable to me". Note that the issue Emilio mentions in his feedback 
has been resolved<https://github.com/w3c/csswg-drafts/issues/10520>.


WebKit: No signal on the position itself 
(https://github.com/WebKit/standards-positions/issues/369) - It's however 
slightly ridiculous to request a signal in this case, since this Intent carries 
out WebKit's 
proposal<https://github.com/w3c/csswg-drafts/issues/10234#issuecomment-2137832089>
 exactly.


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

We should be able to reuse the existing inspector feature for nested style 
rules.

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

M129

Anticipated spec changes


None. The last blocking issue<https://github.com/w3c/csswg-drafts/issues/10520> 
was closed this week.

Link to entry on the Chrome Platform Status

https://chromestatus.com/feature/5084403030818816?gate=5133271437148160

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<mailto:blink-dev+unsubscr...@chromium.org>.
To view this discussion on the web visit 
https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAKFBnUr%3D6F_H29JYk8C79ZnU5LdPgSuF239LYnnYmgxfrk3sGA%40mail.gmail.com<https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAKFBnUr%3D6F_H29JYk8C79ZnU5LdPgSuF239LYnnYmgxfrk3sGA%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/SA1PR00MB1438C61AD0E2A0F395290DC5C5B22%40SA1PR00MB1438.namprd00.prod.outlook.com.

Reply via email to