- From: Lea Verou via GitHub <sysbot+gh@w3.org>
- Date: Wed, 25 Oct 2023 17:42:44 +0000
- To: public-css-archive@w3.org
@FremyCompany Indeed. And while `article, .article` isn't realistic, things like `button, .btn` are *super* common. A particularly egregious (and yet realistic) example: file1.css ```css button.primary { background: var(--color-accent); color: white; } ``` file2.css ```css button, a.button { background: #eee; } ``` `<button class="primary">` ends up having white text and a light gray background… The root problem goes way beyond shifting up declarations in nesting or matching pseudo-elements. The way nesting currently works breaks the fundamental assumption that just adding something at the end of a selector list does not affect existing matching. And what if we just want to one-off style certain elements as buttons without adding `class="button"` to them? ```css button, a.button, #nav > li > a { background: #eee; } ``` Good luck getting *any* other background on your buttons now! So I don't think the solution I proposed in the first post would actually work, nor would `@nest`, since the problem is just as frequently author-triggered. We need to fix the root issue here. As @emilio mentioned in the call, a first avenue is to dig up and re-examine the reasons why we couldn't do dynamic specificity on `:is()`. If that is not workable, maybe explore better rewriting algorithms that avoid combinatorial explosion without flattening specificity. @tabatkins mentioned the following example: ```css #a, .a, a { #b, .b, b { #c, .c, c { } } } ``` With naïve rewriting, that would produce 3^3 = 27 selectors. In the general case of N selectors per list and M levels nesting, we have N^M selectors, hence the exponential combinatorial explosion that is mentioned. However, in terms of specificity, there are only 9 different specificities (not 27 as was mentioned in the call): - 3, 0, 0 - 2, 1, 0 - 2, 0, 1 - 1, 2, 0 - 1, 1, 1 - 0, 3, 0 - 0, 2, 1 - 0, 1, 2 - 0, 0, 3 In the general case, even in the worst case where every one of the N items in the selector list has a different specificity, the number of distinct specificities of the combination is N * M, i.e. not exponential (and close to linear, since M is usually relatively small). -- GitHub Notification of comment by LeaVerou Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/9492#issuecomment-1779758880 using your GitHub account -- Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Wednesday, 25 October 2023 17:42:46 UTC