[CSSWG] Minutes Telecon 2021-08-25 [css-contain] [css-highlight-api] [css-cascade-5] [css-fonts-4] [css-nesting]

=========================================
  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: content-visibility:hidden prevents scrollIntoView() and
              similar functionality from working on the subtree (Issue
              #6529: Should scrollIntoView scroll to
              content-visibility:hidden subtree elements)

CSS Highlight API
-----------------

  - RESOLVED: When an author uses a static range for highlight API, it
              should actually be a static range internally, not backed
              by a hidden live range (Issue #5497: Invalidation of
              static ranges)
  - RESOLVED: Publish a new Highlight API WD when changes are made

CSS Cascade 5
-------------

  - RESOLVED: @layer statements must occur before or after all
              @imports, not interleaved (Issue #6522: Proposal to
              disallow interleaving of @layer and @import rules)

CSS Fonts & Nesting
-------------------

  - Based on the TAG feedback on extending the format() syntax for
      'src', work was done on supporting font-tech queries in
      @supports. (Issue #6520: Nesting of @supports inside @font-face
      and font technology feature queries)
  - There were several people expressing support, but some concerns
      around font-families combining and not having an else syntax or
      inline/nested supports.
  - The group will return to the topic next week to try and reach a
      resolution.

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

Agenda: https://lists.w3.org/Archives/Public/www-style/2021Aug/0019.html

Present:
  Rachel Andrew
  Adam Argyle
  Rossen Atanassov
  Tab Atkins Bittner
  Christian Biesinger
  Emilio Cobos Álvarez
  Elika Etemad
  Megan Gardner
  Chris Harrelson
  Sanket Joshi
  Brad Kemper
  Jonathan Kew
  Vladimir Levin
  Daniel Libby
  Chris Lilley
  Peter Linss
  Alison Maher
  Myles Maxfield
  Morgan Reschenberg
  Cassondra Roberts
  Dominik Röttsches
  Miriam Suzanne
  Lea Verou

Regrets:
  Daniel Holbert

Scribe: TabAtkins
Scribe's scribes: fantasai & emilio


  Rossen: Any additional items?
  astearns: Might need some extra wording in CRDs to trigger
            wide-review tooling checks. Chris, do you know which drafts
            are having this problem?
  astearns: Apparently there's some tooling the W3C has added for
            soliciting wide review, and there's some magic words that
            we need to add to CRDs we need wide review for
  fantasai: I don't think we've published anything lately that need
            this. We have resolutions on some, but haven't published
            them yet
  fantasai: And so far we've solicited wide review manually, so it
            shouldn't be a problem
  <fantasai> if you've been publishing the instructions on the wiki
             anyway https://wiki.csswg.org/spec/publish
  Rossen: So maybe we just have to update the wiki if the tooling
          updates?
  Rossen: I'd encourage Chris to follow up on this and see if there are
          any edits needed

  ??: Could we bump the highlight topic up? sanketj wanted to
      participate but has a 9:30 conflict

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

Should scrollIntoView scroll to content-visibility: hidden
    subtree elements
----------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/6529

  vmpstr: We have content-visibility:hidden that hides the content of
          the subtree, and spec says that the contents should not be
          available to UA features like focus, find-in-page, etc
  vmpstr: I think one of the features it should be restricted from is
          fragment nav
  vmpstr: I don't want to scroll into the hidden content
  vmpstr: But the current fragment nav text points to scrollIntoView()
          for defining it. and scrollIntoView() says we scroll as long
          as there's a layout box
  vmpstr: My hope is we can prevent scrollIntoView() for
          content-visibility:hidden subtrees
  vmpstr: I think last comment from Chris is that we should change
          scrollIntoView() to say "if it doesn't have a layout box, or
          is not available to UA features, return"
  <bradk> Is content-visibility in a draft?
  <astearns> bradk: https://drafts.csswg.org/css-contain-2/#content-visibility
  <leaverou> Does that mean we also don’t scroll to disabled form
             controls since they can’t be focused?
  TabAtkins: I support this

  vmpstr: To be specific we gen the layout box in the subtree when we
          *need* to, such as to getBoundingClientRect() on the subtree
  vmpstr: So the layout box *is* theoretically there, but it's
          generated on demand. We just don't want that to happen here.
  Rossen: Can we get a tighter definition for "available to UA
          features"? It's very broad
  Rossen: What would be the better scoped version of that? Is it just
          for focusing?
  vmpstr: I think it should be "behaving similar to display:none", it's
          not just focus
  vmpstr: display:none *also* doesn't have a layout box, but this does
  chrishtr: We can scope it by "if you have a content-visibility:hidden
            ancestor"
  Rossen: Okay so if it's hidden or has an ancestor
  chrishtr: Only ancestor. If the element itself has it, it's still
            there on the page like normal
  <leaverou> But ancestor can be overridden by another ancestor lower
             down
  <leaverou> Perhaps if the computed value of the parent is
             content-visibility:hidden?
  TabAtkins: I think best is to define the term somewhat generally, and
             say that content-visibility:hidden is the only way to
             trigger the term currently
  <leaverou> Agreed as well

  Rossen: Any more comments?

  RESOLVED: content-visibility:hidden prevents scrollIntoView() and
            similar functionality from working on the subtree

