[CSSWG] Minutes Telecon 2025-08-13 [cssom-view][css-grid][css-anchor-position][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.
=========================================


Suggest a better name for the `:interest-target` pseudo class
-------------------------------------------------------------

  - RESOLVED: Use :interest-source and :interest-target (Issue #12515)

CSSOM View
----------

  - There were concerns about the proposal for issue #12040
      (`getClientRects()` should return a flattened list of child rects
      for `display: contents`) limiting anchor positioning or parts
      users so discussion will return to github.

CSS Grid
--------

  - RESOLVED: Define that subgrid repeat works exactly the same as grid
              repeat (Issue #8493: Subgrid auto repeat calculation when
              <line-name-list> size isn't a multiple of remaining
              subgrid tracks)

CSS Anchor Positioning
----------------------

  - RESOLVED: Create level 2 diff spec for anchor pos and define an
              anchored keyword for container-type there (Issue #12390:
              Add a new container-type `anchored` for querying anchored
              elements)
  - RESOLVED: Define a fallback container feature used in the anchored
              query function (Issue #12391: Add a `fallback` feature
              for querying applied fallback for anchored elements)

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

  - RESOLVED: Add three methods to AnimationTrigger interface:
              addAnimation, removeAnimation and getAnimations (Issue
              #12397: How do AnimationTriggers attach to animations?)

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

Agenda: https://lists.w3.org/Archives/Public/www-style/2025Aug/0004.html

Present:
  Tab Atkins-Bittner
  David Awogbemila
  Kevin Babbitt
  Kurt Catti-Schmidt
  Elika Etemad
  Mason Freed
  Paul Grenier
  Hoch Hochkeppel
  Daniel Holbert
  Brian Kardell
  Jonathan Kew
  Roman Komarov
  Rune Lillesveen
  Eric Meyer
  Alan Stearns
  Miriam Suzanne
  Josh Tumath
  Bramus Van Damme
  Lea Verou

Regrets:
  Rachel Andrew
  Yehonatan Daniv
  Chris Lilley

Scribe: JoshT


Suggest a better name for the `:interest-target` pseudo class
=============================================================
  github: https://github.com/w3c/csswg-drafts/issues/12515

  masonf: We resolved to add these pseudo elements a month ago
  masonf: poll on the naming. two pseudos
  masonf: put the results into a final survey
  masonf: results are: :interest-source and :interest-target. the
          nearest runner up is :interest-invoker and :interest-invoked
  masonf: so propose :interest-source and :interest-target
  <TabAtkins> +1
  <kbabbitt> +1
  fantasai: :interest-source is a cool direction to go in
  fantasai: I wish we could come up with a better name for
            :interest-target but hard!
  astearns: thanks masonf for running polls
  masonf: polling feature on GitHub is useful

  RESOLVED: use :interest-source and :interest-target

  astearns: if someone comes up with a better name for
            :interest-target, please open a new issue

CSSOM View
==========

`getClientRects()` should return a flattened list of child rects for
    `display: contents`
--------------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/12040

  florian: if you ask getClientRect on display: content, it returns
           nothing
  florian: if you return the pieces of it, that would be more useful
  florian: this is likely to be a breaking change. are we OK with
           breaking compat?

  <bkardell> it would be good to answer Oriol's questions in the issue

  oriol: I'm not opposing. but was explaining in last comment, not sure
         if we should wait for Lea to defend proposal, but I can
         explain my reasoning
  astearns: is your concern about the way it is to be resolved or the
            use case in general?
  oriol: there are specific values where they can all be valid and it's
         not clear how we would do it regardless of the method. some
         authors would want a different behaviour
  oriol: like should we include abspos children that are out of flow
  oriol: should we include text children. they don't have clientRects
  <emilio> +1 oriol
  oriol: there is a proposal to support it for pseudo elements. would
         they be included?
  oriol: in general, I think it seems useful, but a can of worms!
  oriol: I think it's better if authors implement exactly what they
         want in JS
  oriol: if the element has display contents, then I think producing an
         empty value is reasonable because it has no box of its own

  emilio: +1 to oriol. we already have some APIs for selection that
          behave like this
  emilio: range.getClientRect is a thing
  emilio: that pretty much does what Lea wants I think
  emilio: for display: contents, it doesn't produce a box so it should
          return empty
  emilio: I don't think this would be web compat

  lea: what's the alternative proposal, I've just joined
  astearns: for authors using JS to work out which children they want
            to get the rect for
  lea: anchor positioning?
  lea: it's been a while, but this came up with certain components that
       need to capture native elements
  lea: a solution for some things is to wrap a native element
  lea: there are two ways to style. either not style the button in the
       shadow dom and consumers use custom properties for basic styling
  lea: Or to display: contents on the host and then authors can style
       the button, for example
  lea: authors can apply bg and borders and whatever
  <emilio> The alternative is implement what you want. which might be
           `let r = new Range(); r.selectNodeContents(thing);
           r.getClientRects();`
  lea: but makes it difficult to get getClientRect to work to return a
       union of the children
  lea: that might be more what authors expect
  lea: but what happens today if you use anchor pos and you have
       getClientRect
  emilio: it doesn't work
  lea: and it's also defined in terms of client rect. so I'm not
       married to fixing getClientRect
  lea: but if anchor positioning doesn't work here, that's a broader
       problem
  TabAtkins: the element wouldn't exist here as far as the layout tree
             is concerned
  lea: if there was a declarative way to declare which elements make
       the box might work. that would help with this use case

  emilio: I understand the use case of wrapping a single element and
          wanting it to behave as the element
  emilio: for that, all these questions have answers
  emilio: I don't think we can make this generally work without
          answering a lot of really hard questions around chaining
          behaviour of these APIs
  emilio: maybe the answer is you don't style the component itself and
          you style the parts
  lea: yeah that's the other alternative
  emilio: that's what works now then. but I agree it would be useful
          for the specific use case you outlined

  lea: this makes it confusing for users using parts. there's certain
       things you can't do. now you have to learn a new thing: the
       obvious thing doesn't work
  lea: this feels like a theoretical purity argument
  lea: it doesn't generate a box on its own but the descendants do
  lea: but I'm not sure there are any use cases where you would want an
       empty rect
  emilio: could be places where intersection observers accidentally
          fire if we change this
  emilio: I understand it would be nice if things were magic and
          transparent. but if you have to reach into the shadow dom and
          style that then ???
  lea: I agree it's weird but the web platform doesn't supply another
       way to do this
  emilio: maybe we should extend built ins. but that's not related to
          display: contents
  <bkardell> there is a separate issue on what Emilio just mentioned

  astearns: we should take this back to the issue, but should have a
            new issue for display: contents on anchor positioning
  TabAtkins: maybe we could but I'd like it to be consistent with
             something else on the web platform
  lea: we could add a dom method that gets you the union of all these
  emilio: the range API already exposes this. I don't think it's great,
          but it's already exposed
  lea: are you suggested this is precedent we could look at or we could
       already use range?
  emilio: I don't think it would be what you want generally because it
          only works on a flat tree, but for most use cases it should
          work
  emilio: as oriol said, there are many bounding boxes that could work
          here
  emilio: so I don't see this working in a general way that is useful
          enough but maybe that's me
  lea: I agree but think anything we do is more useful than the current
       situation

  astearns: let's take it back to the issue

CSS Grid
========

Subgrid auto repeat calculation when <line-name-list> size isn't a
    multiple of remaining subgrid tracks
------------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/8493

  fantasai: there was a question of what to do if the subgrid has a
            repeat() with multiple line names
  fantasai: let's say two line names but the number of lines in subgrid
            is odd. do you just cut the last repetition or just the
            names don't get assigned for the last section
  fantasai: my intent when I wrote the spec was that we only do whole
            numbers in repetitions in the repeat functions
  fantasai: here the number of lines is set and we just have to give
            names
  fantasai: if we cut off at the last rep, there are some lines that
            don't get names
  fantasai: but if we clamp, they all get names
  fantasai: that seems more reasonable than cutting up the last
            repetition

  Kurt: was going to distinguish between whether subgrid span size is
        large enough for a single repeat
  Kurt: but I see that's generalized to fantasai's case for splitting
        the remainder
  Kurt: that was my question. i think it's the same problem
  Kurt: but my concern with changing this is: is it safe to change at
        this point?
  Kurt: subgrid is shipped. are we OK changing how auto-repeat changes
        in these scenarios?

  TabAtkins: I do not think we should change behaviour
  TabAtkins: if you have several repeated lines, you are probably
             depending on them as a block
  TabAtkins: and putting things next to those lines. so if you have
             partial repetition, your layout will be broken
  TabAtkins: they'll be too short or ???, etc
  TabAtkins: in normal grid, we don't allow partial repetitions to
             prevent accidentally getting a partial bit of something
             the author intended to be a unit
  TabAtkins: so like here if you're just defining line names
  TabAtkins: if there was a great reason to diverge, we should be
             self-consistent when we can. so I think the argument here
             is to be consistent anyway

  oriol: I agree with TabAtkins about consistency argument
  oriol: I had idea in issue. maybe partial keyword to provide to
         repeat function to opt into this behaviour
  <kizu> +1 to `partial` keyword, including in regular grids as well
  fantasai: I'm OK with it!
  astearns: resolution for this issue is to keep the subgrid autorepeat
            consistent with the grid autorepeat, but make a new issue
            for the partial keyword in the repeat function if we find a
            use case for it
  astearns: is there any spec change for this issue needed?
  fantasai: seems like there should be some clarification
  TabAtkins: this was raised on the assumption that something is
             missing in the spec

  RESOLVED: define that subgrid repeat works exactly the same as grid
            repeat

  Kurt: that resolves things

CSS Anchor Positioning
======================

Add a new container-type `anchored` for querying anchored elements
------------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/12390

  futhark: before the summer, I presented what fallback is chosen for
           anchor pos
  futhark: there are two issues connected:
  futhark: to propose to add a new container type anchored to the
           container type property
  futhark: that can be used in combination with other container types
  futhark: have discussed in the issue which containments are necessary
           and size containment isn't
  futhark: can affect characters in flow in ??? and you could get a
           cycle
  futhark: I proposed that we add an anchored container type that
           implies styled containment

  fantasai: is there a reason not to make this compat with style
            containment
  fantasai: either reusing it or having it compute to style containment
  futhark: this is the same as what we do with inline-size etc.
  fantasai: from what I can see, this is the same as style containment
  futhark: you could combine with contain property
  futhark: so this is already how other container types work
  futhark: the contain property and the ??? container type is combined
  fantasai: I don't understand what is the difference between
            container-type and contain again
  futhark: it tests which type is a candidate for containment. you
           can't do that with the contain property
  fantasai: is there a reason to limit this?
  TabAtkins: container-type is in the container queries spec. and the
             other is in the containment spec
  TabAtkins: container-type is for container queries. and certain
             values imply certain contain values

  miriam: IIUC, this doesn't affect anchor pos and try blocks and
          anything else. this would only apply if you want to query the
          container and change some aspect of it
  futhark: Correct

  astearns: what would the proposed resolution be?
  futhark: last time, suggested that this should be added to lvl 2 of
           anchor pos spec
  futhark: so create the spec and add it to the container-type property
  futhark: with style containment
  PROPOSED: create level 2 diff spec for anchor pos and define an
      anchor keyword for container-type there
  astearns: should the keyword be anchor, not anchored?
  TabAtkins: need to distinguish the two states

  RESOLVED: create level 2 diff spec for anchor pos and define an
            anchored keyword for container-type there

Add a `fallback` feature for querying applied fallback for
    anchored elements
----------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/12391

  futhark: the next thing is to add something to query about these
           anchored elements
  futhark: query the fallback position of the anchored element
  futhark: to add a new anchored() function to the container root
  futhark: a single feature for now to query the fallback position used
           by the anchored element
  futhark: this fallback position is matching either the name from the
           fallback being applied or the position area
  futhark: set by the position try fallback
  futhark: the position area will match not the keyword but on the
           physical position, so you can use logical values to match
  fantasai: overall seems reasonable. sad it has to be a container
            query rather than query on the item itself
  futhark: the thing on the element itself is already limited to
           certain properties for anchored elements already, for the
           fallback styling

  kizu: only question about position area
  kizu: should it match exactly or match partially
  kizu: say you position stuff to the bottom, but it could be
        bottom-right, bottom-center
  kizu: could you query this 'somewhere on the bottom' without the
        exact area
  futhark: my proposal was to match exactly but that could make sense
           to have a syntax for matching some area
  futhark: I'm not sure what the syntax would look like
  fantasai: we discussed this when designing the matching syntax as a
            thought experiment at apple
  fantasai: I remember a matching syntax to query ???. I'll see if I
            can find anything
  fantasai: yeah we allow the keyword 'any' in some places
  futhark: so you could say span left or something?
  <kizu> I like `any`
  fantasai: span-left any. and it would be either left-top,
            left-bottom, etc.

  astearns: should we decide on that today or give more time for
            thought?
  futhark: we could resolve on what I've proposed today and create an
           issue to add 'any'
  miriam: this might also belong in a separate issue, but wondering if
          there's other cases where we have container query syntax in a
          if function
  miriam: does this have if function uses?
  TabAtkins: no because this has to be on the container. can't query on
             the element itself for bad cyclic reasons
  miriam: OK
  PROPOSED: add anchor query function that can take fallbacks as params
  futhark: it includes having a fallback container feature, not a
           fallback value directly
  PROPOSED: define a fallback container feature used in the anchor
      query function
  PROPOSED: define a fallback container feature used in the anchored
      query function

  RESOLVED: define a fallback container feature used in the anchored
            query function

  astearns: who will open issue about any keyword?
  futhark: can unless fantasai wants to
  astearns: please do!

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

How do AnimationTriggers attach to animations?
----------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/12397

  DavidA: this is related to animation triggers
  DavidA: simple naming issue. we just want to define a few functions
          on animation trigger object
  DavidA: functions defined in web animations spec
  DavidA: addAnimation which attaches the animation to the trigger
  DavidA: removeAnimation to remove
  DavidA: and getAnimations

  astearns: suggestions for just add and remove instead of
            addAnimation, etc. but Rob is not happy with that but he's
            not on the call
  fantasai: seems reasonable to me. question about do you want to add
            the animations to the trigger or trigger to the animations?
  DavidA: we started the other way around, when still thinking of
          triggers as an internal part of an animation
  DavidA: but we think it should be outside.
  DavidA: as a function to add the animation to the trigger
  DavidA: I don't think there's much of a conceptual difference
  DavidA: we could add an animation triggers interface
  DavidA: but for now, it's useful to expand the animation trigger
          interface as an independent thing that can attach animations
  fantasai: I have no opinion. just checking.

  DavidA: in Rob's comment before, he suggested
          AnimationTrigger.animations.add interface
  DavidA: it does have some logic that goes with it where you attach
          the animation to a trigger
  DavidA: but you can pause the animation trigger to be in affect
          before the animation starts to play
  DavidA: if we just have AnimationTrigger.animations.set interface,
          that's just a generic set interface
  DavidA: we don't have a way to implement the logic for all the
          animations it should have if we just have an add method
  <bramus> +1 to adding the two methods
  astearns: the smallest first step would be to add the new methods
            addAnimation and removeAnimation for now
  DavidA: bramus thought about having getAnimations as well
  <bramus> and +1 to the extra getAnimations as well :)
  PROPOSED: add three methods to AnimationTrigger interface:
      addAnimation, removeAnimation and getAnimations

  RESOLVED: add three methods to AnimationTrigger interface:
            addAnimation, removeAnimation and getAnimations

Received on Wednesday, 13 August 2025 23:04:46 UTC