RESOLVED INVALID Bug 244708
:has() selector does not accept forgiving selector list
https://bugs.webkit.org/show_bug.cgi?id=244708
Summary :has() selector does not accept forgiving selector list
Rune Lillesveen
Reported 2022-09-02 02:22:35 PDT
The :has() selector takes a <forgiving-relative-selector-list>[1], but a rule like :has(:unknown) {} is fully dropped in WebKit. There is a failing wpt test in [2]. [1] https://drafts.csswg.org/selectors/#typedef-forgiving-relative-selector-list [2] https://wpt.fyi/results/css/selectors/has-error-recovery.html?label=experimental&label=master&aligned
Attachments
Michał Gołębiowski-Owczarek
Comment 1 2022-09-02 03:48:57 PDT
Note that implementing `:has` according to the spec breaks `:has` usage with jQuery for almost all versions in use in the wild: https://github.com/jquery/jquery/issues/5098
Antti Koivisto
Comment 2 2022-09-02 05:26:15 PDT
We currently do use forgiving parsing for :has() but still fail the selector if the selector lists ends up empty. That is :has(:foo, bar) { } is valid and parses to :has(bar) { } but :has(:foo) is invalid.
Antti Koivisto
Comment 3 2022-09-02 05:26:34 PDT
I suppose this saves us from the jQuery problem.
Michał Gołębiowski-Owczarek
Comment 4 2022-09-02 10:02:28 PDT
See https://github.com/w3c/csswg-drafts/issues/7676#issuecomment-1235724730 The WebKit behavior still breaks some jQuery selectors. True, it doesn't break: ``` div:has(span:contains('Item')) ``` but it still breaks: ``` div:has(div, span:contains('Item')) ``` Maybe that latter kind of selectors is not used as often in the wild.
Michał Gołębiowski-Owczarek
Comment 5 2022-09-05 05:51:59 PDT
A full fix for future jQuery versions requires implementing bug 244808 so please have a look at this.
Radar WebKit Bug Importer
Comment 6 2022-09-09 02:23:16 PDT
Karl Dubost
Comment 7 2022-09-15 09:35:06 PDT
Note that there are discussions about this behavior being beneficial currently, as it doesn't break jQuery. See the discussion in https://github.com/w3c/csswg-drafts/issues/7676
Karl Dubost
Comment 8 2022-09-15 09:36:50 PDT
oops hit return too early. Chrome 106 copies the behavior of Safari.
Tim Nguyen (:ntim)
Comment 9 2023-10-21 14:28:06 PDT
No longer valid with bug 249914.
Note You need to log in before you can comment on or make changes to this bug.