[CSSWG] Minutes Telecon 2022-04-20 [css-ui-4] [css-text] [mediaqueries] [css-images-4] [css-color] [css-values]

=========================================
  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 UI 4
--------

  - RESOLVED: Accept Florian's pr and submit the corresponding one to
              HTML (PR #7224: Provide hooks for HTML to define
              rendering for widgets)

CSS Text
--------

  - RESOLVED: Reverse previous resolution. Add a unit instead, name tbd
              (Issue #3232: Syntax for percentage-of-width-of-space for
              'word-spacing')

Media Queries
-------------

  - RESOLVED: Have preferred-color-scheme reflect 'color-scheme' on the
              embedding element in the embedding document, to the
              extent acceptable from security standpoint (pending
              security review) (Issue #7213: Should
              prefers-color-scheme in SVG images be context-dependent?)

CSS Images 4
------------

  - RESOLVED: Force iframe/object/embed/any other scriptable
              document-embedding element to object-overflow: clip
              !important; via UA rule (Issue #7143: object-* properties
              and the iframe element)

CSS Color
---------

  - Chromium and Gecko will investigate their filter color space to see
      if the proposed solution for issue #7100 (Should no-op filters
      produce different output from no filter?) will be okay.
  - RESOLVED: System colors compute to absolute colors, but must not be
              affected by forced-colors mode (Issue #6773: Make system
              colors fully resolve (but flag they were system colors)
              thus reversing the resolution of #3847)
  - RESOLVED: Republish css-color-4 and css-color-5

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

  - As the call was concluding, there was consensus building to have
      NaN become 0 instead of ∞. Discussion will continue on issue
      #7067 (Make top-level NaN be invalid at computed value time
      instead of ∞) and then come back to the group for resolution.

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

Agenda: https://lists.w3.org/Archives/Public/www-style/2022Apr/0009.html

Present:
  Rachel Andrew
  Adam Argyle
  Rossen Atanassov
  Tab Atkins Bittner
  David Baron
  Oriol Brufau
  Tantek Çelik
  Daniel Clark
  Emilio Cobos Álvarez
  Elika Etemad
  Simon Fraser
  Mason Freed
  Megan Gardner
  Chris Harrelson
  Jonathan Kew
  Daniel Libby
  Rune Lillesveen
  Chris Lilley
  Peter Linss
  Alison Maher
  Morgan Reschenberg
  Florian Rivoal
  Alan Stearns
  Miriam Suzanne
  Lea Verou

Scribe: TabAtkins

CSS UI 4
========

Provide hooks for HTML to define rendering for widgets
------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/pull/7224

  florian: A while back, zcorpan made a PR against CSS UI and HTML to
           link the specs together better, and give HTML a way to
           define how appearance:none works for the different widgets
  florian: The two specs shared an algorithm for exactly how the
           appearance disabled, etc
  florian: Normatively it was fine, but editorially I thought the css/
           html split wasn't ideal. The CSS spec ended up defining a
           button, slider, dropdown, etc, but in a very lightweight way.
  florian: Then there was back-and-forth bouncing for the dfns.
  florian: This new PR reorganizes the concept, putting the
           HTML-specific stuff into HTML and defining some concepts in
           CSS that HTML can rely on
  florian: Luckily zcorpan likes the rebalancing.
  florian: And for clarity I did this with fantasai so that makes three
           of us that like it

  Rossen: Just reiterating, looks like zcorpan likes the approach, and
          it's equivalent except transform-origin
  florian: Right, forgot that normative difference. We have a separate
           issue for that question.
  Rossen: Second question is about revert-level vs revert, he was
          wondering if this was meant to be revert-layer
  florian: defer to fantasai
  fantasai: Yes, of course

  florian: So proposed resolution is, after correcting the revert-level
           mistake, accept the PR and submit the corresponding HTML
           half as well
  Rossen: Comments or objections?

  RESOLVED: Accept Florian's pr (7224) and submit the corresponding one
            to HTML

