- From: Jonathan Neal via GitHub <sysbot+gh@w3.org>
- Date: Thu, 27 Oct 2022 16:32:25 +0000
- To: public-css-archive@w3.org
If this helps, @sesse:
> Could we formulate clearly when & is inserted and when it's not...
As far as I understand it, each selector in a nested style rule would walk thru the following rules:
- If the selector does not begin with a combinator, imply a leading descendant combinator.
- If the selector does not include a nesting selector, imply a leading nesting selector.
This also matches the behavior in Sass.
**With Nesting:**
```css
.yay {
.lol {}
}
```
**With Implications, Without Nesting:**
```css
.yay {}
.yay .lol {}
```
**With Implications, With Nesting:**
```css
a {
:hover {}
}
```
**Without Nesting:**
```css
a {}
a :hover {}
```
As far as I understand it, valid nested at-rules would continue matching the same element.
**With Nesting:**
```css
section {
@container style(--yay: lol) {}
}
```
**With Implications, Without Nesting:**
```css
section {}
@container style(--yay: lol) {
section {}
}
```
> ... in a way that doesn't require lookahead to specify what is a valid rule?
I’m not sure if lookahead is relevant here, because qualified rules are not determined by semantic validity. The browser can know something is a rule, but it won’t evaluate the selector until the curly brace has started reading the block.
```css
/* this stylesheet will give the document a green background, but it will not give it any border */
%@#!WHOA-NELLY!#@%, :root { border: 100px solid; }
/* ☝️ that is a qualified rule, from the moment "%" is read */
/* ☝️ when it reaches the opening curly brace, the rule is evaluated */
/* ☝️ it will not apply the rule if it does not semantically understand "%@#!WHOA-NELLY!#@%" */
/* ☝️ this is because regular selectors “not forgiving” */
:is(%@#!WHOA-NELLY!#@%, :root) { background: green; }
/* ☝️ that is also a qualified rule, from the moment ":" is read */
/* ☝️ it will apply, even if the it does not semantically understand "%@#!WHOA-NELLY!#@%" */
/* ☝️ this is because, within :is(), selectors are “forgiving” */
```
--
GitHub Notification of comment by jonathantneal
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/7834#issuecomment-1293787153 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Thursday, 27 October 2022 16:32:27 UTC