[CSSWG] Meeting Minutes 2025-07-16 [css-cascade][css-forms][css-color][cssui][css-view-transitions][css-animations]

=========================================
  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 Cascade
-----------

  - There were no concerns about the resolution on issue #9740 (`&`
      matching inside the `@scope`, and its interaction with `:scope`)
      from the breakout.

CSS Forms
---------

  - RESOLVED: appearance: base-select can be used to opt listbox
              selects into base appearance. control of listbox and
              multiple rendering will be improved in html (Issue
              #12468: Should `appearance: base-select` work on listbox
              selects? (`<select size>`/`<select multiple>`))

CSS Color
---------

  - Next steps for issue #10372 (Mitigating fingerprinting for
      AccentColor/AccentColorText) is to discuss the magnitude of the
      fingerprinting concern with security and privacy teams and then
      move on to creating draft text.

CSS UI
------

  - RESOLVED: when caret is past the end of the line, attempt to show
              it even if it overflows. Browser may clip it or
              reposition it (Issue #10289: caret-shape: block/
              underscore and overflow)

CSS View Transitions
--------------------

  - RESOLVED: compute missing content-visibility information as we
              iterate the tree while capturing (Issue #10773: Elements
              with content-visibility in new Document)

CSS Animations
--------------

  - RESOLVED: Add / delimiter to syntax for animation-trigger (Issue
              #11948: Add / separator before animation-trigger exit
              range)
  - There were several concerns raised about the design of the solution
      for issue #12336 (Move scroll and event animation triggers to
      independent namespace) and so discussion will return to github.

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

Agenda: https://lists.w3.org/Archives/Public/www-style/2025Jul/0007.html

Present:
  Rachel Andrew
  Joey Arhar
  Rossen Atanassov
  Tab Atkins-Bittner
  David Awogbemila
  Kevin Babbitt
  Stephen Chenney
  Keith Cirkel
  Emilio Cobos Álvarez
  Yehonatan Daniv
  Elika Etemad
  Robert Flack
  Paul Grenier
  Brian Kardell
  Alexander Kyereboah
  Roman Komarov
  David Leininger
  Alison Maher
  Romain Menke
  Florian Rivoal
  Noam Rosenthal
  Miriam Suzanne
  Josh Tumath
  Lea Verou

Regrets:
  Daniel Holbert
  Jonathan Kew
  Bramus Van Damme

Scribe: kbabbitt

CSS Cascade
===========

`&` matching inside the `@scope`, and its interaction with `:scope`
-------------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/9740

  miriam: we discussed this in the scope breakout session
  miriam: idea is changing exactly what & refers to when directly
          inside a scope rule
  <TabAtkins> +1 to this resolution, based on reading Miriam's post
              summarizing the decision
  miriam: goal is to match how & works elsewhere
  miriam: thinking about it slightly differently than before
  miriam: existing spec says & directly inside scope refers to selector
          in scope prelude
  miriam: would get its specificity and match any elements that target
          that selector
  miriam: but that feels different from how & works in other context
  miriam: it would match exactly the same things it would match with
          bare declarations in that same place
  miriam: so adding & doesn't change what's matched and doesn't change
          specificity
  miriam: proposal here is to say, in order to get that same behavior
          in a scope rule, bare declarations match :where scope which
          has 0 specificity and only matches single scope root element
  miriam: & should do the same thing in that context
  miriam: match where scope, maintain 0 specificity, match only scope
          root

  astearns: you wrote an excellent blog post going through this which
            definitely helped me
  astearns: questions? concerns?
  <bkardell> link?
  <TabAtkins> https://css.oddbird.net/scope/parent-selector/

  astearns: purpose of bringing this back to agenda is to validate what
            we resolved on breakout
  astearns: if there are no concerns we'll have resolution stand
  <JoshT> +1
  <lea> +1 to this
  [no concerns raised]
  <ydaniv> +1