CSS Text
========
  scribe: emilio
  scribe's scribe: TabAtkins

Syntax for percentage-of-width-of-space for 'word-spacing'
----------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/3232

  TabAtkins: Last week we agreed to go ahead and accept that the new
             unit can just be a number
  TabAtkins: It was since pointed out that in svg word-spacing is
             defined and SVG allows all length properties to be
             specified as number
  TabAtkins: which maps to pixel
  TabAtkins: After that I realized that word-spacing accepts quirky
             lengths
  TabAtkins: so `word-spacing: 2` maps to pixels
  TabAtkins: Given we were not super-happy with numbers I propose to
             reverse the resolution
  TabAtkins: and resolve that we will give it a unit name

  emilio: We may be able to get away with numbers if we say that they
          mean spaces in non-quirks mode
  emilio: All major browser engines map SVG attribute numbers to pixels
          at parse time
  emilio: You can parse numbers at quirks mode and still have a
          specified value px
  Rossen: Then you'll have a type difference which is weird
  emilio: If you get css text between a quirks and non-quirks
          stylesheet it can be confusing, but otherwise this is already
          an issue
  emilio: Not opposed to a unit, just pointing out that it *is* possible

  RESOLVED: Reverse previous resolution. Add a unit instead, name tbd

Media Queries
=============
  scribe: fantasai

Should prefers-color-scheme in SVG images be context-dependent?
---------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/7213

  emilio: We got an interesting bug report in Firefox
  emilio: When you have a Firefox theme that's dark, but OS theme is
          light
  emilio: sites can't choose a reasonable favicon for dark mode
  emilio: Suggestion is to make preferred-color-scheme for SVG images
          reflect the used color scheme
  emilio: Then could have light+dark icons anywhere in your page, and
          then as long as your parent has the correct color-scheme will
          display correctly
  emilio: Maybe worth making this more general
  emilio: Tab seemed to have some reservations

  TabAtkins: This makes a cross-origin communication bit, and we try to
             restrict those
  TabAtkins: use case makes sense
  TabAtkins: Just one more bit that you can use to talk to an iframe,
             and every bit counts
  TabAtkins: but if that's considered not too much of a problem, then
             I'm fine with it
  emilio: It's a communication channel in the sense that the SVG could
          request a different image or something
  emilio: but SVG images don't run script
  emilio: I think Chrome did something like this for iframes, don't
          know the details of that
  emilio: If your iframe is in color-scheme: ? then you force a light
          background

  futhark: Behavior for iframes with different color scheme than parent
           document is specified in the spec, that you set the
           background of the iframe if 'color-scheme' doesn't match
           parent
  futhark: so you don't wind up with black on black or white on white
  futhark: Wanted to ask, has anyone asked for similar functionality
           for iframe?
  futhark: or will there be other cases?
  futhark: other than SVG

  fantasai: If the concern is cross-origin, why not restrict to
            same-origin
  emilio: Possible, but maybe awkward

  emilio: wrt Rune's question, we actually do that for some frames
  emilio: e.g. for extension popups in Firefox, they're just iframes
          inside a popup
  emilio: we make those inherit the color scheme of Firefox in a
          similar fashion
  emilio: so we already have this code to make it work for iframes
  futhark: We do something similar for <select> popups in Chrome
  futhark: If you have <select> with a color scheme, that affects the
           drop-down render
  emilio: This seems generally a useful thing then
  emilio: Main question is whether it's reasonable, given the issue Tab
          mentioned
  emilio: I'm not sure I'm the right person to make that assessment
  emilio: What about we ask people in privacy/security what they think
          about this?
  emilio: If we accept it, then we can consider doing iframes as well

  Rossen: Seems like a reasonable path forward
  Rossen: I think general consensus of the group leans towards the
          proposal
  Rossen: pending feedback from Security folks
  Rossen: So my proposal is to end the discussion here, and then get
          back to it as we gather more information
  fantasai: Could resolve that we want to do this, if reasonable from
            security standpoint
  <TabAtkins> Always useful to resolve, if for no other reason than to
              have a neat conclusion easy to read at the end
  Rossen: Any objection to record this as consensus of group?
  PROPOSAL: Have preferred-color-scheme reflect 'color-scheme' on the
            element in the embedding document, to the extent acceptable
            from security standpoint

  RESOLVED: Have preferred-color-scheme reflect 'color-scheme' on the
            embedding element in the embedding document, to the extent
            acceptable from security standpoint (pending security
            review)

