[CSSWG] Minutes Telecon 2025-01-08 [css-inline][css-selectors][css-shapes]

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

  - RESOLVED: text-box-trim does not change height contribution of
              inline (Issue #10834: inline boxes and line-fit-edge vs
              text-box-trim/edge)
  - fantasai will make a testcase for the above resolution and report
      back on WebKit/Chrome implementation status.
  - RESOLVED: If text-box-trim reduces the effective height of the
              inline box compared to line-fit-edge, that amount is
              propagated as a negative margin (the same way as a
              specified negative margin is propagated) to inline
              descendants (Issue #10384)
  - RESOLVED: Apply text-box-trim to a column box or spanner iff it is
              adjacent to the relevant edge (Issue #11363:
              text-box-trim and multi-column containers)

CSS Selectors
-------------

  - There was discussion around the naming decision for issue #10975
      (:local-link should have a more precise name) but no clear answer
      was discovered during the call. Discussion will continue on the
      issue to outline possibilities.
  - RESOLVED: `:has-slotted` should match when the fallback content is
              not being displayed (Issue #6867: Pseudo-class to
              indicate when a slot has content)

CSS Shapes
----------

  - RESOLVED: Restrict ordering such that `to` or `by` would need to
              come first (Issue #10666: Order of points and control
              points in `shape()`)

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

Agenda: https://lists.w3.org/Archives/Public/www-style/2025Jan/0005.html

Present:
  Rachel Andrew
  Adam Argyle
  Tab Atkins-Bittner
  Kevin Babbitt
  David Baron
  Andreu Botella
  Oriol Brufau
  Keith Cirkel
  Emilio Cobos Álvarez
  Yehonatan Daniv
  Stephanie Eckles
  Elika Etemad
  Robert Flack
  Simon Fraser
  Chris Harrelson
  Daniel Holbert
  Roman Komarov
  Chris Lilley
  Alison Maher
  Eric Meyer
  Jen Simmons
  Gaurav Singh Faujdar
  Alan Stearns
  Josh Tumath
  Bramus Van Damme
  Jeffrey Yasskin
  Sebastian Zartner

Regrets:
  Brian Kardell
  Jonathan Kew
  Miriam Suzanne
  Lea Verou

Scribe: kbabbitt

Administrative
==============

  alisonmaher: Looking for responses on the F2F scheduling email for
               the spring
  alisonmaher: https://app.rallly.co/invite/VFdy8sxOY2WU
  <TabAtkins> what was the survey email titled?
  <alisonmaher> The email was titled "CSSWG F2F April 2025"

CSS Inline
==========

inline boxes and line-fit-edge vs text-box-trim/edge
----------------------------------------------------
 github: https://github.com/w3c/csswg-drafts/issues/10834

  <fantasai> https://github.com/w3c/csswg-drafts/issues/10834#issuecomment-2540644321
  fantasai: Problem statement is at (link in chat)
  fantasai: we have a transparency principle that an unstyled inline
            should have no effect on layout
  fantasai: if I have some text in an <em> and insert a <span> that
            should not affect formatting
  <fantasai> <em>Some text</em> vs <em><span>Some text</span></em> must
             be identical
  fantasai: that means properties need to be inherited if they affect
            inline layout
  fantasai: question is what does text-box-trim do on inlines
  fantasai: backgrounds and borders on inlines traditionally do not
            affect layout and that's fine
  fantasai: we also talked about text-box-trim impacting height of line
            on an inline
  fantasai: my conclusion is I don't think we should do that
  fantasai: because if we set text-box-trim on an inline, e.g. on a
            span, that will affect the line height because the inner
            element now has a taller height
  fantasai: I think we have to specify that when we are in default line
            height mode, text-box-trim can change how backgrounds and
            borders are drawn
  fantasai: but it does not change the height contribution of the inline
  fantasai: which remains based on line-height property

  astearns: dbaron commented on different effects on blocks and inlines
  fantasai: we have a distinction, it's called line-fit-edge
  fantasai: that's a separate property which allows it to trim
  fantasai: Proposal Part A: text-box-trim does not change height
            contribution of inline
  <dbaron> Part A sounds good to me
  Proposed: text-box-trim does not change height contribution of inline

  RESOLVED: text-box-trim does not change height contribution of inline

  fantasai: Next part: we have a line-fit-edge property; it changes to
            a new inline layout model
  fantasai: where instead of using line-height as height contribution,
            we use margin box edge
  fantasai: in addition, it also lets you control which edge you use,
            effectively setting default edge to be used
  fantasai: and that inherits
  fantasai: what we could do is have a negative margin
  fantasai: negative margin ran into this transparency issue
  fantasai: to solve it, we said negative margin is propagated to
            descendant of inline box
  fantasai: if we say text-box-trim is applied to this box and changes
            where borders and padding are drawn, then it should
            correspondingly affect height contribution
  fantasai: but since it doesn't inherit, we somehow need to propagate
  fantasai: in the same way as a negative margin would be
  fantasai: Proposal is that, in this mode, the amount by which
            text-box-trim reduces margin box is propagated as a
            negative margin
  <fantasai> PROPOSAL: if text-box-trim reduces the effective height of
             the inline box compared to line-fit-edge, that amount is
             propagated as a negative margin (the same way as a
             specified negative margin is propagated) to inline
             descendants

  astearns: Is this propagation of negative margins a new thing?
  fantasai: the line-fit-edge negative margin is a new thing, yes
  astearns: concerned this new thing may have side effects
  dbaron: Right now we already have these rules for special propagation
          of negative margins when you have line-fit-edge in
          non-default value
  dbaron: proposal is that, when you use text-box-trim, in this case
          where line-fit-edge has non-default value, then negative
          margin gets propagated to descendants? in addition to other
          negative margin?
  fantasai: yes
  dbaron: I think this makes sense, but we need to think about the
          line-fit-edge model some more and test it some more
  dbaron: but this proposal does seem to make sense to me
  fantasai: agree 100%
  astearns: Restating: the effect of text-box-trim contributes to the
            negative margin that is assessed when line-fit-edge is
            non-default and propagates to descendants
  fantasai: correct
  astearns: Not sure I understand repercussions, need to take a deep
            look at this, but I'm fine with resolving on this

  chrishtr: re: first resolution: is normal the default?
  fantasai: yes
  chrishtr: does that have an effect on chromium/webkit implementation
            of text-box-trim
  fantasai: I haven't tested that, not sure what implementations are
            doing
  fantasai: but it's only on inline boxes
  chrishtr: could you take an action item to take on that?
  ACTION: fantasai to make testcase and report back on WebKit/Chrome
          implementation status
  <RRSAgent> records action 1
  chrishtr: bonus points for a WPT

  PROPOSED: interaction between line-fit-edge and text-box-trim
      contributes to a negative margin that is propagated to inline
      descendants

  RESOLVED: If text-box-trim reduces the effective height of the inline
            box compared to line-fit-edge, that amount is propagated as
            a negative margin (the same way as a specified negative
            margin is propagated) to inline descendants

CSS Selectors
=============

:local-link should have a more precise name
-------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/10975

  keithamus: Headline features for these is that there needs to be a
             way to differentiate links on a different origin vs
             different parts of a hierarchical navigation
  keithamus: e.g. on github.com/settings there might be sublinks on
             that, we have a big menu, a little visual treatment to
             show what page you're on
  keithamus: many sites do this, this selector attempts to abbreviate
             that
  keithamus: look at URL of current page, parts of it
  keithamus: selectors-5 currently just has local-link as a selector
  keithamus: I would like to extend that
  keithamus: jyasskin had some great commentary on that
  keithamus: resolution I'm looking for is: what selectors to enable,
             what to name them
  keithamus: not sure if I made sufficient justification for
             :local-link(n) but happy to make it

  <fantasai> https://www.w3.org/TR/2013/WD-selectors4-20130502/#local-pseudo
  fantasai: We had much more control in original version of spec
  fantasai: there was a proposal to cut it down to a more minimal set
  fantasai: if there's interest in making it more powerful that would
            be fine
  fantasai: but this issue is asking for a renaming
  keithamus: topic is around the renaming but I'd like to discuss in
             context of if we had a suite of these selectors
  <jyasskin> And fwiw, the :local-link(n) is still in
             https://drafts.csswg.org/selectors-5/#local-pseudo. It was
             removed from level 4.
  keithamus: there's a chance to approach this with a look at all of
             them and get some symmetry
  keithamus: to that end, we have [missed]-target already, should we
             have same-*? same-target, same-origin, same-path?
  <jyasskin> +1
  fantasai: difference between origin and domain?
  keithamus: I don't think there's a distinction between those. there
             is between path and target
  <andreubotella> IIRC the origins for HTTP and HTTPS in the same
                  domain are different

  fantasai: for matching fragment, there was proposal in the thread for
            :target-link
  fantasai: expanding out to all those things [missed]
  keithamus: symmetry would be :target-link, :local-link, ...
  keithamus: would :local-link still exist as matching origin?
  keithamus: or would we have :origin-link?
  fantasai: previous proposal had :local-link(n) where n=0 represents
            same domain, 1 represents same first segment, etc.
  fantasai: one thing it didn't handle was query parameter, etc
  keithamus: yes which is doable but difficult with one single selector
  keithamus: because if you have an arbitrary path it can grow to an
             arbitrary number
  <fantasai> 1. :target-link matches including fragment
  <fantasai> 2. :local-link matches page URL ignoring fragment
  <fantasai> 3. :local-link(<integer>) matches domain + number of path
             segments

  astearns: jyasskin had concerns about using local in name
  jyasskin: local is not great for this purpose because of what it
            means in the rest of platform
  jyasskin: we want CSS to be consistent with those
  jyasskin: and not confuse people wrt other parts of platform
  fantasai: I think we have a structure and need better names
  jyasskin: origin vs domain - domain isn't great but there is a site
            concept in other parts of platform which could be used here
  jyasskin: not clear it's needed but could be right term
  keithamus: one suggestion in thread is same-path, same-site
  keithamus: same-path parameterized with an integer
  keithamus: and then same-target
  jyasskin: not sure target is exactly right, :target matches the thing
            referred to by the active fragment, so it might not be the
            right name when matching a link, but it's not terrible

  astearns: context is that keithamus is implementing local-link
  astearns: looking to ensure whatever gets implemented can get extended
  keithamus: I've prototyped parameterized version in Chrome
  keithamus: that's the version most useful to github
  keithamus: bare one could visually treat intra-page navigations as
             inter-page navigations
  keithamus: lot of posts about cross-origin links

  fantasai: what if we called it match-link?
  fantasai: but that doesn't quite capture what you're matching
  keithamus: I like the idea of saying dash-whatever, it matches the
             problem space
  <fantasai> `:self-link(<integer>)`
  fantasai: also suggestion of self-link
  keithamus: does self-path(3) ...
  fantasai: you don't need to distinguish in that case
  jyasskin: is it self-origin, self-path, ...?
  fantasai: parameter 0 means site, 1 means site + 1 path segment
  jyasskin and then keyword for fragment, parameters, etc?
  fantasai: yes
  <jyasskin> :self-link(path(3)) ?
  keithamus: how would keywords look? positional parameters?
  <jyasskin> :self-link(site)
  keithamus: would both be precluded?
  <fantasai> :self-link(<integer> | target || query)
  astearns: like self a little more than same

  flackr: self-link is from the proposal to generate pseudo-element
          links from current element
  flackr: in that discussion we talked about approaching it from
          different direction
  flackr: if we choose self-link here, we need to make sure we have
          something that makes sense in that other context
  fantasai: Maybe that one can be anchor-link?
  <fantasai> ::anchor-link ?
  flackr: maybe

  jyasskin: hearing a bunch of concerns from CSS experts
  jyasskin: shying away from same-path, same-site, same-origin
            terminology
  jyasskin: where they've been used in other parts of platform, curious
            why that is
  fantasai: we do want to have an integer parameter, right? once you
            have that, that gets you site + path without a keyword
  jyasskin: it gets you origin + prefix of path
  fantasai: or a keyword or default value or something that specifies
            full path
  jyasskin: we still need something that specifies whole query
  astearns: I was a little concerned about adding path and site and
            origin
  astearns: not sure authors have those concepts in mind
  fantasai: we can add keywords corresponding to them if that would be
            more user friendly

  astearns: would it make sense to hold off on this and have a
            discussion in upcoming f2f
  <dbaron> (it might also help the discussion to define path and origin
           for the rest of the group)
  [jyasskin and keithamus both remark that they won't be able to be
      there]
  <jyasskin> Re dbaron: and site, query, and fragment.
  <dbaron> (oops, I meant to say "site and origin" :-)
  keithamus: I think there's a good direction for the semantics but
             naming is where we got stalled
  fantasai: suggest we sketch it out and put some suggestions down

CSS Inline Con't
================

text-box-trim and multi-column containers
-----------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/11363

  fantasai: we talked about applying text-box-trim to multicol
            containers
  fantasai: said it applies to every column
  fantasai: we didn't discuss what happens if there's a column spanner
  fantasai: it can occur before or after the column box
  fantasai: also you can have column boxes that span in the middle of
            the multicol container
  fantasai: and only want to trim the columns on the outsides
  fantasai: I think we want to clarify
  fantasai: suggest that we only target column boxes adjacent to edge
            of multicol container
  fantasai: and that we also trim spanners if present

  astearns: we only target things if they are adjacent to the
            appropriate edge?
  fantasai: yes
  rachelandrew: sounds good to me
  rachelandrew: that would then work if we do block-direction overflow
                for columns, same issue but without spanner
  <fantasai> PROPOSAL: Apply text-box-trim to a column box or spanner
             iff it is adjacent to the relevant edge

  RESOLVED: Apply text-box-trim to a column box or spanner iff it is
            adjacent to the relevant edge

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

Was changing acceptable element algorithm intentional?
------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/11170

  TabAtkins: yes it was a mistake, I'll fix it

CSS Selectors Con't
===================

Pseudo-class to indicate when a slot has content
------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/6867

  keithamus: tldr from thread is chrome has :slotted, it can match on a
             few different things
  keithamus: concept of flattened vs non-flattened tree
  keithamus: flagged in firefox and chrome as non-flattened tree
  keithamus: so it can match direct descendant of a slot
  keithamus: some contention around this
  keithamus: setting flattened to true would mean it would make child
             slots transparent effectively
  keithamus: so if you have a slot slotted by another slot then that
             slot [missed]
  keithamus: my opinion is we should keep behavior as-is
  keithamus: that's the only way you can match slotted content
  keithamus: even if it's just a text node as a descendant of a slot
             element
  keithamus: web components cg is asking for commitment that this is
             acceptable
  keithamus: as long as we define the alternatives to that
  keithamus: chief use cases are: has my slot been populated? what has
             it been populated with?

  emilio: flattened true and flattened false - only effective
          difference is nested slots right?
  keithamus: that's true, has-slotted will always match populated text
             nodes
  keithamus: nested slots become transparent
  [missed some context]
  keithamus: how do you determine nested slots is the short summary
  emilio: to me, flattened tree behavior is what I'd expect as an author
  emilio: components that use nested slots... that becomes useless
  emilio: a bit confused about when you'd want to differentiate between
          useful slotted content and empty slot
  emilio: why would you want flattened behavior?
  keithamus: other way around makes more sense for that use case, am I
             displaying default slotted content
  emilio: right but if you have an empty slot you could do that?
  keithamus: I don't think so?
  keithamus: will have to test
  <dbaron> (that would be my assumption ^)
  emilio: my understanding is that you'd display default content of
          nested slot
  emilio: flattened behavior is easier but I'm surprised that's most
          useful
  emilio: would not object but might be worth checking
  emilio: ideally has-slotted should reflect fallback content
  keithamus: agree, that's my understanding of what flattened false
             would do
  emilio: assuming that's the case flattened false seems reasonable
  emilio: if you want we can resolve that we make has-slotted match
          fallback content

  <keithamus> PROPOSED RESOLUTION: `:has-slotted` should match when the
              fallback content is not being displayed
  astearns: doesn't mention flat tree deliberately
  astearns: but if it turns out flat tree is desired behavior, [?]
  keithamus: need to confirm
  keithamus: whether a slot would display fallback content
  keithamus: but if that's the case it shouldn't use the flat tree, but
             if it isn't then it should

  RESOLVED: `:has-slotted` should match when the fallback content is
            not being displayed

CSS Shapes
==========

Order of points and control points in `shape()`
-----------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/10666

  smfr: previously we decided you could specify dest point and control
        points in any order
  smfr: later we added ability to specify control points in a way that
        depended on relative/absolute to/by on dest point
  smfr: possible to write segments where control points come first but
        there's ambiguity on how to get to dest point
  smfr: curve with top left by 10% 10%
  smfr: which is invalid
  smfr: you cannot read left to right, you cannot parse left to right,
        have to maintain state to resolve `to` keyword
  smfr: do we have a desire in CSS to make things valid when read left
        to right?
  <fantasai> curve with 10px 30px by 20px 20px
  <fantasai> curve by 20px 20px with 10px 30px

  TabAtkins: I'm fine with smfr's suggestion
  TabAtkins: being able to know what coordinate space you're working in
             early seems reasonable
  fantasai: prefer to keep it reorderable but not a big deal
  PROPOSED: restrict ordering such that `to` or `by` would need to come
      first
  fantasai: could decide later that it can be reorderable

  RESOLVED: restrict ordering such that `to` or `by` would need to come
            first

Received on Thursday, 9 January 2025 01:11:31 UTC