Highlight API
=============

Invalidation of static ranges
-----------------------------
  github: https://github.com/w3c/csswg-drafts/issues/4597

  dandclark: This was originally what the criteria was to invalidate a
             static range during DOM mutations
  dandclark: discussion evolved into use of StaticRange more generally
  dandclark: So when an author adds a StaticRange to a highlight,
             should we internally back it with a live range? Or just
             let it stay static
  dandclark: I want to advocate we use statics internally
  dandclark: One for performance; static range is better for
             performance in some cases when there's a lot of DOM
             mutations
  dandclark: Team has done some benchmarks and shown the performance
             diffs aren't theoretical
  dandclark: And issues with invalidation of static ranges during paint
             time can be addressed with invalidation caches
  dandclark: So if they're backed with live ranges internally, we
             pretty much lose all the benefits and there's no reason to
             support it
  dandclark: Second is some issues sanketj pointed out
  dandclark: If a static is backed internally with a live range, the
             author doesn't have a ref to it, so how do they manipulate
             this
  dandclark: Like if a highlight is unregistered, should we maintain
             it? Highlight can be reregistered, unsure what the
             lifetime is
  dandclark: So I'd like to get agreement that the internal range is
             indeed static

  chrishtr: So your proposal is that the static range is not live
            internally, and as a result, when the highlight api uses a
            static range it's ignored if it's invalid
  chrishtr: [missed]
  dandclark: There are some cases like "start before end" that you
             might have to treewalk to determine; it's not
             constant-time to determine
  dandclark: You can largely cache validity status and be fine; if
             there's no dom mutations you're guaranteed right
  chrishtr: But if the dom mutation was non-trivial, the UA might have
            to treewalk in the worst case?
  dandclark: Yeah
  chrishtr: And you couldn't avoid that situation?
  dandclark: I think UAs could in theory do some optimizations, but the
             simplest way is to just cache the data; you won't have
             mutations between every paint in practice
  chrishtr: So the script usually will make a static range and then
            immediately add it to the doc
  dandclark: yeah

  florian: Agree. I think this is the right thing to do; it's why we
           proposed having static ranges in the first place
  florian: Live ranges can be costly, and it might not even be a useful
           cost
  florian: If the DOM changes and the UA updates the range, whether or
           not the updated range is what the author actually wanted
           isn't clear
  florian: So paying the cost of updating the live range, only to
           immediately discard it and regenerate the range, is silly.
  <sanketj> +1 to the proposed resolution
  <chrishtr> +1
  <GameMaker> +1
  Rossen: Any further comments?
  GameMaker: Agreement; webkit has the same performance issues that
             Chrome does, so +1

  RESOLVED: When an author uses a static range for highlight API, it
            should actually be a static range internally, not backed by
            a hidden live range.

  florian: Do we think we need a spec change to reflect this? Or is the
           spec already sufficiently implying this?
  dandclark: I think the spec is clear as-is; we'd only need a change
             if we decided the other way

  dandclark: There's another issues about invalidation we could
             discuss; it was the original issue.
  sanketj: I think it would be good to have a note about using static
           ranges internally
  sanketj: So for interop we should have an explanation
  florian: We say already that when you use a static range they
           shouldn't be updated, but we can work over the note
  dandclark: I can look over it