CSS Images 4
============

object-* properties and the iframe element
------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/7143

  TabAtkins: When I was discussing the object-overflow property
             internally, it was brought up in security review that
             allowing iframes escape the bounds, even if embedding page
             opts into it, because they can change content arbitrarily
             via script
  TabAtkins: use cases for this seem fairly minimal
  TabAtkins: main use case for this property was to allow images to be
             larger than their content bounds
  TabAtkins: iframes don't make as much sense
  TabAtkins: so go ahead and enforce that iframes always stay clipped,
             with UA !important rule
  TabAtkins: Other HTML elements were also brought up, e.g. embed,
             object, ??, and I'm not sure about SVG foreignObject
  <chris> foreignObject is basically an iframe
  TabAtkins: Proposal is to force iframe object embed and any other
             HTML or SVG elements that can be scriptable to clip via UA
             !important rule

  smfr: Can authors override UA !important?
  TabAtkins: no
  <chrishtr> proposed resolution sgtm

  RESOLVED: Force iframe/object/embed/any other scriptable
            document-embedding element to object-overflow: clip
            !important; via UA rule

CSS Color
=========

Should no-op filters produce different output from no filter?
-------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/7100

  smfr: Issue here is that CSS filters are specified to use sRGB as
        their color interpolation model
  <chris> they use linear-light sRGB
  smfr: This is a problem when authors apply filters to colors outside
        of sRGB gamut
  smfr: e.g. display-p3 or color specified with LCH color space
  smfr: This is important because often authors will apply no-op
        filters, with intent to animate later
  smfr: This means such filters will flatten the colors
  smfr: In testing, looked like Chrome isn't doing this: they allow
        out-of-sRGB colors through filters
  smfr: WebKit does limit colors to sRGB
  smfr: Don't think this is desirable
  smfr: One, I think authors expect no-op filters to not have an effect
  smfr: And second as an implementer, I'd like to optimize away such
        filters by not doing anything special
  smfr: Since CSS specifies sRGB compositing and filters are specified
        to do this also
  smfr: CSS uses non-linear sRGB
  smfr: so I'm not sure how to resolve this, because I don't think we
        specify our color compositing model in a way that matches
        browsers
  smfr: Maybe Chris has an opinion

  chris: Correct that filters use sRGB and clamp at each stage in the
         pipeline
  chris: They do use linear-light sRGB
  chris: They don't use gamut-encoded values
  chris: Very obvious when you're doing it wrong
  chris: I suggested a way forward for this, beefing up filters to have
         a wider color gamut
  chris: Simon said very nice, but doesn't solve my issue which is
         no-op filter
  chris: My concern about is that as soon as someone starts to animate,
         from 0 to 0.01, then there's a sudden change
  chris: I can see that it would help with no-op filters, but not with
         an animation case
  smfr: That's very true, and that's why I think we need to specify
        that CSS filters interpolate in the working color space, so
        that they don't truncate colors?
  chris: The concept of a working color space isn't well-defined
  chris: we have different ones for different operations
  chris: Talking about compositing, but not just compositing, it's also
         the conversion from luminance or conversion from saturation,
         all use constants from sRGB and not display-p3
  chris: Need to fix that, and the way to fix that is to continue using
         sRGB ones, and because in linear-light make them extended, and
         in that way can represent all other colors as well
  chris: I think that's the best minimal change, otherwise you
         have [problems]
  smfr: That would be fine...
  chris: If we can bash this out, would be great

  smfr: Would be interested in hearing from Chromium and Gecko, what
        their filter color space is
  chrishtr: I'll have to check
  emilio: Same here
  emilio: but pretty sure we have code to optimize away no-op filters
  Rossen: So, do more investigation on Chrome and Gecko side and then
          come back to this?
  chris, smfr: sounds fine
  * chrishtr will investigate

