- From: Dael Jackson <daelcss@gmail.com>
- Date: Fri, 30 May 2025 10:54:22 -0400
- To: www-style@w3.org, public-open-ui@w3.org, pastithas@google.com
=========================================
These are the official CSSWG minutes.
Unless you're correcting the minutes,
please respond by starting a new thread
with an appropriate subject line.
=========================================
OpenUI-WHATWG/HTML-CSSWG Meeting
================================
File upload control rendering should specify the button element
to use (WHATWG Issue #11130)
---------------------------------------------------------------
- When discussing the file-selector-button there was discussion
around if we should be seeking consistency for form control
pseudos and, if yes, what direction should we be consistent.
- Generally it was agreed that consistency would be a good goal and
that we should be consistent around element-backed. At the same
time, file-selector-button was seen as a candidate to special
case.
- RESOLVED: Remove the "element backed" line from CSS spec for
:file-selector-button
Other topics
------------
- The group discussed the problems with color and the wrapper
uncovered during the color swatch implementation investigation.
The initial lean was to continue down the path of removing the
wrapper.
- Usage data is still being collected to determine the impact of
changing what happens with multiple when you don't have a size
attribute.
===== FULL MEETING MINUTES ======
Agenda: https://github.com/whatwg/html/issues/11311
Present:
Joey Arhar
David Baron
Keith Cirkel
Elika Etemad
Robert Flack
Mason Freed
Alan Stearns
Anne van Kesteren
Luke Warlow
Scribe: masonf
OpenUI-WHATWG/HTML-CSSWG Meeting
++++++++++++++++++++++++++++++++
Styleable Form Controls
=======================
File upload control rendering should specify the button element to use
----------------------------------------------------------------------
github: https://github.com/whatwg/html/issues/11130
lwarlow: file input button is spec'd as an element-backed pseudo
element, but no browsers do that yet
lwarlow: if we make it an element backed, there is an interop
problem. Some pseudos work differently across browsers.
<dbaron> lwarlow: (because some browsers make it a <button> and some
make in an <input type=button>)
lwarlow: valid questions about whether we should be too prescriptive
for appearance:auto, might want consistency among pseudos
for form controls.
lwarlow: I think it should be element-backed. If you want a
dictionary definition, it's the "button" in the file input.
Want to discuss. Developers would benefit.
astearns: can I hear more about why we want consistency across
pseudos? There are a ton of them.
anne: just across form controls
anne: just to help developers keep things straight for form controls.
anne: how do input type button and <button> differ?
lwarlow: for input type=button, you can't use ::before and ::after,
whereas for <button> you can
lwarlow: other stuff, like first-letter and first-line
lwarlow: input is replaced and button isn't, but just a guess
anne: I wonder how well that's defined. Part of form control styling
being a mess.
dbaron: lot isn't defined. But before and after might make sense -
one renders its content and the other doesn't. before and
after create additional contents.
astearns: inputs don't render contents?
dbaron: yeah, renders value attribute rather than its children.
anne: if you implemented input type button with shadow tree, it'd
work that way
dbaron: might be something we can't change at this point
anne: agree, compat might be tough
<jarhar> this is where we disallow ::before and ::after on
<input type=button>:
https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/renderer/core/layout/generated_children.h;l=22;drc=4d079b53ac180ffe553e5980b104924248776b98
dbaron: general feeling that this is a hard case. We might want to
think about "hard cases make bad law" dictum.
dbaron: this is an unusual case
lwarlow: two points. One: input type button is unfortunate, and
shouldn't exist. If we can make them behave more like real
buttons, great. Spec has precedent for adding things to
buttons and not input buttons.
lwarlow: in that case, it seems obvious in this case, just make file
inputs use a real button.
<jarhar> +1
lwarlow: Two: wanting to be consistent across form controls, I agree
with that. When trying to make everything stylable, we
should make them all element-backed as much as possible.
lwarlow: most of the pseudo elements (with few exceptions) would be
separate elements. E.g. range element's thumb should be
element-backed.
<masonf> +1 to this
lwarlow: maybe some shouldn't be real elements, but I can't find good
examples. Most seem like they should be real elements.
lwarlow: so I agree, but my conclusion is that file input should be a
real button.
lwarlow: one bit is that this pseudo exists for appearance:auto, but
let's not use that as a reason to block the rest.
lwarlow: also because most browsers already agree.
keithamus: have we concluded that all of them can't be element
backed? This one (input type button) has issues, but I
haven't heard that we can't do this across the board.
lwarlow: we have to decide on what the element is for file input.
lwarlow: maybe make this a special case to allow the rest to be real
buttons and element-backed pseudos.
<fantasai> Making ::file-selector-button a special case makes sense
given the security implications
lwarlow: easier to not make it element backed. I think you can do it
consistently with element backed, and that'd be worth the
effort.
lwarlow: not good that developers need to remember more stuff. But
artificially limiting capabilities just because of that
purity isn't right.
anne: it gives browsers more freedom on how to implement things.
<fantasai> +1 anne
anne: would prefer smaller incremental steps.
anne: initial step is slightly less capable elements
dbaron: question of file button - this is a small constraint on the
potential for appearance:auto, compared to "there's a button
there".
dbaron: if we're adding a pseudo, saying it's element backed and a
real button, that's not a big deal
anne: if you only consider that pseudo, yeah. But I want to think
about all of them.
dbaron: one question: are there others in the same situation, in that
they're there in appearance:auto?
anne: choice of backing elements is relevant. We've talked about this
for <select>. Exact element to pick mattered, e.g. <dialog>
:modal pseudo class matching.
anne: I'd rather take it slowly
fantasai: I agree with Anne that we should go slowly on these. We
might learn things as we implement things.
fantasai: one question that came up was performance implications for
a shadow tree for every single checkbox on the page.
fantasai: let's try to implement and see what needs a shadow tree,
and what are the other constraints
astearns: if we go slow and find that it does make sense to add
capabilities later, what's the progressive enhancement
story? How to detect?
anne: isn't there an @supports thing?
lwarlow: file selector button with ::before pseudo element in
@supports
fantasai: let's be conservative for now, and based on experience we
can expand
fantasai: it is easier to make things element backed, rather than
going the other direction
astearns: so we keep being vague about how it's implemented. And for
now the pseudo isn't element-backed. Right?
lwarlow: status quo
dbaron: I'm still inclined in this case to make it element backed.
astearns: repercussions are small in that case?
dbaron: we should make it element backed and make it button
anne: and you don't care about consistency?
dbaron: which other?
anne: placeholder, checkmark, long list
anne: clear icon
dbaron: some of those are pretty different. Maybe file selector
button is pushing toward an edge case. Some of those are
leaf-like, and less pushing towards element backed.
<astearns> all of the other pseudos in the current draft are not
element backed
dbaron: file selector button is kind of not leaf-like but barely
keithamus: if you use CSS to style an input button, making it a
button allows ::before/after, and icons are common, so
those are useful.
anne: in theory you can use content property
keithamus: no HTML/SVG though?
anne: in theory it's supposed to be multiple things
dbaron: in practice it's not
dbaron: it's possible that's the thing that goes away if you make it
element backed, depending on definition.
fantasai: in the past, we hesitated in allowing author to manipulate
how file selector looks or operates.
fantasai: if we allow it to be styled and change the content, are we
happy?
lwarlow: they can, effectively. Via hiding it and doing what they
want. Nothing unique to file input that I know of.
fantasai: just wanted to check.
lwarlow: reasonable question, but I think it's already not an issue
anne: not ideal that you can change the appearance:auto behavior, but
hard to undo that now.
fantasai: david is right that content property is weird depending on
the kind of pseudo element. Might need to look into that.
lwarlow: ideally content property works on the new things, so that'd
be good
fantasai: would like that to work, not sure it works now.
Compat-based restrictions.
anne: can replace with icon, but not text and icon
anne: used to be in CSS generated content spec.
fantasai: opera tried to implement unrestricted 'content' on normal
elements and it broke the web. Maybe we could box in the
compat problems, but needs digging.
lwarlow: if we limit to just appearance:base mode, that might help.
Having this element backed doesn't mean the content property
needs to work in that mode.
lwarlow: is there an issue to track the content property issue?
fantasai: worth raising that question. We want content to work on all
of these pseudo elements, but there are restrictions on
what values can apply to elements - need to go remember.
fantasai: spec might not be up to date.
fantasai: if we can make it that every value works except for e.g.
the empty string (which was the compat problem)
astearns: where are we? I heard three options.
lwarlow: resolution should be to update CSS spec to say it's not
element backed, or we should update HTML to say it's a real
button and keep it element backed.
lwarlow: if we make it not element backed, we can say we could relax
that in the future.
anne: we should make them all consistent. I'm not convinced about the
leaf element concept is understandable.
anne: I'm not sure how you'd qualify placeholder for example
anne: I'd still want to say it's not element backed for now
anne: once we have initial implementations, we might be able to have
a v2
jarhar: if for base appearance, the file picker has element backed
real button. I'd not want to support two different things for
appearance:base and appearance:auto.
jarhar: maybe there's a reason to do it later. But
implementation-wise it'll be easier to do it now, rather than
later.
astearns: resistance to going full button now. dbaron, can you live
with removing element backed pseudo for now?
dbaron: yeah
<fantasai> testcase -
<fantasai> https://software.hixie.ch/utilities/js/live-dom-viewer/?%3C!DOCTYPE%20html%3E%0A%3Cstyle%3E%0Adiv%20%7B%20border%3A%201px%20solid%20orange%3B%20%7D%0A.a%20%7B%20content%3A%20url(http%3A%2F%2Fxanthir.com%2Fpony)%3B%20%7D%0A.b%20%7B%20content%3A%20%22pony%22%3B%20%7D%0A.c%20%7B%20content%3A%20%22pony%22%20url(http%3A%2F%2Fxanthir.com%2Fpony)%3B%20%7D%0A.d%20%7B%20content%3A%20%22two%22%20%22ponies%22%3B%20%7D%0A%3C%2Fstyle%3E%0A%3Cdiv%20class%3Da%3ETest%3C%2Fdiv%3E%0A%3Cdiv%20class%3Db%3ETest%3C%2Fdiv%3E%0A%3Cdiv%20class%3Dc%3ETest%3C%2Fdiv%3E%0A%3Cdiv%20class%3Dd%3ETest%3C%2Fdiv%3E
fantasai: I tested and in Safari you can replace an element with a
replaced element as content, but no strings.
fantasai: if content needs to work, we need to make them not element
backed (and we should start there) or we need to
investigate how to increase what content can do
lwarlow: do we need to change compat for real elements vs ... {I
missed this}
fantasai: if we can generally expand scope, that sounds better
lwarlow: would be nice, just don't want to block
fantasai: not sure what triggers the compat problem. Empty string for
sure, not sure what else.
fantasai: resolution not to element back them for now, and try
implementing
fantasai: based on real shippable implementation, we can consider it
then
astearns: resolution is to change the spec to say file selector
button isn't element backed?
lwarlow: yeah, and then browsers don't implement it as such
astearns: any objections?
<lwarlow> https://github.com/w3c/csswg-drafts/issues/12250
RESOLVED: remove the "element backed" line from CSS spec for
:file-selector-button
Wrapper issues
--------------
astearns: anything else?
lwarlow: structure changes between auto and base mode questions
lwarlow: color swatch implementation investigation. Webkit and
chromium - not sure how you'd go about solving this. Can't
change the DOM structure based on appearance property.
keithamus: can wrapper be display:contents?
lwarlow: yeah, maybe. Have two sibling trees and make one
display:none.
anne: have render tree ignore the wrapper
anne: generate different shadow trees. WebKit they're generated
lazily, and you could compute appearance property at generation
time
anne: why does the wrapper get in the way?
lwarlow: various code paths for color input. Maybe not relevant for
base appearance. When you change value of the color - it
reaches in to change the displayed color.
lwarlow: if DOM structure is different, you'd have to switch
lwarlow: if you have the wrapper element it might mess with margins
and padding and stuff
<fantasai> what's the wrapper?
lwarlow: unfortunate that the wrapper exists. Looked into it, and not
sure it's used, but also not sure it's removable.
lwarlow: is the wrapper exposed. It's webkit-color-swatch-wrapper
keithamus: tailwind stuff resets it
anne: should we have it then?
lwarlow: they're specifically removing its appearance to make it work
like firefox.
anne: so it does have appearance
anne: do something
lwarlow: it has some properties like padding. End result is
essentially the same as firefox. Remove padding and then
style it the same.
lwarlow: they want the color swatch.
keithamus: almost every example in github is removing it
anne: maybe remove it
lwarlow: that would make the DOM tree consistent, so easier to
implement
astearns: should this discussion have gone to an issue?
lwarlow: no
astearns: should there be an issue about removing the wrapper?
lwarlow: not in the spec at all. Maybe when there's a base appearance
we can do that
anne: deprecate/alias many of them long term. That's our hope.
lwarlow: we have webkit-color-swatch, but in most other cases, we
don't want pseudos in appearance:auto mode
lwarlow: don't need much aliasing.
anne: yeah mostly want them gone
lwarlow: future work to figure out which of these we still need.
There are many.
anne: wrote code to auto-generate about 50 of them
lwarlow: it's hard to tell when they're actually exposed.
anne: we did add capability to hide them, Tim tried. But many exposed.
Multi-select
------------
astearns: any other topics?
lwarlow: multi-select?
jarhar: I proposed changing what happens with multiple when you don't
have a size attribute - consistency between desktop and mobile
jarhar: still collecting use counter data. How often people open
select multiple on mobile.
jarhar: compat questions around changing it. Might need to lean more
on size attribute
lwarlow: discussion about what the button needs within it for multiple
jarhar: by default we should do the same thing as appearance:auto, if
the author doesn't replace the button. Text of selected
option for one selected. For 0, 2, or more, it'll say "3
items" etc
jarhar: if the author replaces the button, that works
lwarlow: selectedcontent?
jarhar: some use cases for cloning all selected options into the
selectedcontent element
jarhar: render all of the icons, for example. Or build android
firefox select multiple button with that strategy. Text for
all options, separators, etc.
astearns: all of those questions weren't part of the size attribute
discussion, right?
jarhar: correct
jarhar: things in my head until just now
lwarlow: discussion at OpenUI
lwarlow: ideas from WebKit on this?
anne: reflecting it makes sense.
anne: selectedcontent - not sure how it works with AT at this point.
Might be wonky if all of the options are in there.
anne: might get unwieldy if the options are long and the user selects
all
anne: AT might want summary instead of list
jarhar: for select multiple, keep "4 items". For single-size select,
how to announce button when author replaces it, for now AT
announces whatever is in there.
jarhar: making multiple different might be a good idea, in a11y tree
anne: existing structures to do that. With a list of 4 items, it'll
say it's a list, and starts reading but you can skip. Maybe
something similar.
astearns: sounds like that's it for today. Add for next time
Received on Friday, 30 May 2025 14:54:56 UTC