Publication
-----------

  fantasai: Last publication of this draft was Dec 2020; given changes,
            we should get an update onto TR
  fantasai: ED claims there's only been minor changes since last WD,
            that probably isn't true
  florian: Agree. I'll start making sure the changes section is up to
           date
  Rossen: Should we get a resolution to republish the WD when it's
          ready?

  RESOLVED: Publish a new Highlight API WD when changes are made

CSS Cascade 5
=============

Proposal to disallow interleaving of @layer and @import rules
-------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/6522

  miriam: xiaochang is working on a cascade layers impl, and was
          concerned about allowing `@layers ...;`rules allowed anywhere
          in the doc, including between @imports
  miriam: He's suggesting instead we just allow them before or after
          all the imports, but not between
  miriam: I think that's fine; there's no functionality loss, just a
little bit of flexibility. I'm fine with this.
  <fantasai> wfm
  <chrishtr> +1

  Rossen: Seeing support, any other opinions? Objections?
  emilio: I'd argue we should only allow after
  emilio: The less syntax we have to mess with preload scanners the better
  miriam: That actually does reduce functionality, we need to be able
to order layers before we import them
  emilio: That means the scanners need to deal with this
  emilio: Do we also allow the block syntax?
  fantasai: No, we disallow that intentionally
  emilio: Okay, as long as there's no arbitrary blocks before the
imports it's okay

  RESOLVED: @layer statements must occur before or after all @imports,
not interleaved

Fonts & Nesting
===============

Nesting of @supports inside @font-face and font technology feature
    queries
------------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/6520

  leaverou: A little background, in the TAG review request the current
            syntax is extending the format() syntax for 'src'
  <leaverou> https://github.com/w3c/csswg-drafts/blob/main/css-fonts-4/src-explainer.md#use-case-3-detectability
  leaverou: It hasn't been implemented yet; Chrome is keen to implement
            quickly
  leaverou: In the TAG we recognized the use-case, but were concerned
            about a new microsyntax when @supports already exists
  leaverou: So was thinking about how we could utilize @supports, and
            posted this issue
  <chris> Explainer for current src descriptor