Make system colors fully resolve (but flag they were system colors)
    thus reversing the resolution of #3847
-------------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/6773

  chris: We basically got agreement on this issue, Alison seemed to
         like what I proposed and I drafted into the spec
  chris: Need to update tests on WPT
  chris: and any knock-on effects in other issues
  chris: Apart from that, I think issue is ready to close
  <fantasai> needs a WG resolution though

  chris: Proposal is to make <system-colors> fully resolve, but flag
         they were system colors so that forced-colors mode doesn't
         touch them
  smfr: For forced color mode, does that implementations that don't
        implement forced color mode, but do implement light and dark
        mode don't need flags?
  TabAtkins: Flags only necessary for forcing colors

  fantasai: I think the other behavior would be better, but I
            understand it's debatable and this is easier to implement
            because you don't need to maintain all the system colors as
            separate channels
  fantasai: The flag part is an internal impl detail; we just need to
            spec that these colors, even tho they resolve, need to stay
            as-is in forced colors mode.
  chris: Suggested wording?
  fantasai: I can come up with some, yeah

  chris: Once we resolve on this, can I ask for another resolution?
  Rossen: Any objections to this proposed resolution?

  RESOLVED: System colors compute to absolute colors, but must not be
            affected by forced-colors mode.

  chris: There's been this change and some others, would like to
         resolve to re-publish Color 4 and Color 5
  <fantasai> +1
  Rossen: Any objections?

  RESOLVED: Republish css-color-4 and css-color-5

  <chris> once the improved wording from fantasai is in, of course

CSS Backgrounds 4
=================

Issues with listifying border-color
-----------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/2532

  lea: Let's wait until Sebastian can attend

CSS Highlight API
=================

