- From: Joey Arhar via GitHub <sysbot+gh@w3.org>
- Date: Thu, 30 May 2024 20:41:37 +0000
- To: public-css-archive@w3.org
josepharhar has just created a new issue for https://github.com/w3c/csswg-drafts:
== [css-ui] DOM/Box structure for appearance:base-select ==
Now that we have decided in https://github.com/w3c/csswg-drafts/issues/5998 to use CSS to opt into the stylable/interoperable mode for `<select>`, we should figure out what the DOM/box structure should be.
In the OpenUI design and chromium implementation, there is a closed UA shadowroot on `<select>` which gets rendered when appearance:base-select is set:
```html
<select>
#shadow-root
<!-- There are additional proprietary elements here which are only
used for appearance:auto/none mode. They aren't included in the
layout tree when appearance:base-select is set, and likewise,
the below elements aren't included in the layout tree in
appearance:auto/none mode. -->
<slot id="select-button">
<button pseudo="select-fallback-button">
<span pseudo="select-fallback-button-text"></span>
<div pseudo="select-fallback-button-icon">
<svg viewBox="0 0 20 16" fill="none"><path d="M4 6 L10 12 L 16 6"></path></svg>
</div>
</button>
</slot>
<slot id="select-datalist">
<datalist pseudo="select-fallback-datalist">
<slot id="select-datalist-options"></slot>
</datalist>
</slot>
</select>
```
Here is a mapping of which children of `<select>` will be slotted into the `<slot>`s in the structure above:
- `<slot id="select-button">`: The first `<button>` child of `<select>`. This represents the in-page button which opens the popup containing options. If the author doesn't provide a button, then `<button pseudo="select-fallback-button">` gets rendered instead. Here is an example of author HTML which would use this slot:
```html
<select>
<button>i am slotted into id=select-button!</button>
</select>
```
- `<slot id="select-datalist">`: The first `<datalist>` child of `<select>`. This represents the popup containing options, which is implemented as a popover anchored to the button. If the author doesn't provide a datalist, then `<datalist pseudo="select-fallback-datalist"> is rendered instead. Here is an example of author HTML which would use this slot:
```html
<select>
<datalist>i am slotted into id=select-datalist!</datalist>
</select>
```
- `<slot id="select-datalist-options">`: All other child elements of `<select>` which aren't assigned into the button or datalist slots. This slot is only rendered if the author doesn't provide a datalist element. Here is an example of author HTML which would use this slot:
```html
<select>
<option>I am slotted into id=select-datalist-options!</option>
<optgroup>I am also slotted into id=select-datalist-options!</optgroup>
</select>
```
All of the elements here with the proprietary `pseudo` attribute are mapped to pseudo-elements so that they can be targeted by the author in CSS, but we can discuss that later as I'd like to scope this issue down to the general structure.
I believe that WebKit and Gecko don't currently have a ShadowRoot attached to `<select>`, but I'm not sure if this whole structure I've proposed is implementable without it. I am hoping that adding a ShadowRoot to `<select>` would not impact the existing behavior of appearance:auto/none `<select>` in WebKit/Gecko.
I would like to get a resolution that the above ShadowRoot structure and slotting algorithms for `<select>` should be used in order to support appearance:base-select.
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/10380 using your GitHub account
--
Sent via github-notify-ml as configured in https://github.com/w3c/github-notify-ml-config
Received on Thursday, 30 May 2024 20:41:38 UTC