LGTM3, once the implementation aligns with the WG decisions, there are tests, and the corresponding spec PRs have landed.
Congratulations to all who worked on this feature! I think it's a great addition to the platform that developers will really like. On Thu, Jun 2, 2022 at 1:25 AM Daniel Bratell <[email protected]> wrote: > LGTM2 > > /Daniel > > > On 2022-06-02 10:05, Yoav Weiss wrote: > > Thanks for the update! > > LGTM1 to ship, once we're aligned with the spec and WG decisions. > > On Thu, Jun 2, 2022 at 9:25 AM Byungwoo Lee <[email protected]> wrote: > >> There is an update! >> >> 1. All the :has() related issues have been resolved in CSSWG >> <https://lists.w3.org/Archives/Public/www-style/2022Jun/0003.html>. >> (Thanks to everyone who arranged and discussed!) >> >> #6399 <https://github.com/w3c/csswg-drafts/issues/6399> Remove the >> :scope dependency from the relative selectors definition () >> -> Remove special handling of :scope in relative selectors generally >> #6952 <https://github.com/w3c/csswg-drafts/issues/6952> Consider >> disallowing logical combination pseudo-classes inside :has() >> -> Disallow nesting :has() inside :has() >> #7280 <https://github.com/w3c/csswg-drafts/issues/7280> Detecting >> :has() restrictions >> -> @supports uses non-forgiving parsing for all selectors >> #6845 <https://github.com/w3c/csswg-drafts/issues/6845> Consider >> disallowing :has() outside the rightmost compound >> -> Close no change >> #7211 <https://github.com/w3c/csswg-drafts/issues/7211> Consider >> disallowing :scope inside :has() >> -> Closed as a duplicate of #6399 (continues to be allowed inside >> :has()) >> #7212 <https://github.com/w3c/csswg-drafts/issues/7212> Consider >> disallowing :host, :host(), :host-context() inside :has() >> -> No change; :host etc. continues to be allowed inside :has() >> >> 2. Chrome implementation has already followed the above resolutions. >> Currently, :has() works as expected based on the spec and the above >> resolved results. >> The only bug that remains is about some invalidation cases for >> logical combinations inside :has() (bug 1331207 >> <https://bugs.chromium.org/p/chromium/issues/detail?id=1331207>), and >> I prepared CLs to fix the bug. >> >> >> Please let us know if there is any other considerations. >> >> Thank you! >> >> >> On 5/20/22 14:49, Byungwoo Lee wrote: >> >> Thank you for the reply! >> >> To address the issues, I've added a comment based on the latest >> communication in this thread. >> - >> https://github.com/w3c/csswg-drafts/issues/7211#issuecomment-1132432496 >> >> Hope this helps to solve the issues. >> >> 2022년 5월 19일 목요일 오전 7시 50분 52초 UTC+9에 Chris Harrelson님이 작성: >> >>> Hi Byungwoo, >>> >>> I think it would be better to resolve the referenced issues at the >>> CSSWG, including aspects Antti mentioned here, before shipping. >>> >>> >>> On Wed, May 18, 2022 at 6:05 AM Byungwoo Lee <[email protected]> wrote: >>> >>>> >>>> On 5/18/22 17:33, Antti Koivisto wrote: >>>> >>>> >>>> >>>> On Tuesday, May 17, 2022 at 9:19:03 AM UTC+3 [email protected] wrote: >>>> >>>>> >>>>> On 5/17/22 03:17, Emilio Cobos Álvarez wrote: >>>>> >>>>> On 5/16/22 11:05, Byungwoo Lee wrote: >>>>> >>>>> Anticipated spec changes >>>>> >>>>> There are 4 open issues posted on the csswg draft. >>>>> >>>>> * Remove scope dependency from relative selectors definition: >>>>> https://github.com/w3c/csswg-drafts/issues/6399 >>>>> * Disallowing logical combination pseudo classes inside ':has()': >>>>> https://github.com/w3c/csswg-drafts/issues/6952 >>>>> * Disallowing ':scope' inside ':has()': >>>>> https://github.com/w3c/csswg-drafts/issues/7211 >>>>> * Disallowing ':host', ':host()', ':host-context()' inside ':has()': >>>>> https://github.com/w3c/csswg-drafts/issues/7212 >>>>> >>>>> >>>>> It'd be great to get resolution on these issues before shipping, IMO. >>>>> >>>>> In general, given how the usefulness of this feature relies on browser >>>>> engines having predictable performance (the feature is useless if WebKit >>>>> or >>>>> Firefox get cases fast that Chrome gets slow or vice-versa), it'd be great >>>>> to document in the spec some of these limitations and the reasoning for >>>>> them. >>>>> >>>>> All the above 4 issues are essentially related to the case of ':is()' >>>>> inside ':has()'. >>>>> >>>>> The dependency between the 4 issues can be summarized as follows: >>>>> >>>>> - To avoid increasing invalidation complexity, disallow ':is()' or >>>>> ':where()' inside ':has()' (#6952) >>>>> - ':scope' inside ':has()' has the same (or worse) problem as >>>>> ':is()' inside ':has()', so disallow ':scope' inside ':has()' >>>>> (#7211) >>>>> - After ':scope' is disallowed inside ':has()', we can keep >>>>> the current definition of absolutizing with ':scope' because >>>>> ':scope' will >>>>> not be used explicitly inside the ':has()' (#6399) >>>>> - ':host', ':host()', ':host-context()' is meaningless >>>>> unless it is used with ':scope' inside ':has()' (#7212) >>>>> >>>>> >>>>> The ':is()' inside ':has()' case is the start of the 4 issues, and >>>>> most engines seems to agree to disallow the ':is()' inside ':has()' case >>>>> now. >>>>> >>>>> If so, I think it would be OK to ship to Chrome with explicit >>>>> limitations for the above cases even if those issues are not yet addressed >>>>> in the spec. How do you think about this? >>>>> >>>> WebKit does not disallow :is() inside :has() and I don't see a >>>> particular reason to. While not very useful it does not increase complexity >>>> over :not() inside :has() (which is supported and people have found >>>> useful). The only current limitation with logical combinator pseudo-classes >>>> is disallowing :has() nested inside :has() (which increases complexity a >>>> lot without enabling anything useful). >>>> >>>> antti >>>> >>>> I think I misunderstood that the option of disallowing ':is()' inside >>>> ':has()' is still alive. Also I overlooked that ':not()' inside ':has()' >>>> has the same problem as ':is()' inside ':has()'. >>>> >>>> I communicated with Antti about the above limitations, and we both >>>> agreed these: >>>> >>>> - Positive on disallowing explicit ':scope' inside ':has()' since >>>> ':has()' has an implicit scope. >>>> - Positive on disallowing ':has()' inside ':has()' since it can >>>> increase complexity a lot. >>>> - Should allow ':is()'/':where()' inside ':has() since: >>>> - we should consider ':is()', ':where()', ':not()' as a whole in >>>> terms of complexity, >>>> - those cases (especially ':not()') enables useful cases >>>> - invalidation performance will not be great but also it will >>>> not be different compared to some other worst cases >>>> - both WebKit and Chrome haven't considered some invalidation >>>> cases, (https://codepen.io/byung-woo/pen/vYdxPMa) but fixing the >>>> bug will not be very complex or difficult. >>>> >>>> Based on this consensus, I'm going to allow ':is()' and ':where()' >>>> inside ':has()' before shipping. >>>> >>>> The bug pointed at above will *not* be fixed before shipping. >>>> >>>> Since it is positive to disallow explicit ':scope' inside ':has()', I >>>> think disallowing ':host()' inside ':has()' is still reasonable. >>>> >>>> How about this? >>>> >>>> >>>> Byungwoo. >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "blink-dev" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> To view this discussion on the web visit >>>> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/b8aba55a-2ea6-4b75-bf13-f04e27661938%40igalia.com >>>> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/b8aba55a-2ea6-4b75-bf13-f04e27661938%40igalia.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >> You received this message because you are subscribed to the Google Groups >> "blink-dev" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/4af7fbf5-1bf5-4c51-b82c-6d01e2c61634n%40chromium.org >> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/4af7fbf5-1bf5-4c51-b82c-6d01e2c61634n%40chromium.org?utm_medium=email&utm_source=footer> >> . >> >> -- >> You received this message because you are subscribed to the Google Groups >> "blink-dev" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/a/chromium.org/d/msgid/blink-dev/b7f0fddb-cf49-5d4d-55ea-592f7a7578d5%40igalia.com >> <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/b7f0fddb-cf49-5d4d-55ea-592f7a7578d5%40igalia.com?utm_medium=email&utm_source=footer> >> . >> > -- > You received this message because you are subscribed to the Google Groups > "blink-dev" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web visit > https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAL5BFfXap%3DKEvkQgr2ZZRtXPNFJvm1xJfRG%2Bdje7aH56obdU0g%40mail.gmail.com > <https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAL5BFfXap%3DKEvkQgr2ZZRtXPNFJvm1xJfRG%2Bdje7aH56obdU0g%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > > -- You received this message because you are subscribed to the Google Groups "blink-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/a/chromium.org/d/msgid/blink-dev/CAOMQ%2Bw-YkwgDK0F_zMQN4R3sZECCd3vT5-y2-mvDCvM%2BGX_HhQ%40mail.gmail.com.
