[CSSWG] Minutes Telecon 2025-09-17 [css-env][css-ui][css-pseudo][css-forms][css-backgrounds][css-flexbox]

=========================================
  These are the official CSSWG minutes.
  Unless you're correcting the minutes,
 please respond by starting a new thread
   with an appropriate subject line.
=========================================


CSS Environment Variables
-------------------------

  - RESOLVED: Drop the fullscreen-* vars (Issue #11899: Add environment
              variables defined in WebKit)
  - RESOLVED: Publish FPWD css-env-1

CSS UI
------

  - RESOLVED: Add !important to UA stylesheet rule for the inert
              attribute (Issue #12049: The interactivity property
              should not be included in the all shorthand)

CSS Pseudo
----------

  - RESOLVED: Add element.pseudoAll that returns a list of
              CSSPseudoElement (Issue #12162: Add a property to
              retrieve plural instances of pseudo elements with the
              same selector)

CSS Forms
---------

  - RESOLVED: Go with ::clear-icon and ::reveal-icon (Issue #11845:
              Password visibility toggle)

CSS Backgrounds
---------------

  - Several folks gave an overview of issue #12132 (Using logical
      keywords in background-position shorthand with multiple
      backgrounds) and, in discussing details, realized that creating a
      through write up would help further discussions and focus around
      the various considerations necessary.