CSS Forms
=========

Should `appearance: base-select` work on listbox selects? (`<select
    size>`/`<select multiple>`)
-------------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/12468

  lea: recently appearance base-select shipped in chrome for
       customizable select
  lea: however current impl doesn't do anything for listbox selects
  lea: and there's nothing in the spec around this
  lea: there's a picker-icon pseudo which theoretically doesn't apply
  lea: only mention of listboxes is an unrelated mention around ?
       pseudo classes
  lea: question is, should appearance: base-select apply to listbox
       select
  lea: one idea I had is that, even though we have consensus that it
       should, I wonder if we introduce a different value for this
  lea: we could use the css property to switch between the two modes
  lea: right now there's no css way to switch
  lea: internal parts and dom are so different between the two modes,
       I'm not sure how it would work without such a toggle
  lea: pseudo elements are different
  lea: from an architectural point of view it was a mistake that the
       same element does both
  lea: and things that have nothing to do with it are used to switch
       between them
  lea: most modern UIs implement dropdowns from scratch so they can do
       multi select dropdowns
  lea: perhaps if we had a separate value it could fix all these
       problems at once
  lea: so I'm not convinced we should have appearance: base-select
       apply to listbox mode
  lea: wonder if we should have a separate value
  lea: very clear we need a way to style listboxes, not sure if it
       should be base-select or a different value

  keithamus: my understanding is that popover element that would
             provide list of options
  keithamus: that can be styled as display:block which would make it
             part of page flow
  keithamus: then you'd have a listbox style control
  keithamus: overlay property would be the one
  keithamus: so you can put it as part of page flow rather than as
             popover
  keithamus: does that satisfy the query?
  lea: not sure I understand the proposal
  keithamus: your query is between the two modes, and I don't think
             they're modes, I think the pseudo elements are the same
             but you'd effectively style the dropdown so it would be
             part of the page
  lea: you'll still have the selected content element
  keithamus: you can omit that or display: none it
  lea: or we go the opposite way from listbox from dropdown which is
       more commonly needed
  keithamus: two modes are, picker element is either popover or now
  keithamus: and selected content is either displayed or not
  lea: downside of that is you need to implement yourselves how
       dropdown would look for listbox appearance
  lea: you have a listbox and you have to write several css rules to
       make it look like a dropdown
  keithamus: one point of base-select is ... [missed] ... you'd have
             some default styling
  keithamus: it should be consistent, whether it would be a matter
             of ... I'm curious why we would need to put effort
             into .... why an author would need to put effort into
             making it look native
  <miriam> are we talking about the same thing as 'listbox'? It seems
           to me Lea is talking about select multiple, and Keith is
           talking about select with datalist?
  lea: not saying they want to make it look like listbox widget, saying
       they want to make it look like a listbox ... not just a matter
       of a single css rule, would take several
  lea: when you start form a dropdown, all of the css you have to write
       is to style it
  lea: when you start from a listbox and want to make it look like a
       dropdown, now you have to write a bunch more rules
  keithamus: only difference is form control that opens the picker is
             the thing that is rendered on the page in a picker mode
  keithamus: in a listbox mode, the picker is rendered on the page and
             the button thing is not
  keithamus: so you're just display:none'ing on the button
  keithamus: and setting overlay none on picker
  keithamus: overlay auto on picker and display block on button
  keithamus: then you can have all your styles separate and they can be
             consistent
  keithamus: but maybe joey has some better answers here

  jarhar: I've been working on an impl of this in Chromium
  jarhar: I believe that the different modes about listbox and popup
          and single and multiple select should be controlled with
          existing html attributes
  jarhar: size=1 makes popup, size>1 makes it listbox
  jarhar: different modes should be controllable with
          appearance:base-select
  jarhar: I don't think we need other values for appearance
  jarhar: I don't think we need to control multi select or popup
          with css
  jarhar: it can be done with HTML
  jarhar: right now there are some issues like you can't have select
          multiple with popup on desktop
  jarhar: on mobile you can't get a listbox
  jarhar: these are things I'm working on
  astearns: jarhar you're saying the answer to the original question in
            the issue is, yes it should
  astearns: answer to lea's new question is "no"
  jarhar: correct
  lea: the issue is not whether multipleness should be controlled by css
  lea: of course it should be controlled by html
  lea: problem is today when you specify multiple in select you always
       get a listbox, can't get a dropdown
  lea: presumably base-select would get you a styleable dropdown
  jarhar: planning on separate change so that size=1 on select ? will
          give a popup
  lea: regardless of whether you specify base-select? don't know if
       that's web compatible
  jarhar: correct, will find out if it's web compatible
  <fantasai> jarhar++

  lea: some data points we're missing for a decision here is how much
       code would be needed to make a decision here
  lea: would be helpful if keithamus could write snippets in issue to
       show what switching would look like
  lea: maybe I'm wrong and it's just a couple css rules and it'll be
       fine
  <JoshT> yes, some example code would be really helpful!
  astearns: I think that makes sense, we should take it back to the
            issue and go through some example code
  astearns: thank you jarhar

  lea: could we have a resolution that we want listboxes to be
       stylable, with the exact syntax TBD
  astearns: [discussing what resolution we could take]
  <chrishtr> +1 to going with joey's approach and then reconsidering if
             it is found web-incompatible
  lea: I'm fine with that
  astearns: we often take resolutions hoping something will be web
            compatible
  astearns: jarhar could you summarize resolution for this issue that
            you plan to implement?
  <jarhar> proposed resolution: appearance: base-select can be used to
           opt listbox selects into base appearance. control of listbox
           and multiple rendering will be improved in html
  astearns: does that look okay to you lea?
  lea: I think so, also concept that size is distinct from whether you
       want a listbox or dropdown
  lea: how long the dropdown is is a CSS thing but that's secondary
  astearns: let's go with proposed resolution for now
  astearns: any objections?
  <keithamus> +1

  fantasai: reason we use base-select here was to allow for progressive
            opting in more controls
  fantasai: and avoiding compat issues
  fantasai: are concerned about that, or are other controls shipping ?
  jarhar: I'm personally not concerned about using same keyword
  jarhar: but I'm open to suggestions
  fantasai: ok we can go with this
  <chrishtr> I think it's fine for both to use base-select. We can
             reconsider if it is found to be web-incompatible.

  RESOLVED: appearance: base-select can be used to opt listbox selects
            into base appearance. control of listbox and multiple
            rendering will be improved in html