https://github.com/w3c/csswg-drafts/blob/main/css-fonts-4/src-explainer.md

  leaverou: Two things. First, adding a new @supports query for
            detecting font tech.
  leaverou: Lets authors differentiate their CSS in other places;
            existing proposal only lets them use it when selecting font
            source.
  leaverou: Could imagine authors wanting different CSS for a
            monochrome vs color font
  leaverou: This also makes it much easier to programmatically detect,
            vs doing rule hacking and seeing if there is a syntax error
  leaverou: Google said they could add the font-tech queries in
            @supports easily
  leaverou: Second bit is to let @supports nest inside of @font-face,
            extending the Nesting proposal
  leaverou: But that would be a more substantial request
  leaverou: So proposal is just to add the @supports queries for now -
            it does the job, if a bit clunky. And in the future perhaps
            do the nesting thing.

  drott: Good summary. I'd support font-tech queries in @supports
  drott: And am open to later improving it by integrating Nesting, but
         the immediate benefit is just feature detection, so the
         @supports queries works for me.
  drott: I've made a syntax proposal for Conditional 4 to support this

  chris: I wrote an explainer for it
  chris: [missed due to bad audio]
  chris: TAG asked for an explainer; having written it, it was clear
         the only benefit of the existing syntax is that old browsers
         would parse without falling over
  chris: It has no other redeeming features. It's an ugly complex
         microsyntax and is hard to read
  chris: I think using @supports makes sense even if we can't use it
         directly in @font-face
  chris: We've got some examples in the thread and I think it reads
         easily

  emilio: I like this
  emilio: Only question is if there's another place we need to parse
          this font stuff?
  emilio: To avoid the "specialized parser" thing that we try to avoid
          with @supports
  TabAtkins: While trying to avoid specialized parse is a general goal
  TabAtkins: We recognized there will be cases where we do
  TabAtkins: as long as we're carefully scoped wrt feature queries that
             are not just parsing-based, should be OK

  myles: One question - if an author uses @supports, is there a way to
         say "else"?
  myles: If there's not a way to do that... @font-faces join together
         to form a family, rather than overriding
  emilio: Can use "not"?
  myles: "not" is both "fails the query" and "doesn't understand"
  chris: Usual fallback is to put something normal outside, then
         override in a @supports
  myles: Right, that's problematic; if it's supported it'll define a
         combined family using both @font-face rules.
  myles: Author probably wants it to override
  myles: If they're careful they might override, like all same weight/
         etc, but if they didn't they'll both be present
  myles: and they will join together to form a family
  myles: If descriptors aren't identical, might end up using both fonts
         in the page instead of only the second one
  chris: We already have this thing where font faces can combine
         together into a family, that's by design
  TabAtkins: He's saying that conflicts with the author's design here.
  myles: Right, if you have the non-conditional outside and the
         conditional inside, that's brittle
  TabAtkins: This is a general problem with a lot of things
  TabAtkins: We don't have an answer to negate a query, but there's a
             proposal for an "else" on conditional rules
  TabAtkins: if there's implementer interest I'd be happy to revive it
  <TabAtkins> https://tabatkins.github.io/specs/css-when-else/

  <dbaron> some of these problems seem specific to @font-face inside
           @supports rather than @supports inside @font-face
  <fantasai> +1 dbaron[m]

  myles: I think there isn't a lot of sense to build the stopgap
         solution on something that doesn't exist yet
  myles: If the oracle delivered us some way of having an else attached
         to @supports tomorrow, that would solve the problem

  drott: I think this is an improvement over the current proposed syntax
  drott: You're basing this on the concern on the likelihood of a typo;
         I think most will be coming from 3rd party fonts so that's not
         really a concern
  drott: Second, in browsers where author expects font-tech(color) to
         work, "not" would work
  myles: I think it would help if after this call we could have an
         example of the fallback
  <chris> the issue already has such an example
  leaverou: There's a snippet in the issue that Chris posted

  leaverou: I think drott mentioned most points
  leaverou: Reminder that this isn't *ideal* but it can be done
            quickly, and when we go on to nesting it'll work without
            duplication
  leaverou: Also think having "else" in a conditional block would be
            super useful; it shouldn't hold this up though.
  <drott> +1 for not blocking on an else block
  <TabAtkins> Agreed, fwiw

  dbaron: My understanding of myles' concern is - I think a lot applies
          if we have @supports { @font-face{}}, but a lot of the
          proposal is doing @font-face { @supports{}}, and I don't
          think the interaction concerns apply in that case
  myles: Right. I have different feedback in that case, but the
         proposal is currently the first case.

  fantasai: First, given myles' example, I do have concern about
            allowing this without inline/nested supports, because of
            his mentioned concerns
  fantasai: Second, it seems the proposal is to add font-technology()
            function which include some features that could be part of
            a font format, but it's not clear to me how that relates to
            the font format
  fantasai: What if the browser supports colorv1 in woff2, but not
            others. Would we need to tie the feature query to a font
            format?
  chris: woff1 and woff2 are encodings of the same font tech (truetype)

  <chris> 1. stopgap 2. OM complexity inside @font-face 3. making other
          stylistic changes based on font support 4. unrelated to
          formats
  chris: The entire format string was a stopgap because we didn't have
         font mime types
  chris: So "stopgap" is a non-argument in my mind
  chris: If we do put @supports inside @font-face it complicates the
         OM; current proposal avoid that
  chris: Using @supports doesn't just allow switching font, it lets you
         vary other aspects of your style
  chris: Finally, the only reason supports were smuggled into format
         string is for parsing. But spec actually mandates OpenType and
         TrueType treated the same.
  chris: So the font technology is almost completely orthogonal to the
         format used
  chris: So decoupling as this proposal does is a much cleaner and
         nicer way

  leaverou: The concern myles brought up about typos is already
            existent; when authors write a family they could already
            typo and have the wrong family happen
  drott: As lea mentioned, the reason we brought to the TAG is it
         seemed helpful to get some time of feature detection for
         COLRv1, so I hope we can have CSS support for that at the same
         time
  Rossen: I think the TAG feedback was clear - COLRv1 is gonna be a
          great addition
  Rossen: Introducing new microsyntaxes is generally discouraged when
          we have existing feature-detect capabilities
  Rossen: I appreciate you have some implementation urgency on your
          end. Important to get what's gonna stick for the future right
          though.
  Rossen: So not sure I'm hearing the solution that addresses the
          current user needs and the tech being proposed
  Rossen: With two minutes remaining, unsure if we'll have a resolution
  Rossen: Propose we continue in the issue and bring this back next
          week for resolution

Received on Thursday, 26 August 2021 09:52:33 UTC