CSS Flexbox
-----------

  - RESOLVED: Add a flexbox level 2 with flex balance feature, syntax
              TBD (Issue #3070: Add flex-wrap: balance;)

===== FULL MEETING MINUTES ======

Agenda: https://lists.w3.org/Archives/Public/www-style/2025Sep/0008.html

Present:
  Jake Archibald
  Rossen Atanassov
  Tab Atkins-Bittner
  Kevin Babbitt
  David Baron
  Andreu Botella
  Yehonatan Daniv
  Elika Etemad
  Robert Flack
  Simon Fraser
  Paul Grenier
  Chris Harrelson
  Daniel Holbert
  Brian Kardell
  Jonathan Kew
  Roman Komarov
  David Leininger
  Alison Maher
  Romain Menke
  Eric Meyer
  Tim Nguyen
  Florian Rivoal
  Alan Stearns
  Miriam Suzanne
  Bramus Van Damme
  Luke Warlow
  Sam Weinig
  Sebastian Zartner

Regrets:
  Emilio Cobos Álvarez
  Josh Tumath
  Lea Verou

Scribe: kbabbitt

CSS Environment Variables
=========================

Add environment variables defined in WebKit
-------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/11899

  SebastianZ: we wanted to publish fpwd of css-env-1
  SebastianZ: we had 1 issue that is blocking publication which is
              deciding whether to add the variables defined in webkkit
              to the spec or not

  bramus: on the thread we looked into these env vars
  bramus: smfr mentioned that they were introduced back in the day but
          they are not aware of any sites that have adopted
  bramus: I ran a query on httparchive to be sure
  bramus: checking for env(fullscreen-*) in width height etc.
  bramus: result came back with 0 sites out of 16 million+ had it in CSS
  bramus: which is quite reassuring
  bramus: smfr also mentioned they are open to renaming or unshipping
          these properties
  bramus: given 0 sites matched, I think unshipping is the answer
  bramus: so not add to css-env spec
  Rossen: seems like a reasonable proposal

  ntim: I think it's reasonable
  ntim: even if there are some use cases for this env var we probably
        want to rename anyway
  ntim: for now removing it is the right call
  <kbabbitt> +1
  Rossen: let's try to resolve
  Rossen: any objections to dropping this list of env vars that are
          webkit specific from the spec?
  <emeyer> +1
  PROPOSED: drop the fullscreen-* vars

  RESOLVED: drop the fullscreen-* vars

  Rossen: SebastianZ do you have a resolution to republish?
  SebastianZ: It would be republish or publish, don't remember if we
              have one
  Rossen: any objection to publishing?
  SebastianZ: this would be level 1
  Rossen: FPWD of css-env-1
  Rossen: since this is first public I'd like to have attention and
          make sure we're ready to publish
  fantasai: as long as TabAtkins has reviewed and think it's complete,
            it's fine
  TabAtkins: yes I think we should go for it
  Rossen: objections?

  RESOLVED: publish FPWD css-env-1

  <bramus> Yay!

CSS UI
======

The interactivity property should not be included in the all shorthand
----------------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/12049

  masonf: just read it over and added a comment, question is about
          whether `interactivity` should be included in `all`
  masonf: there was breakage in chrome related to inert attribute being
          reset by `all:initial`
  masonf: best fix seems to be making that UA stylesheet rule !important
  masonf: and putting interactivity back into all
  masonf: should fix bug and keep important behaviors

  flackr: we used to allow un-inerting subtrees that were interactivity
          inert
  flackr: which is I think why this was problematic
  flackr: but now that we don't is the problem that it's on same
          element?
  masonf: yes that's the problem
  masonf: afaict the only problematic case is when inert attribute is
          on an element and on same element you do all:initial
  masonf: you probably want inert attribute to win
  masonf: I think adding !important does exactly that
  <flackr> sounds reasonable

  lwarlow: just to double check does this have any impact on modal
           dialogs?
  lwarlow: that was the other case where interactivity came up
  lwarlow: wasn't clear to me what solution was
  masonf: 2 ways it can impact modal dialogs
  masonf: direct way should not be affected, modals should stay
          uninerted with rest of page inerted regardless of all property
  masonf: reason UA stylesheet has a modal rule that sets interactivity
          auto, corner case
  masonf: it will automatically have that behavior but if author wants
          to make entire page inert, they have to contend with CSS
          rules about setting [missed]
  masonf: other than that corner case, modal dialog inertness should
          just work
  lwarlow: makes sense
  masonf: and there's a way around it if they want to do that weird
          thing
  masonf: everything I've said is my speculation about behaviors, if we
          go this route we will probably want to test it out
  Rossen: have you?
  masonf: no
  Rossen: any other feedback or suggestions?

  masonf: Proposal is to add !important to UA stylesheet rule for the
          inert attribute
  <lwarlow> +1
  <flackr> +1
  Rossen: objections?
  <dbaron> +1

  RESOLVED: add !important to UA stylesheet rule for the inert attribute

CSS Pseudo
==========

Add a property to retrieve plural instances of pseudo elements with
    the same selector
-------------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/12162

  flackr: proposal is to extend what we have in CSS pseudo to allow
          retrieving the pseudo elements that have multiple instances
  flackr: if a browser does implement CSS pseudos, this is probably a
          good thing to do because we have many pseudos that can be
          matched with generic selectors
  flackr: I agree with the proposal that it should behave a lot like
          querySelectorAll

  TabAtkins: also agree with use case and proposed ordering behavior
             flackr suggested in the issue
  <kbabbitt> seems reasonable to me as well

  fantasai: 3 different proposals, which one?
  flackr: element.pseudo is already in the css-pseudo-4 spec
  flackr: proposal would be to add a method that gets all pseudos
  flackr: first one I believe, something qSA-like
  flackr: that returns all matching pseudos
  TabAtkins: yes, the one listed under the Recommendation heading
  flackr: open to bikeshedding
  fantasai: okay with this
  fantasai: for element.pseudo would that return first?
  flackr: yes
  TabAtkins: yes, same as qS vs qSA
  TabAtkins: for bikeshedding purposes we should make it pseudoAll? not
             most grammatical but parallel naming is important
  Rossen: actually it's not bad
  <ydaniv> +1
  flackr: seems reasonable
  <JakeA> Also things like `matchAll` exist
  <TabAtkins> true!
  Rossen: any other suggestions?

  Rossen: Proposal is to add element.pseudoAll that returns a list of
          nodes
  Rossen: objections?
  <JakeA> List of `CSSPseudoElement`
  flackr: yes, not list of nodes, list of CSSPseudoElement

  RESOLVED: add element.pseudoAll that returns a list of
            CSSPseudoElement

  ntim: I think element.pseudo was resolved on different issue
  Rossen: if you feel we need to discuss more, bring up that other
          issue or open a new one
  <flackr> +1 we'll keep the names in sync

CSS Forms
=========
  scribe: TabAtkins

Password visibility toggle
--------------------------
  github: https://github.com/w3c/csswg-drafts/issues/11845

  kbabbitt: in April we resolved to add a pseudo-element for password
            visibility toggle on input type=password
  kbabbitt: left name to be bikeshedded
  kbabbitt: have been some discussion in the issue, especially about
            naming form control pseudos in general
  kbabbitt: as a general principle, use the word "icon" to indicate
            graphical indicators, "button" to indicate clickable
  kbabbitt: from that, suggests we call it ::reveal-button
  kbabbitt: and as an additional proposal, should rename the other
            Forms 1 pseudos to be consistent with this pattern
  <lwarlow> +1
  <TabAtkins> +1

  fantasai: things get a little ambiguous with, sya, ::picker-icon,
            which is both clickable and an icon
  fantasai: do we really want to be so clear about which is a button
            and which is an icon in our naming?
  kbabbitt: I think there is some inconsistency in the naming, yes in
            some cases the picker would be a button in others it's an
            icon...
  fantasai: I think that would be confusing for authors, yeah. should
            be consistent
  fantasai: but that brings up whether we want to be so explicit in the
            names, or if we do want to lean into being ambiguous about
            whether it's an indicator or button
  kbabbitt: personally I'd lean toward consistency when possible

  lwarlow: I've been thinking about this for a bit, think I mentioned
           the step-up/down buttons
  lwarlow: ideally something that's a button we'd call a button, I think
  lwarlow: there are some weird cases tho
  lwarlow: in a select element the picker icon is an icon, it's not
           actually a button. it's not really clickable, the select
           itself is what's clickable. so picker-icon makes sense there
  lwarlow: but in a date input, the picker would be an actual button;
           you can click on the element but only the button actually
           summons the picker
  lwarlow: file-selector is the other case - it looks like a button,
           acts like one. but really the whole element is clickable. so
           arguably that's not a "button" either....
  lwarlow: agree that making authors write ::picker-icon sometimes and
           ::picker-button sometimes isn't ideal
  lwarlow: but for new names, I do recommend having button in the name
           if it's a button
  fantasai: for date picker, it depends on the platform, some pop it
            when you click anywhere
  fantasai: so there's some ambiguity on whether it's an icon or button
  <lwarlow> We'd probably want to specify that though ideally?
  fantasai: we have things that act differently between controls, and
            things that act differently on a single control depending
            on time or platform
  fantasai: so that raises the question - if these aren't really two
            distinct categories, should we even lean into categorizing
            everything, or lean away and not categorize them?

  masonf: was gonna say a lot of that too
  masonf: agree it's very ambiguous
  masonf: picker-icon was chosen because it was indeed not a button
          (the whole control is)
  masonf: so I'd lean towards using -icon for everything because
          whether it's a button or not is ambiguous, but it's always an
          icon in some way

  ntim: I lean toward simplicity, like ::step-up (no suffix)
  ntim: but in this case I think simplicity would be using the -icon
        suffix everywhere
  ntim: making the distinction is really hard, yeah

  ydaniv: from what I know in UIs, button is something you activate
          with a click/keypress, and icon is activated by hover/focus,
          so I lean towards button
  lwarlow: wanted to push back on "it's always an icon", not sure
           that's always true
  lwarlow: file-selector-button is actually a button, not an icon.
           step-up/down can be arguable, but they're rendered as a
           button. does depend on stylesheet to some extent
  lwarlow: I do agree ::reveal should have a suffix, ::reveal on its
           own isn't clear enough
  lwarlow: it even reads more as a pseudo-class on its own, not right
           as a pseudo-element
  lwarlow: so I'd be okay with ::reveal-icon if the group likes it. but
           I'd be a bit more against ::step-up-icon
  <JakeA> `revealer`?
  <ntim> I like ::reveal-icon because it also opens the possibility for
         other things than just an interactive button
  kbabbitt: I just need a name so I can write down a spec, can explore
            the more general case in another issue. fine with either
            icon or button
  <lwarlow> It's not an icon with words though... it's just some text
            in all 3 engines.

  fantasai: we should focus on the author experience and what they'll
            have to memorize, and how we can reduce the memory load. so
            staying away from categorizing too much is best
  <ntim> +1 to fantasai
  <lwarlow> +1 I'd be okay with that
  fantasai: for this issue, seems like we might just say ::clear-icon
            and ::reveal-icon (and leave the other pseudos alone for
            now)
  <TabAtkins> +1 for me too
  <kbabbitt> +1 I'd be happy with that
  <masonf> +1

  RESOLVED: Go with ::clear-icon and ::reveal-icon

CSS Backgrounds
===============

Using logical keywords in background-position shorthand with multiple
    backgrounds
---------------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/12132

  weinig: basically this boils down to a discussion about how we should
          expose these things
  weinig: and whether we need a special wording or special value to
          represent the fact that this is a logical property
  weinig: in a way that's not usually done
  weinig: not sure there's a resolution to be had yet, probably needs
          specific spec text proposal
  weinig: before there's motion forward

  fantasai: I think we need to hash out some specifics
  fantasai: would it be useful to introduce people?
  TabAtkins: I would find it useful to have a quick summary
  Rossen: yes especially if we want to resolve

  weinig: problem statement is that we want to add the logical versions
          of background-position
  weinig: background-position-block, -inline
  weinig: because these are list properties, you can wind up in a
          position where it's not clear ...
  fantasai: the issue is that, in background-position, we have some
            logical, some physical, some both ways of specifying
            position
  fantasai: we also have longhands for background-position
  fantasai: x and y, and probably want block and inline longhands
            as well
  fantasai: mapping these two together ends up requiring some kind of
            way of tracking which was specified later in the cascade
  fantasai: also requires a way to represent computed value of each of
            these things
  fantasai: for the first problem, proposal was to add a `defer` keyword
  fantasai: the author would usually not use, but implementation would
            use to track each individual longhand whether it's setting
            something
  fantasai: or the other property is setting something
  fantasai: if both say defer, resolve to initial value
  fantasai: in terms of representing computed value, there's been some
            discussion, if you set background-position-inline to
            start-edge, what is value of background-position-x and y
  fantasai: latter half of discussion is about tracking that
            information about which side you're setting from
  fantasai: into computed value
  fantasai: and then serializing out the appropriate depending on which
            longhand it came from

  weinig: that sounds right. it has to do with the fact that the
          logical properties usually have e.g. margin: left maps very
          clearly to inline start or end always
  <Rossen> margin-left maps to start in lt-td only
  weinig: but because background takes a 2-value thing there's no clear
          mapping from e.g. background block to regular background
  weinig: and so we need additional state
  fantasai: for example background-position-x 0% has same meaning as
            background-position-inline 100% in rtl
  fantasai: with other shorthands we have all 4 sides and each one maps
            exactly and computed value space is the same
  fantasai: so you can have a single value
  fantasai: whereas for these properties, in that example you can't
            return 0% because that would give you the opposite
  <dbaron> The main problems seems to be that there are *both* logical
           keywords *and* logical sub-properties, and it's a list
           valued property that allows mixing logical and physical
           within the list.

  SebastianZ: what fantasai said is what I posted in one of my later
              comments
  SebastianZ: there are some examples regarding physical and logical
              properties and how to handle them
  SebastianZ: idea would be to add a new defer keyword for that
  SebastianZ: like fantasai said
  SebastianZ: if you set background-position left bottom
  SebastianZ: and later read background-position-inline
  SebastianZ: question is what you get back
  SebastianZ: idea was to add a defer keyword
  SebastianZ: was wondering if we need that keyword or if we can
              resolve that you use start or end in those cases
  fantasai: I think weinig is right, we need to do a thorough writeup
            of details
  weinig: issue contains a lot of examples, work through a lot of edge
          cases
  weinig: sticking point was that the way logical properties are
          currently defined has certain assumptions about being able to
          map directly
  weinig: either we need to change those base assumptions or add some
          additional state here that works with that structure
  weinig: ultimately we can work through all of the examples to see
          they do make sense, and you can map them
  weinig: we just need the foundational logic to be updated to allow
          this more complicated mapping
  weinig: we need to write something up, I can try to do that
  Rossen: wondering if we should continue that discussion in the issue
  fantasai: yes
  fantasai: that's the next step
  <dbaron> I think another question is whether the logical
           subproperties are actually desirable, or whether we should
           just add new logical keywords.

CSS Flexbox
===========

Add flex-wrap: balance;
-----------------------
  github: https://github.com/w3c/csswg-drafts/issues/3070

  TabAtkins: we've been wanting some way of balancing flex lines forever
  TabAtkins: Ian spent some time putting together an experimental
             implementation
  TabAtkins: available in chrome 138 with experimental web platform
             features
  TabAtkins: quick description of what we've proposed, details are
             malleable:
  TabAtkins: syntactically this is just an addition to flex-wrap
             property
  TabAtkins: balance keyword with optional integer with # of lines to
             balance
  TabAtkins: behavior is: figure out how many lines flexbox will have,
             or estimate with basic layout
  TabAtkins: and distribute in balanced fashion instead of greedy
             fashion
  TabAtkins: current behavior is to use same size as for line breaking
  TabAtkins: potentially other ways to balance things nicely across
             multiple rows
  TabAtkins: minimum lines feature, integer, is required for cases
             where it's a column flexbox where available space is
             infinite and you would never wrap
  TabAktins: in wikipedia bibliography, currently done using expensive
             manual code
  TabAktins: could instead be done with a flexbox with 2 columns
  TabAktins: ends up being a simple feature overall
  TabAktins: precise details we can continue to work out
  TabAktins: we're asking to be able to add this to flexbox 2
  fantasai: we have several things that should go into flex 2
  TabAtkins: this is mature, we can open spec with it
  <iank> Received very positive developer feedback -
https://bsky.app/profile/una.im/post/3lpcjcjn4w22r
  fantasai: how gaps interact with flex algorithm

  TabAtkins: request is open a new draft, flexbox 2, editor's draft,
             include at least this flex-wrap balance feature
  TabAtkins: and at editor's discretion whatever else we want to put in

  fantasai: I think having a flex-wrap balance feature is a good idea
            and we should do it
  fantasai: some discussion about having balance stuff on item-pack
            instead of flex-wrap
  fantasai: in any case you probably want to split out whether you're
            wrapping and what direction from the style
  fantasai: just like we do for text balancing
  fantasai: the kind of, how you prefer to place items is a separate
            control
  fantasai: so I think it should be a separate property
  fantasai: last time we talked about it, we talked about item-pack:
            balance
  fantasai: happy with that or we can consider other things
  TabAtkins: we need to resolve those remaining items questions sooner
             rather than later but I don't want to take one right now
  fantasai: in any case it should be a separate property
  TabAtkins: happy to figure that out in the draft
  TabAtkins: not looking to ship tomorrow, but ready to explore

  Rossen: proposal is to open new ED for flex level 2
  Rossen: and flex-wrap balance, and continue to work on it there
  Rossen: objections?
  fantasai: happy to take a resolution to add a flex balance feature as
            long as it's a separate property
  TabAtkins: happy to have flex balance feature, syntax TBD
  <dholbert> I'm a little uneasy about the "leave how to balance up to
             implementations" part; want to be sure the behavior is
             reasonably specified
  <dholbert> but not objecting to the feature in general
  Rossen: any objections?

  <fantasai> PROPOSED: Add a flex wrap balance feature, as a property
             separate from flex-wrap
  TabAtkins: syntax TBD as part of wrap up of item discussion
  fantasai: but put something in spec right?
  TabAtkins: yes, doesn't matter what yet, don't need to resolve on
             syntax yet
  TabAtkins: don't want to resolve on syntax until we have the wider
             discussion
  fantasai: draft something into ED but draft as separate property
  TabAtkins: we don't need that as part of the resolution
  Rossen: syntax TBD is good enough, we'll figure out what that
          syntax is
  fantasai: happy to leave syntax TBD, would like it to not be flex
            [missed]
  TabAtkins: will mark it off as flex bikeshed

  RESOLVED: Add a flexbox level 2 with flex balance feature, syntax TBD

Received on Thursday, 18 September 2025 23:51:48 UTC