CSS Color
=========

Mitigating fingerprinting for AccentColor/AccentColorText
---------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/10372

  kyerebo: I'm Alex, recently taken over implementation of accent-color
           in Chromium
  kyerebo: summary of issue is: we resolved to add support for accent
           color keyword using actual system's accent color
  kyerebo: have a blocking privacy concern regarding user's accent color
  kyerebo: and what we currently have in spec is that we're leaving up
           to UA to mitigate privacy risks by returning fixed values
  kyerebo: which don't reflect actual customization or choices made by
           user
  kyerebo: in Chromium we're considering exposing accent color only in
           installed applications
  kyerebo: discussion that fingerprinting surface was not significant
           enough to warrant complexity
  kyerebo: some concern about using in form controls or native keywords
  kyerebo: wanted to get some thoughts around whether language in spec
           is sufficient
  kyerebo: and whether fingerprinting surface is a real concern

  jarhar: don't have anything to say about spec text. in terms of
          whether this is a real privacy issue, I'd be happy to ask
          that question again and bring in chrome security and privacy
          people
  jarhar: not an expert but that seemed like a concern to me
  jarhar: if you have evidence that it's not a big issue please let me
          know I'd be happy to help

  astearns: other comments or questions?

  alisonmaher: how these compare to other system colors - on Windows,
               accent color can be customized
  alisonmaher: which increases fingerprinting risk
  alisonmaher: but other system colors are also customizable
  alisonmaher: raises question, do users customize this more than other
               system colors?
  alisonmaher: but at least on windows, all system colors are
               customizable

  lea: on OSX, the highlight color is customizable but accent color
       isn't
  lea: it seems we currently do expose highlight color
  lea: so that's introducing more entropy
  lea: since it can be customized, so it doesn't seem any worse than
       what we have right now
  lea: once we implement the resolution that accent color resolves to
       value of accent-color property, this becomes less of an issue
  lea: because most pages will set accent-color anyway
  astearns: whether or not authors set the accent-color, doesn't really
            affect the fingerprinting risk
  astearns: because someone who is interested in getting more
            fingerprint surface won't set accent-color
  lea: I was thinking that you would need control over whole page for
       that kind of fingerprinting
  astearns: maybe we need more info from privacy folks
  <lea> (and also once it reflects the value of `accent-color` in
        theory extensions or user CSS can override and the page
        wouldn't know)

  alisonmaher: does the current spec text suffice? leaves it up to UA
               to mitigate these risks
  alisonmaher: or do we need more specific text here for accent color
               and accent color text in general?
  astearns: don't know but it seems an interoperable mitigation would
            be better
  alisonmaher: definitely want interoperable, maybe we need spec text
               for that
  jarhar: I guess we can follow up with some more security and privacy
          discussions outside WG

  kyerebo: alisonmaher and I put this on agenda, jarhar is the
           resolution here to have further talks on security and
           privacy to see if fingerprinting is significant
  kyerebo: and get text for interoperable resolution?
  jarhar: sure
  jarhar: if things are already exposed as mentioned earlier, that can
          be used to reexamine how bad fingerprinting is
  jarhar: I think that makes sense
  astearns: I think that makes sense as well
  astearns: get expert opinions, and based on those, are there changes
            to spec to say you can return real color
  astearns: or here's what you need to do to hide real color,
            interoperable either way
  astearns: who can take this to privacy people?
  alisonmaher: kyerebo and I can figure that out
  astearns: anything more?

CSS UI
======

caret-shape: block/underscore and overflow
------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/10289

  florian: the resolution might be just fine but I think we considered
           a too narrow question
  florian: would like to make sure we still agree when we consider
           whole question
  florian: this was raised in the context of block and underscore caret
  florian: but we need to consider spec for any caret
  florian: question was what to do when the caret overflows but we're
           assuming in our discussion that the text doesn't
  florian: so we wondered what happens if only caret overflows
  florian: but this is not necessarily true, text itself might overflow
           as well
  florian: so we said that when the caret is past the end of the line
           we should show it anyway even if it overflows
  florian: and there may be some intermediate
  florian: but if you think of text which overflows line and caret at
           end of text
  florian: and whole thing is happening in box with scroll or hidden
           overflow
  florian: position of caret is outside the box somewhere after the
           text you can't see
  florian: not just about clipping at this point, may also be about
           positioning
  florian: for example in firefox, if you have text that's longer than
           line, overflowing and hidden
  florian: and caret at end of that
  florian: caret is shown at visible end of line, not where text ends
  florian: and other browsers, in that situation, caret isn't shown
           at all
  florian: not showing it at all is a kind of clipping, and we might
           say we want to clip
  florian: but firefox does more than clipping, it repositions caret to
           where you can see it
  florian: I think the general idea is you should show caret, you might
           need to clip, is reasonable, but you might need to do more
           than clip and reposition to make it visible
  florian: I suspect we want to keep this ? for now at least, though if
           we want to insist you have to show it, I don't mind
  florian: I think we should not ban firefox behavior at least

  schenney: support the view of not banning it
  schenney: from my perspective firefox's ui gives some sign that
            editing is happening
  schenney: that's a choice, chrome chooses not to, that's a choice
  schenney: agree this should be open to browser interpretation
  Rossen: I like the approach of starting with a "may" and requiring
          more strictly later
  Rossen: for interop
  florian: Proposal: when caret is past the end of the line, attempt to
           show it even if it overflows. Browser may clip it or
           reposition it
  Rossen: additional feedback or objections?

  RESOLVED: when caret is past the end of the line, attempt to show it
            even if it overflows. Browser may clip it or reposition it

CSS View Transitions
====================

Elements with content-visibility in new Document
------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/10773

  noamr: this is a lifecycle issue with view transitions
  noamr: don't capture view-transition if it's not relevant to user
  noamr: away from viewport, content-visibility auto
  noamr: issue with cross document view-transition
  noamr: might not know yet if an element is close to viewport or not
  noamr: also if element were added between starting view-transition
         and activating it
  noamr: original idea was to play around with order in rendering
         lifecycle but that caused issues
  noamr: proposal on issue now is that when we go through the tree of
         elements to see what needs to be captured
  noamr: if we didn't compute content-visibility for an element, then
         we do
  noamr: view-transition algorithm iterates over all elements anyway
  noamr: to find capture
  noamr: so if it finds an element that's new and we don't know if it's
         captured
  noamr: compute what we need for it at that point
  noamr: wouldn't change behavior in chromium, would probably fix a bug
         in firefox
  Rossen: any feedback?
  Rossen: all for fixing bugs, not hearing anyone from gecko side
          express concerns

  noamr: Proposed: compute missing content-visibility information as we
         iterate the tree while capturing
  Rossen: objections?

  RESOLVED: compute missing content-visibility information as we
            iterate the tree while capturing

CSS Animations
==============

Add / separator before animation-trigger exit range
---------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/11948

  ydaniv: context: talking about animation behaviors
  ydaniv: more specifically scroll triggered animations
  ydaniv: what we have is animation that triggered when an element
          enters view and it has a view timeline
  ydaniv: and specified range
  ydaniv: set the actual active range, when that range is entered,
          animation is triggered based on behavior of trigger
  ydaniv: if that behavior is set to repeat, then when the active range
          is exited, the behavior is to reset the animation
  ydaniv: that can create visual jank
  ydaniv: as we exit range, after user entered default range, then
          range can be expanded to exit range
  ydaniv: can be specified by developer
  ydaniv: in order to increase range where element needs to exit
  ydaniv: then the author can avoid this visual jank
  ydaniv: this is why you have a default and an exit range
  ydaniv: because these are two values that are the same syntax
  ydaniv: and you have several ways of specifying them
  ydaniv: for example one value, two values, three values, four values
  ydaniv: it can be ambiguous whether you wanted to specify exit range,
          or use one value for entry and one for exit
  ydaniv: proposal is to add / delimiter

  Rossen: any feedback?
  <TabAtkins> +1 to the /, I think
  <fantasai> +1
  <flackr> +1
  flackr: seems reasonable
  Proposal: Add / delimiter to syntax for animation-trigger
  Rossen: objections?

  RESOLVED: Add / delimiter to syntax for animation-trigger

Move scroll and event animation triggers to independent namespace
-----------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/12336

  DavidA: on the topic of animation triggers
  DavidA: as mentioned for scroll based triggers we have a list of
          properties that authors can use to specify conditions
  DavidA: under which triggering happens
  DavidA: some work is also being done on different kind of triggers
  DavidA: based on events
  DavidA: we're considering that not all properties that apply to
          scroll based triggers apply to event based triggers and
          vice-versa
  DavidA: we're considering change to format of properties we have in
          spec currently
  DavidA: currently we have one animation-trigger shorthand
  DavidA: that specifies set of additional longhands
  DavidA: they're all done targeting scroll based triggers
  DavidA: now that we're considering different type of triggers, we
          should have a different format where animation trigger
          property specifies name of trigger
  DavidA: then different property, in case of scroll based trigger, or
          timeline trigger
  DavidA: add name for that trigger and animation-trigger property can
          refer to that dashed ident
  DavidA: similar construction for event based triggers
  DavidA: where event property could be event-trigger or something
  DavidA: specify event that should trigger the animation
  DavidA: and a name
  DavidA: then animation-trigger property can refer to that
          dashed-ident name
  DavidA: proposal is to have different namespaces for different types
          of triggers

  flackr: this follows the pattern we have for scroll timeline and view
          timeline where options for those timelines are not
          animation-* properties
  flackr: you set up timeline separately and attach to animation
  flackr: this nicely lets us have different sets of properties for
          different types of triggers

  ydaniv: have a strong concern here
  ydaniv: main one is that triggers are not directly associated with
          elements
  ydaniv: triggers are just objects that contain state
  ydaniv: information about behavior
  ydaniv: then they form a link between animation and another timeline
  ydaniv: link to an element or an event
  ydaniv: themselves they're not directly related to an element
  ydaniv: I think this design is problematic and adds another namespace
  ydaniv: for example if you have one element specify animation,
          another specify timeline
  ydaniv: another specify trigger
  ydaniv: but it's not necessarily the ? element

  flackr: like scroll and view timelines
  flackr: we can add an element ? trigger construction
  flackr: where we use a simple set of parameters
  flackr: I think that scoping some named things commonly done in a lot
          of locations
  flackr: even if it's not strictly associated with element
  flackr: but also by having the trigger be able to be defined on a
          different element
  flackr: there's more situations where you wouldn't ? timeline for
          that trigger
  flackr: [missed]
  flackr: have strong concerns about not doing this
  flackr: more situation where you wouldn't need a named scroll
          timeline or view timeline
  flackr: because you could set up trigger on the element
  flackr: that you would normally have put the timeline on
  flackr: we would be introducing a bunch of animation associated
          properties
  flackr: for things which most of the time would have no meaning
  flackr: for that animation unless you happen to have specific type of
          trigger to which those properties apply

  fantasai: having a hard time following this conversation because I'm
            missing context of overall proposal
  <TabAtkins> same as fantasai
  fantasai: not here or in spec
  fantasai: can we link to spec and get it properly published?
  fantasai: don't know where change is happening
  fantasai: because it's not in ED
  fantasai: is there no draft spec?
  flackr: this is animations 2
  flackr: ED of animations-2
  fantasai: ok
  <flackr> https://drafts.csswg.org/css-animations-2/#animation-triggers

  ydaniv: re: flackr - regarding concerns, we already have all these
          properties
  ydaniv: even if we do this, animation-trigger still remains
  ydaniv: will also contain list of properties
  ydaniv: thing also that flackr said, people can use anonymous timeline
  ydaniv: that's true, could simplify most cases
  ydaniv: but still there's an option we want to have timeline used on
          specific elements, give it a name, you still have to use yet
          another element
  ydaniv: which is I think, creates more complex API
  ydaniv: for the author
  <flackr> animation-trigger: timeline-trigger(view()) could work for
           example
  DavidA: don't have to use another element
  ydaniv: second point was that, if we do want to put view-timeline
          property and give it a name on an element
  ydaniv: still need another element in between for another property to
          reference that name
  ydaniv: and make it a reference to declaration of trigger
  ydaniv: still need this extra property
  ydaniv: this makes the API a bit cumbersome
  ydaniv: that's my concern

  Rossen: with the number of concerns you're raising here, clarity
          needed for others, to move this forward I think we need to
          move this back to github issue
  ydaniv: I think if more people could chime in and give opinions ...
          could be just design issue
  Rossen: design of feature is most important part
  Rossen: let's move topic and discussion back to github
  Rossen: when you're ready for resolution, put it back on agenda

Received on Wednesday, 16 July 2025 23:45:50 UTC