-
Notifications
You must be signed in to change notification settings - Fork 682
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[selectors-4] Absolutizing relative selectors against a virtual scoping root is weird and broken #2199
Comments
No, the point of absolutizing something is to make it an absolute value, rather than being relative to something else. That's what the current spec text does. The fact that absolutizing such a selector produces something that can't be perfectly reproduced in a literal form is slightly inconvenient but irrelevant. (Had we decided the other way with
That's... fine? The point is that
No, it's working exactly correctly here. Again, This is different from a non-virtual scoping root, which exists in a document with other elements outside of it, which could potentially be (incorrectly) matched by just treating the selector as absolute. Thus why you need to add
Possible but unnecessary - none of the "problems" you listed above are actually problems.
We could do this. The concept of an invisible featureless parent element didn't exist when I first wrote this text; the Shadow DOM stuff came later. Going this way would let us entirely remove this section and just rely on the standard scoping-root stuff, which is probably a good idea. |
I think it's not only a good idea but a better idea. |
Current spec prose:
There are three problems, corresponding to each point:
> foo
, it's clear that it's not representing the same thing asfoo
.:not(*)
is guaranteed to match nothing only if it's not in a negated context. If it's negated, then we match everything. So this is not a good way to represent a selector that matches nothing.foo
as a relative selector with a non-virtual scoping root is absolutized to:scope foo
. Since we don't consider it acceptable for absolutizingfoo
asfoo
in that case, then how is leavingfoo
asfoo
here considered acceptable? Either both cases need some kind of transformation, or neither of them does.Also, in every other case, an author writing out an explicit
:scope
, e.g.:scope > foo
gets the same result as as an implied one, e.g.> foo
; we are breaking that pattern here.Possible ways forward:
:scope
as matching against virtual scoping roots and let relative selectors absolutize the same regardless of the root type. (We already have a concept of “featureless” elements, we just define it as “featureless” and that a selector with it as the subject returns nothing.) Relative selectors then return to being syntactic sugar for a prefixed:scope
.I'm mostly in favor of the latter, since it seems simpler conceptually, as well as more author-friendly. There might be other solutions, but the current text is problematic imho.
The text was updated successfully, but these errors were encountered: