Re: [csswg-drafts] [css-cascade] [css-nesting] Figure out whether we're fine with "shifting up" bare declarations after rules (#8738)

For implementation, both because as you said some things still only need declarations and because the whole codebase is kinda built/optimized around the concept of "1 rule = 1 selector + 1 array of declaration", we would need - in WebKit at least - to separate the rule into pieces at parse time (each block of declarations and each rule being a piece) and keep the original order of appearance in memory (because it's not exactly the implicit order of rules anymore). 

It should just have a performance impact at parsing time to split the rule, during style resolving for order of appearance (minimal?), and during OM (not hot) ?

Depending on how important is backward compatibility (I would say paramount for `CSSStyleRule`?), the idea was to not touch `CSSStyleDeclaration` at all (keep it a map like iterable) because it's backward compatible and needed for other stuff such as style attributes anyway.

But adding a `CSSBlockContent` parent class for all nested group rules (the most important one being `CSSStyleRule`) (note that modifying the `CSSGroupingRule` interface might also works and be less invasive)

```cpp
enum BlockElement {
  CSSStyleDeclaration, // slight preference to return block of declaration, but it could also be each property individually ?
  CSSRule
}

class CSSBlockContent {
  array<BlockElement> elements;
}

class CSSStyleRule : CSSBlockContent {
   CSSStyleAttribute style() // return the current style attribute including all the properties inside the rule but ignoring the interleaving rules
 }
```
For the padding example
```
foo {
  padding-top: 0;
  padding-left: 0;
  & { padding-top: 10px; }
  padding-bottom: 0;
  padding-right: 0;
}
```
Calling `style()` would return `padding: 0px` (which is really what this rule is about), but calling `elements()` would return 
```
[ 
 CSSStyleDeclaration(padding-top: 0, padding-left: 0);
 CSSStyleRule(...);
 CSSStyleDeclaration(padding-bottom: 0px; padding-right: 0)
]
```

-- 
GitHub Notification of comment by mdubet
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/8738#issuecomment-1971701952 using your GitHub account


-- 
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config

Received on Thursday, 29 February 2024 18:19:45 UTC