[Webkit-unassigned] [Bug 235451] New: [:has() pseudo-class] :has() selector invalidation issue with toggling :checked on select elements

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Fri Jan 21 12:29:42 PST 2022


https://bugs.webkit.org/show_bug.cgi?id=235451

            Bug ID: 235451
           Summary: [:has() pseudo-class] :has() selector invalidation
                    issue with toggling :checked on select elements
           Product: WebKit
           Version: Safari Technology Preview
          Hardware: Unspecified
                OS: Unspecified
            Status: NEW
          Severity: Normal
          Priority: P2
         Component: CSS
          Assignee: webkit-unassigned at lists.webkit.org
          Reporter: bramus at bram.us

I see that https://bugs.webkit.org/show_bug.cgi?id=234561 got closed as RESOLVED FIXED, but I have similar a demo that's not working properly: https://codepen.io/bramus/pen/exrYVW

When changing the value of the first dropdown, it should enable the corresponding dropdown which is a sibling. 

```html
<select>
  <option value="0">Choose …</option>
  <option value="1">Audi</option>
  <option value="2">BMW</option>
  <option value="3">Ford</option>
  <option value="4">Mercedes</option>
</select>

<select data-showwhen="1">
  <option value="0">Choose type of Audi …</option>
  …
</select>

<select data-showwhen="2">
  <option value="0">Choose type of BMW …</option>
  …
</select>

<select data-showwhen="3">
  <option value="0">Choose type of Ford …</option>
  …
</select>

<select data-showwhen="4">
  <option value="0">Choose type of Mercedes …</option>
  …
</select>
```

```css
select[data-showwhen] {
  cursor: not-allowed;
  pointer-events: none;
  opacity: 0.5;
}

select:not([data-showwhen]):has(option[value="1"]:checked) ~ select[data-showwhen="1"],
select:not([data-showwhen]):has(option[value="2"]:checked) ~ select[data-showwhen="2"],
select:not([data-showwhen]):has(option[value="3"]:checked) ~ select[data-showwhen="3"],
select:not([data-showwhen]):has(option[value="4"]:checked) ~ select[data-showwhen="4"] {
  cursor: default;
  pointer-events: auto;
  opacity: 1;
}
```

When changing the value of the first dropdown, nothing happens, although it should. Perhaps it has to do that these are select elements, and not input elements?

Forcing a style recall + repaint does not help:

```js
// Force a repaint on change
document.querySelector('select').addEventListener('input', (e) => {
        document.documentElement.className = 'reflow_' + (new Date()).getTime();
});
```


What does work is opening Web Inspector: after changing the value of the first dropdown and then focussing Web Inspector, the page seems to get restyled and pained. The confirms that the CSS itself works.

-- 
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20220121/7c01ccbb/attachment.htm>


More information about the webkit-unassigned mailing list