Triggering restyling/repainting
-------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/4596

  ??: Merged the PR to resolve this, unsure if Florian has anything to
      add here?
  <florian> [no, I'm good]

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

Make top-level NaN be invalid at computed value time instead of ∞
-----------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/7067

  TabAtkins: When we added the ability to do arbitrary unit math to
             calc(), we introduced the ability to divide by zero
  TabAtkins: these turn into infinities, fine, handle as large number
  TabAtkins: We also introduced NaNs, though
  TabAtkins: We don't now how to make those behave
  TabAtkins: We can't know what author intended without inspecting code
  TabAtkins: so need to do something arbitrary to NaN
  TabAtkins: Current spec turns NaN into infinity if it escapes a
             calc() function
  TabAtkins: I chose this because a) NaN is definite an authoring
             error, always a mistake
  TabAtkins: b) infinite is the most likely value to look wrong if
             you're doing something with this
  TabAtkins: We have an unofficial policy throughout CSS, whenever we
             have a situation that can't detect at parse time, but is
             obviously a mistake
  TabAtkins: we make it break in an obvious way, so that author is more
             likely to notice the mistake
  TabAtkins: rather than doing something more subtle, that might be
             missed
  TabAtkins: This came up during TAG review, and Lea suggested that
             it's better handled as "invalid at computed value time"
             behavior
  TabAtkins: I don't have a strong opinion on this
  TabAtkins: my only objection to changing behaving time is that it
             won't be invalid at computed value time, might not know
             it's invalid until *used* value time
  TabAtkins: so similar to IVACT, but distinct
  TabAtkins: And whatever effect it has would behave differently wrt
             inheritance, for example
  TabAtkins: The other reason is that I think IVACT behavior is less
             likely to be noticeable
  TabAtkins: It's less likely to be obviously wrong, compared to
             treating as infinity
  TabAtkins: I think NaN should break things as much as we possibly can
  TabAtkins: and would be useful for authors to give them the more
             broken rendering
  TabAtkins: but open for discussion

  lea: I don't remember most of the arguments from TAG review, but
       think there's a more fundamental principle here
  lea: Errors don't always arise from authoring, sometimes from
       user-generated or other variable input
  lea: and user will be first to see this
  lea: I want to avoid making the website unreadable
  lea: For things like layout, can be very bad
  lea: I'm not opposed, but problem with infinity because it would
       introduce really bad breakage, would be seen by users first
  TabAtkins: I don't agree that invalid at computed value time is less
             likely to break
  TabAtkins: If you're specifying a width as a calc(), that's going to
             be some specific value. If at some point, because using
             variables, results in a NaN and becomes invalid at
             computed time, that'll switch to 'auto'
  TabAtkins: which is just as completely different from author's intent
             as infinity is
  TabAtkins: We cannot divine an intent from a NaN
  lea: Width: auto might produce a layout that's not intended, but not
       the same level as breakage as infinity
  lea: which can stretch out of the viewport and make content unreadable

  emilio: I was going to point out what Tab pointed out, that we still
          have an issue of what happens if NaN happens at used value
          time
  emilio: I'm not a fan of introducing behavior that depends on cascade
          before/after
  emilio: if we detect NaN at computed value or used value time...
  * lea thinks maybe we need an invalid at used value time concept?
  emilio: As for what specific behavior, I don't have a super strong
          opinion
  emilio: When we define NaNs in ..., we normalize to zero.
  emilio: Usually just happens in testcases
  <iank> we can only really determine this stuff at used value time.
  emilio: I don't think it will matter in practice
  emilio: I think zero is a bit more reasonable, doesn't create
          infinite scrollbars
  emilio: I think I'm not a fan of the 2 different behaviors based on
          when you find the NaN

  oriol: I'm not a big fan of the currently-specified behavior of
         treating NaN as positive infinity, which seems arbitrary to me
  oriol: That's why I filed this issue to try to choose something
         closer to invalid at computed value time
  oriol: During discussion realized this would be a problem for
         properties that have multiple components
  oriol: Maybe only one of these is NaN
  oriol: And sometimes we turn these properties into shorthands
  oriol: If we invalidate the entire property now, and later turn it
         into a shorthand, then we would only invalidate specific
         longhands
  oriol: To prevent this creating a change in behavior
  oriol: we would need something like var(), which on shorthands sets
         all longhands to a pending substitution value
  oriol: So now I'm more aligned with choosing a specific number for
         NaN instead of an approach similar to IVACT
  oriol: I'm not sure infinity is the best, maybe zero or minus infinity
  <TabAtkins> If it's infinity specifically that bugs people, I can go
              with "treat as 0".
  <TabAtkins> Just as likely to be wrong, but less likely to pop
              scrollbars.
  <lea> I think "treat as 0" is more reasonable. width: 0; overflow:
        hidden would be problematic, but hopefully that'd be rare

  Rossen: I think that during our discussion, and reason to revisit,
          the compounding effect of infinity can have very
          unpredictable results based on current user settings,
          viewport size, fonts available, etc.
  Rossen: that will make detect-ability of such errors difficult for
          authors, since spurious at best
  Rossen: Given we're out of time, don't want to force a resolution
  Rossen: but want to really go back and continue and see if we can
          agree on something more platform friendly
  TabAtkins: In IRC, discussion changing to zero
  TabAtkins: I'm fine with that, Lea's fine with it
  <chris> zero looks better to me
  Rossen: Ok, let's return to that next week
  <fantasai> zero sgtm

  <dbaron> Yeah, I think I'm happier with 0 than infinity as well.
  <emilio> For the record, the NaN -> 0 behavior in Gecko is from
           https://bugzilla.mozilla.org/show_bug.cgi?id=1691652

Received on Wednesday, 20 April 2022 23:06:47 UTC