- From: Tab Atkins Jr. via GitHub <sysbot+gh@w3.org>
- Date: Wed, 05 Oct 2022 21:09:51 +0000
- To: public-css-archive@w3.org
Pulling out for clarity, the suggested change is: * Switching <https://w3c.github.io/csswg-drafts/css-syntax-3/#consume-style-block> from a per-nested-rule logic to a parsing switch: the parser starts parsing in a "declarations and at-rules" mode, but as soon as it sees an at-rule or an `&`, it switches to an "at-rules and style rules" mode. (This at-rule does not have to be *valid* to trigger this, as otherwise it means your nested rules might not work due to an *unrelated* at-rule not being supported yet. In the Syntax spec I'll literally just trigger it upon seeing the at-keyword token.) * Nested style rules relax their requirements to just use `<relative-selector-list>`. They no longer require an `&`, at the start or anywhere. They work with the existing Sass/etc logic - if an `&` is mentioned in the selector, and the selector doesn't start with a combinator, it's used as-is; otherwise, it's assumed to be a relative selector chaining off of `&`. That is, `.foo` is interpreted as `& .foo`, `+ .foo` is interpreted as `& + .foo`, but `.foo &` is left as-is. * We still introduce `@nest`, but just as a no-op rule that can be used to trigger the "see an at-rule" switch, if your first nested selector doesn't or can't start with an `&`. CSSOM will use this if necessary when serializing, if the first rule in its .cssRules list is a CSSStyleRule. Taking the following example Sass from the original Nesting issue: ```scss .main-nav { display: flex; ul { list-style-type: none; li { margin: 0; padding: 0; } a { display: flex; padding: 0.5em 1em; } } nav& { display: block; } } ``` You'd write this in the new proposal as one of the following: ```css .main-nav { display: flex; & ul { list-style-type: none; & li { margin: 0; padding: 0; } a { display: flex; padding: 0.5em 1em; } } nav& { display: block; } } ``` or ```css .main-nav { display: flex; @nest; ul { list-style-type: none; @nest; li { margin: 0; padding: 0; } a { display: flex; padding: 0.5em 1em; } } nav& { display: block; } } ``` Which you use is up to preference. -- GitHub Notification of comment by tabatkins Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/7834#issuecomment-1268979633 using your GitHub account -- Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Wednesday, 5 October 2022 21:09:53 UTC