- From: Roman Komarov via GitHub <sysbot+gh@w3.org>
- Date: Thu, 21 Dec 2023 15:09:45 +0000
- To: public-css-archive@w3.org
kizu has just created a new issue for https://github.com/w3c/csswg-drafts: == [css-cascade-6] `:scope` scoping root node clarification == I did recently add a test for one `:scope` use case: https://github.com/web-platform-tests/wpt/pull/43697 When approving it, @mdubet mentioned a thing that led me to go and test how `:scope` behaves in the current WebKit implementation: > To my understanding of the spec, the inner rule selector should be `:is(:scope .b):is(:scope.x *)` with :scope representing any `.a` elements of the page. To me, the “any `.a` elements” sounds incorrect. Per the current specs (https://drafts.csswg.org/css-cascade-6/#scope-effects): > The [`:scope`](https://drafts.csswg.org/selectors-4/#scope-pseudo) selector is defined to match the [`@scope`](https://drafts.csswg.org/css-cascade-6/#at-ruledef-scope) rule’s [scoping root](https://drafts.csswg.org/selectors-4/#scoping-root). As I think it is intended, and as it is currently implemented in Chrome, the `:scope` in this case should match “The [scoping root](https://drafts.csswg.org/selectors-4/#scoping-root) [node](https://dom.spec.whatwg.org/#boundary-point-node)” (quoting [the specs](drafts.csswg.org/css-cascade-6/#ref-for-boundary-point-node)), with the “node” being important, and meaning it should not match just _any_ similar scoping root. However, the current implementation in Safari Technology Preview seems to treat it as something similar to `:where(&)` (with the specificity of a pseudo-class), here is a CodePen with an example: https://codepen.io/kizu/pen/WNmeLre <details> <summary>HTML & CSS for this example</summary> ```HTML <div class="root outer"> <div class="test">this should be lightgreen</div> <div class="limit"> <div class="root"> <div class="test inner">this should be lightgreen</div> </div> </div> </div> ``` ```CSS @scope (.root) to (.limit) { .test { background: lightgreen; } /* This should never match for our HTML structure */ :scope.outer .test.inner { background: tomato; } } ``` </details> In Chrome, we can see two light-green elements, but in Safari TP the second one is tomato. I think the way it works in WebKit is due to the misinterpretation of the spec. If this is a case, maybe the spec could be clarified? I think, the minimal clarification could be to add the “node” wording to the `:scope`'s definition, but perhaps a more verbose explanation of what this should mean in practice (could be as a note?) could be added as well. Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/9739 using your GitHub account -- Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Thursday, 21 December 2023 15:09:48 UTC