[CSSWG] Minutes Telecon 2022-03-30 [css-contain] [css-values] [scroll-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 Contain
-----------

  - RESOLVED: No change, work on more general solution to more openness
              across shadow boundaries (Issue #5984: CQ vs shadow
              boundaries)

CSS Values
----------

  - emilio will write up how he believes issue #3297 (The lh and rlh
      units are more complicated than what they seem) should be
      implemented. The group will see if implementers can agree to that
      proposal after it's drafted.

Scroll Animations
-----------------

  - RESOLVED: Use CSSNumberish for "time" values in Web Animations API
              (Issue #7102: CSSNumberish Time values to represent types)
  - RESOLVED: Use percentages for scroll-timeline values (Issue #7045:
              Percentages vs Pixels for Scroll Timeline Values)

Container Queries
-----------------

  - RESOLVED: Make cascade-dependent keywords revert/revert-layer
              disallowed in style() queries (Issue #7080: CSS-wide
              keywords in style())
  - RESOLVED: Other css-wide keywords (initial, inherit, reset) are
              allowed (Issue #7080)
  - There wasn't time to resolve on issue #7142 (container ;/ style),
      but the group agreed to look at what WPT is testing now and add
      clarifications to the issue to hopefully resolve it next week.

===== FULL MINUTES BELOW ======

Agenda: https://lists.w3.org/Archives/Public/www-style/2022Mar/0010.html

Present:
  Rachel Andrew
  Rossen Atanassov
  Tab Atkins Bittner
  Delan Azabani
  David Baron
  Tantek Çelik
  Emilio Cobos Álvarez
  Elika Etemad
  Robert Flack
  Simon Fraser
  Chris Harrelson
  Daniel Holbert
  Jonathan Kew
  Vladimir Levin
  Daniel Libby
  Chris Lilley
  Peter Linss
  Alison Maher
  Ben Mathwig
  Jen Simmons
  Miriam Suzanne

Regrets:
  Lea Verou

Scribe: fantasai
Scribe's scribe: emilio


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

  Rossen: Any extra agenda items or suggested changes?
  Rossen: Seems not
  Rossen: We had our first physical F2F with the TAG
  Rossen: Will share reflections
  Rossen: It was definitely great

CSS Content
===========

Implementing content:none on elements is not web-compatible
-----------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/6503

  TabAtkins: Seems subtle, and I haven't reviewed, so maybe push this
             to later
  Rossen: Yeah, doesn't seem blocking, so let's move on to next issue

CSS Contain
===========

CQ vs shadow boundaries
-----------------------
  github: https://github.com/w3c/csswg-drafts/issues/5984

  TabAtkins: Miriam added to agenda
  miriam: Issue is, we resolved awhile back that slotted container
          queries couldn't see containers in the shadow DOM
  miriam: which from the perspective of saying that Shadow DOM things
          should be hidden makes a lot of sense
  miriam: Problem is very common use case with web components and
          shadow DOM these days is to build an entire design system out
          of them
  miriam: you end up with lots of things nested in slots
  miriam: and if container queries can't respond, feels limiting
  miriam: Decent workaround, similar to can't measure grid track with
          CQ, add an extra element in the slot and measure that
  miriam: but wanted to bring that back because feels broken to ppl
          using the use case
  miriam: Proposed path forward is that Container Queries can respond
          to containers that are in the shadow DOM
  miriam: That does expose a bit about what's in the shadow DOM
  miriam: but feels similar to exposing inheritance
  miriam: We're trying to measure space available, and that's impacted
          by what's in the shadow DOM
  miriam: I can also seem Tab's perspective, there's a disconnect here
          in the various ways shadow DOM is used

  TabAtkins: My position is that containers declared inside a shadow
             shouldn't be visible to light DOM children distributed in
             slots
  TabAtkins: Shadow DOM was designed to be encapsulated as much as
             possible
  TabAtkins: some purposeful leaks, e.g. ::parts
  TabAtkins: and inheritance leaks through the boundaries, but is minor
  TabAtkins: but a number of other things we didn't want things to leak
  TabAtkins: e.g font-faces in shadow can't be used by light DOM
  TabAtkins: ...
  TabAtkins: If you ever say anything in your styles about that font,
             won't see that font
  TabAtkins: because loaded in Shadow only
  TabAtkins: This feels similar
  TabAtkins: Container in the shadow is not necessarily part of the
             public contract of the shadow implementation
  TabAtkins: might be internal, not to be exposed
  TabAtkins: If exposed, then existence of that container *is* exposed
  TabAtkins: and becomes part of your contract
  TabAtkins: That said, I can see the usefulness of having containers
             in your shadow, and making that part of your "API" with
             surrounding content
  TabAtkins: This is showing a conflict between shadow DOM as hidden ??
             and shadow DOM as organizing mechanism
  TabAtkins: ...
  TabAtkins: allows cooperating first-party components
  TabAtkins: I think we should have a more open shadow DOM that doesn't
             have info-hiding, and those could expose things like
             containers and name-defining @rules
  TabAtkins: but I don't think that should be an exception to shadow
             DOM as we have it today
  TabAtkins: We should continue to info-hide when possible
  TabAtkins: Doing this would make it impossible for any UA shadow DOM
             usage to use containers
  TabAtkins: and that's problematic
  TabAtkins: so I think we should keep spec as is, not exposed

  miriam: Container in Shadow DOM does impact layout, so that's why it
          feels weird for it to not impact the measurement
  miriam: but I do like the idea of having some explicit control here
  TabAtkins: I do get it. Not a good answer right now.
  TabAtkins: My preferred decision isn't ideal, it's best given the
             current tack.
  TabAtkins: And we should solve the problem more generally
  Rossen: My current personal lean is more towards trying to find more
          general solution, that will work for this and others
  Rossen: and not rush into open more dependencies and make shadow DOM
          less shadowy
  <emilio> +1
  Rossen: recognizing the pain as well

  Rossen: Are we in a position to break that tie?
  * fantasai proposes straw poll
  Rossen: Miriam, how do we feel about this?
  miriam: As long as we all feel the pain, and want to work towards a
          general solution
  Rossen: Miriam, if we resolve to work on more general solution, would
          it be objectionable?
  miriam: No, I would want to work on the more general solution, and
          teach the workaround for now
  Rossen: Sounds like consensus to me, anyone else with a different
          opinion?
  Rossen: OK, proposed solution is to leave spec as-is and work on a
          more generalized solution to less shadowy shadow boundaries
  Rossen: Any objections?

  RESOLVED: No change, work on more general solution to more openness
            across shadow boundaries

CSS Values
==========

The lh and rlh units are more complicated than what they seem
-------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/3257

  emilio: Issue here is that some elements treat their line height at
          different times, some are computed value and some used value
  emilio: and not interop
  emilio: so line height units wouldn't be interop across browsers
  emilio: Can't quite change the adjustments
  emilio: e.g. single-line input elements act as normal if line-height
          is less than ... some tricky things
  emilio: Roughly interoperable in terms of effect
  emilio: but we should agree, but if we don't agree on when to do the
          adjustment, the units will behave differently depending on
          whether computed-value time or used value time
  Rossen: Do we have any consensus on what should be done?
  iank: Remind me, emilio?
  iank: Can you remind me, these adjustments are all to do with
        'appearance'?
  emilio: Not really
  emilio: At least chrome applies regardless of appearance
  iank: Interesting
  emilio: I can check but pretty sure it's not tied to appearance, at
          least with input
  emilio: unsure about <select>

  Rossen: Do we already have experiments and consensus, or trying to
          establish now?
  * fantasai thinks we don't have consensus, hasn't been
             well-investigated
  smfr: What if we just remove the units? is there sufficient demand
        for these units that we need to solve this problem?
  fantasai: Units were added to allow authors to spec margins and sizes
            in units of line height, to maintain vertical rhythm
  fantasai: I don't think it makes sense to remove them because we
            can't figure out what to do with form controls, where
            they're unlikely to be used anyway
  fantasai: It's better to resolve them to something random on form
            controls than it is to remove the units

  Rossen: What do you propose we do?
  emilio: I think <select> does change computed line-height based on
          appearance, and input used line-height regardless of
          appearance, and [something something nested elements]
  emilio: The resolution I want is that we have an interoperable
          definition, before we ship the units
  <iank> our control elements are complicated wrt. to this as emilio
         suggests.
  Rossen: Are you going to be the first ones shipping the units?
  emilio: I think I filed this when WebKit added them behind a flag
  emilio: I just noticed and looked into the weird edge cases
  emilio: I think WebKit is the only one with an implementation right
          now
  smfr: We turned it off because of this problem
  Rossen: So you would be OK to not ship them for awhile?
  smfr: I think that's fine

  fantasai: I don't want to see these units get stuck on this edge case
  fantasai: If we're hang up on this issue I'd be happy to define that
            on form control it resolves to 16px or something
  fantasai: I don't think the value of these on a form control matters
            at all
  fantasai: if that's what we're hang up on let's resolve
  fantasai: but I wouldn't like for this feature to get stuck on that,
            nobody is going to use it on form controls
  <miriam> +1 fantasai
  <astearns> +1 to fantasai

  emilio: To be clear, I don't think this is a hard problem to solve.
          Just need to figure out what implementations are doing
  emilio: and then decide whether we are fine with these units behaving
          oddly on <select>, because computed value would change after
          the fact
  emilio: so like you would resolve the units based on the
          author-specified line-height, when might be overridden later
  emilio: I don't think this is an unsolveable problem
  emilio: First check if we're all doing the same, and then decide if
          the weird behavior is desirable, and document it
  fantasai: Happy to just make it undefined on the spec on form
            controls, I don't think it matters on form controls
  fantasai: I don't think it's a high priority to make it work there
  Rossen: Is that something we can start with? Make it undefined on
          form controls, and then define it later?
  <astearns> would rather we pick a behavior
  emilio: I would much rather prefer it was interoperable
  emilio: Undefining it is going to backfire
  Rossen: It would be undefined on form controls, and interoperable
          everywhere else
  emilio: Someone will use it on form controls, and start depending on
          its behavior
  iank: Agree with emilio
  <vmpstr> +1
  Rossen: Either we leave it as undefined on form controls, or we use
          some agreed-upon value, or take this back to the issue and
          work with implementers to figure out how this should work
  Rossen: which option do we want to take?
  emilio: I'm happy to document how I think implementations are going
          to work here
  emilio: I know what Gecko does, but checking what blink/webkit is
          doing
  emilio: and see if we agree on it
  emilio: If we do then, fine, if we don't agree, then we can decide
          what is the least painful way to interop
  Rossen: Ok, let's do that. Let's have you go back and write that up
          in the issue, and once you have it we'll have something
          concrete to talk about
  Rossen: and see if rest of engines can agree
  Rossen: Does that work?
  emilio: Sure
  Rossen: OK, sounds like we're going with the third solution.
  Rossen: Emilio, once you have a proposal, let's go from there
  Rossen: Anything else on this issue?
  <fantasai> no, just wanted to make progress so we're not blocking
             on it

Scroll Animations
=================

CSSNumberish Time values to represent types
-------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/7102

  flackr: Scroll-linked animations is the first animation feature we're
          animating that doesn't animate in terms of time values
  flackr: Takes a scroll position and ultimately turns it into progress
          in an animation
  flackr: but animations APIs let you observe the time, e.g.
          .currentTime
  flackr: So question is whether we should reflect the type of the unit
          to make it clear to the developer that it's not a time
  flackr: or just make it a double, and have the risk of mixing units
  flackr: I've outlined the advantages and disadvantages of each
          approach
  flackr: We know that using numbers for non-time values works, that is
          what we have implemented in Chrome
  flackr: We'd have to use CSSNumberish in order to use units, so as
          not to break existing content which uses doubles
  flackr: My preference is CSSNumberish, since that gives us the
          flexibility to know when different types are being into the
          system, and raise errors if mixing types
  flackr: and we can define conversions, as we have done in current
          spec, for taking a time-based animation and ...
  flackr: rather than using time units as pixels or percentages
  TabAtkins: I agree with flackr, keeping the double for representing
             milliseconds is fine
  TabAtkins: reasonable for handling that
  TabAtkins: Being able to distinguish the actual CSS types when there
             is not a clear and obvious answer, and being unable to use
             different CSS units, is bad
  TabAtkins: so very in favor of accepting all length units here
  TabAtkins: it wouldn't be possible if using a single type mapping
             against the double
  Rossen: Sounds reasonable

  Rossen: Anyone here prefer keeping doubles?
  Rossen: Why were doubles used? Why didn't we use CSSNumberish?
  flackr: Legacy. Animations were only in the time domain; I don't
          think numeric values existed when the API was defined
  Rossen: Sounds like we have a well-articulated path forward, and
          didn't hear anyone pushing for keeping doubles, so calling
          for objections

  fantasai: Wanted to ask if Birtles had an opinion
  flackr: Birtles was reviewing all the changes in Web Animations 2 to
          make this change
  flackr: so this is just checking with the rest of the WG
  flackr: Unless he changed opinion, expect he's on board
  Rossen: OK, we can take a resolution, and re-open if he has a problem
  Rossen: Didn't hear any objections, so let's resolved
  flackr: Brian actually commented on the issue in favor

  RESOLVED: Use CSSNumberish for "time" values in Web Animations API

Percentages vs Pixels for Scroll Timeline Values
------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/7045#issuecomment-1081276755

  flackr: For scroll-linked animations, now the question is, what is
          the internal time: is it percentages or lengths?
  flackr: This would specifically be for the output
  flackr: This is just for what we report to the developer; can take
          any type as input regardless
  flackr: Arguments for each are in the issue, but will try to summarize
  flackr: pixel-based is very analogous to the way time works for
          regular animations
  flackr: scroll-timeline is animating over a length
  flackr: whereas for percentages, these are pretty much exactly what
          the animation progress is, which is how devs specify keyframes
  flackr: and is closer to intersection-observer API as it relates to
          view timelines
  TabAtkins: Given resolution to the previous issue, is this just about
             how we should interpret a double in this case or can we
             return a typed value, and then is it a question of which
             typed value to return?
  flackr: Question of which typed value to return
  flackr: for setters, we could even throw for a double, since time
          values don't belong in a scroll animation

  TabAtkins: In that case, I suggest if the progress value changes as
             the scrollable area changes ...
  TabAtkins: If you freeze an animation, and you change the scrollable
             area size, the time value should stay constant
  flackr: Standard behavior is ... mapping to progress
  flackr: If a change in the scrollable length causes a change to the
          animation progress, using percentages the current time will
          also change to reflect that change in animation progress, but
          a length will not
  flackr: because would have the same absolute scroll position
  fantasai: I think that's a pretty convincing argument

  bmathwig: Just building on what Tab was saying, what are the
            artifacts that would occur should the case of an infinite
            scroller and timeline being used, and animation jumps back
            to a previous keyframe
  bmathwig: Would that cause a disruption in the continuity and
            disruption / artifact ?
  flackr: I don't think our decision here would affect that. We can
          accept either type as input
  flackr: The current behavior for most of the animation APIs is that
          you specify keyframes in percentage progress, so until we
          expand that to express absolute positions in time, won't have
          discontinuity
  flackr: Regardless of whether output value is pixels or percentages
  bmathwig: OK, then percent is interesting... I don't have an opinion,
            don't have enough context.
  Rossen: OK, where does that leave us?
  flackr: Seems we have slight preference for percentages, because maps
          directly to animation progress
  flackr: If there's no objections, I would resolve on that
  flackr: I think we can support both types in terms of specifying
          values
  flackr: which should make it easy for devs to work with this

  Rossen: Should we then try to resolve on percentages?
  <bmathwig> +1 for percentages
  Rossen: Any objections for using percentages for scroll timeline
          values?

  RESOLVED: Use percentages for scroll-timeline values

Container Queries
=================

CSS-wide keywords in style()
----------------------------
  github: https://github.com/w3c/csswg-drafts/issues/7080

  miriam: When we're doing style queries, question is how are CSS-wide
          keywords handled as values in the query
  miriam: Comparing that to computed value of the property
  miriam: Conversation is landing on, there are 2 different types of
          CSS-wide keywords and maybe want to handle differently
  miriam: cascade-dependent keywords like revert and revert-layer,
          should be disallowed entirely
  miriam: but initial and inherit could be supported
  miriam: So wanted to distinguish these types in Cascade spec
  miriam: and say in Container Queries spec that one is supported and
          other not
  miriam: That's the proposal here
  TabAtkins: I'm in favor
  fantasai: Me too
  TabAtkins: On the implementer side, Anders seems fine with this as
             well

  PROPOSAL: Make cascade-dependent keywords revert/revert-layer
            disallowed in style() queries
  RESOLVED: Make cascade-dependent keywords revert/revert-layer
            disallowed in style() queries

  PROPOSAL: other css-wide keywords (initial, inherit, reset) are
            allowed
  RESOLVED: Other css-wide keywords (initial, inherit, reset) are
            allowed

container ;/ style
------------------
  github: https://github.com/w3c/csswg-drafts/issues/7142

  miriam: With the container shorthand, it takes 2 values, and because
          one of them accepts custom idents and other accepts keywords
          and hard to distinguish, we have a slash separator
  miriam: At this point both are optional
  miriam: so can get into situation where you can make this frowny face
          in the property declaration syntax
  miriam: He suggests it looks weird, unsure if it's an actual problem
  miriam: One possibility is to make container-name required in the
          shorthand
  miriam: The only reason to use the shorthand would be to set both
  miriam: with it required, would have to set 'none' as container name
          if you want to not have a name
  miriam: I don't feel strongly one way or another
  miriam: We do want to encourage names, so ...
  <TabAtkins> Fine with this, or we can fix the optionality by using
              the `[...]!` syntax in the grammar
  <TabAtkins> (To resolve the "empty value becomes valid" problem
              raised.)

  emilio: I see a very similar issue and what we're testing
  emilio: What WPT is testing is container-type being mandatory and
          container-name being optional
  emilio: Why would you specify just the name?
  miriam: Right now we have default container-type of style on all
          elements
  miriam: so that makes it optional
  miriam: Sometimes would just want to add a name to the style container
  emilio: But shorthand expands to set container type to none
  fantasai: We changed the initial value to style

  Rossen: Seems we're running out of time here
  Rossen: Not hearing any pushback on making container name required,
          is it something we can resolve?
  * fantasai doesn't have a strong opinion either way
  miriam: That's just for the shorthand syntax
  emilio: ...
  emilio: It makes sense to check what WPT tests are checking, optional
          name and required type
  Rossen: Sounds we're not ready to resolve today
  Rossen: We'll end the call here, and recommend for posting opinions
          in issue
  Rossen: and we can bring it first thing next week

  Rossen: Done for now
  Rossen: See you next week

Received on Wednesday, 30 March 2022 23:14:40 UTC