- From: Pierre-Yves Gérardy via GitHub <sysbot+gh@w3.org>
- Date: Thu, 06 Feb 2020 12:53:27 +0000
- To: public-css-archive@w3.org
While exponentially large Cartesian products can be problematic, the current spec also has drawbacks:
1) It lends itself to priority hacking `:is(.foo, a:is(b#cant-match-but#lots-of#dummy#ids))` lets one match only `.foo` with a very high priority. Not sure if it is a feature or a bug...
2) it can't be accurately polyfilled
```CSS
:is(.foo, #bar) {color: red;}
.foo {color: blue;}
```
gives a red `.foo`, but a manual expansion to
```CSS
.foo {color: red;}
#bar {color: red;}
.foo {color: blue;}
```
gives a blue one. (Expanding to multiple rulesets because `:is()` is fault tolerant, unlike the plain selector lists).
This can be mitigated per sheet, but if the definitions are in distinct sheets it will bite people.
3) The way nesting with `&` is currently implemented in SASS and Postcss also involves Cartesian products. Since `&` defers to `:is()` (well, the [spec](https://drafts.csswg.org/css-nesting/#at-nest) still has `:matches()` :-) not sure where to file a PR) porting nested sheets to native nesting will be hazardous (beyond the fact that native nesting doesn't support BEM-like `&-foo`).
If instead you went for a Cartesian product approach, (maybe with an expansion limit for sanity), these three concerns would be addressed.
-- 
GitHub Notification of comment by pygy
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/3325#issuecomment-582892410 using your GitHub account
Received on Thursday, 6 February 2020 12:53:30 UTC