[CSSWG] Minutes Virtual F2F 2020-07-27 Part I: Grid, Overflow [css-grid] [css-overflow]

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

  - RESOLVED: The auto minimum size is zero for grid items that span
              multiple tracks when at least one of those tracks is
              flexible. (Issue #4783: Intrinsic contributions for
              items spanning flex tracks are not web compatible)
  - RESOLVED: When distributing the intrinsic contribution of a grid
              item, if it spans flexible tracks, excess size is
              distributed to those tracks and not to fixed/auto sized
              tracks. (Issue #4783)
  - RESOLVED: Accept the edits made to the ED re minimum vs
              min-content (and add WPT tests) (Issue #4790: Growth
              limits not increased with min-content contributions of
              spanning items)

CSS Overflow
------------

  - There was interest in exposing pan and zoom functionality through
      CSS (Issue #5275: Consider adding new CSS primitive for
      per-element panning and zooming (for web maps))
  - This is a complex space so it's important to make sure all use
      cases have been investigated and there is a proposal that takes
      them into account
  - Concerns were raised that on the web this wouldn't be used for
      maps since people will want their custom solutions. However there
      are other use cases such as PDFs that could also use pan and
      zoom.
  - An additional possible benefit would be standardizing the gestures
      for these actions which would be good for accessibility and
      interaction from new / unusual devices.
  - A possible solution would be to have new generic property that
      switches into pan+zoom mode and a gesture-based JS approach
      which authors could hook into and make their own approach.

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

Agenda: https://wiki.csswg.org/planning/virtual-summer-2020#monday

Present:
  Rossen Atanassov, Microsoft
  Tab Atkins-Bittner, Google
  L. David Baron, Mozilla
  Amelia Bellamy-Royds, Invited Expert
  Christian Biesinger, Google
  Mike Bremford, BFO
  Oriol Brufau, Igalia
  Tantek Çelik, Mozilla
  Dave Cramer, Hachette Livre
  Elika Etemad, Invited Expert
  Simon Fraser, Apple
  Daniel Holbert, Mozilla
  Dael Jackson, Invited Expert
  Una Kravets, Google
  Peter Linss, Invited Expert
  Alison Maher, Microsoft
  Myles Maxfield, Apple
  Cameron McCormack, Mozilla
  Tess O'Connor, Apple
  Manuel Rego, Igalia
  François REMY, Invited Expert
  Devin Rousso, Apple
  Jen Simmons, Apple
  Alan Stearns, Adobe
  Miriam Suzanne, Invited Expert
  Lea Verou, Invited Expert

Scribe: AmeliaBR

Upcoming Meetings
=================

  astearns: I don't think there's much housekeeping. TPAC will be
            virtual, need to start planning, hopefully more in advance
            then for this
  TabAtkins: When is TPAC?
  fantasai: Late October, but the TPAC week is for breakouts, groups
            are encouraged to do F2F not on that week, so TPAC will be
            more spread out to make room for time zones.
  fantasai: AC meeting also a separate week.

CSS Grid
========

Intrinsic contributions for items spanning flex tracks not web
    compatible
---------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/4783#issuecomment-587749012

  oriol: This is a web incompatibility issue.
  oriol: In the last published version of spec, we weren't taking into
         account intrinsic contributions of items that span multiple
         tracks, if one of those tracks was flexible.
  oriol: This doesn't make much sense. So we changed in ED, but when
         I tried to implement the change I had to revert because it
         wasn't web compatible.
  oriol: My proposal is to alter the draft to keep as much of the new
         behavior as possible, but still be web compatible.
  oriol: But I found 2 different problems.

  Oriol: First, there's a common pattern of 12 columns sized with 1fr.
         The intention is that all columns are equal sized & not
         overflow. But problem is that 1fr by default has `auto` min
         size, which takes intrinsic size into count.
  oriol: Right now, you don't see the auto min because most items span
         multi-columns. If we changed that so the intrinsic has an
         effect, you could make columns uneven or even overflow
         container.
  oriol: Now, this is partly an author error. You'd get the overflow
         if you had items that didn't span multiple columns. Could use
         minmax() to make it work, but since 1fr was working, authors
         didn't do that.
  oriol: So suggestion is that the auto min width of elements is zero
         if they span multiple tracks, at least one track is flexible.
  oriol: Then in the algorithm, we'd change the auto min width, but
         the rest would work out based on that.
  oriol: But if someone explicitly said `min-content` for minimum
         width, that would work correctly.
  oriol: I think this would handle most web compat issues.
  oriol: There's an example with code & images in the issue.
  <fantasai> +1 to Oriol's proposal

  jensimmons: So, right now this is about making things easier for
              authors? They *can* do what they want either way, but
              this is about making the default better?
  oriol: Right now in browsers, you can't use min-content or
         max-content for these items. It always behaves as zero. So
         the proposal is to support that. It's what the current draft
         was trying to do, but the change addresses the compat. Going
         back to always being zero isn't very useful.
  fantasai: FWIW, tab & I support the proposal.
  oriol: Should I cover the other issue, or resolve on this.

  PROPOSAL: The auto minimum size is zero for grid items that span
            multiple tracks when at least one of those tracks is
            flexible.

  astearns: Are there any concerns about having a switch based on
            spanning multiple tracks.
  fantasai: I think that's better than the alternative.
  fantasai: The published draft already has a switch based on spanning
            multiple tracks. It means we don't consider intrinsic
            sizes at all. The existing change to the ED got rid of
            that, but it's not compatible by default.
  fantasai: Oriol's proposal is that by default you get the current
            behavior, but if you specify something explicit that is
            used instead.
  fantasai: So yes, we have an inconsistency about whether the
            intrinsic size is considered, based on spanning multiple
            tracks. But we're shifting the inconsistency from the grid
            algorithm to the definition of auto min size.
  <fremy> fwiw, now that understand the difference between current and
          proposed, I support this change
  Rossen: But we're still having an inconsistency in auto min size.
          The default behavior isn't do the right thing.
  fantasai: Yes, but it's do what authors currently expect because of
            current implementations.
  Rossen: Is compat that bad?
  fantasai: Yes.
  Rossen: OK, so I guess this is least worst solution.

  RESOLVED: The auto minimum size is zero for grid items that span
            multiple tracks when at least one of those tracks is
            flexible.

  oriol: OK, the second problem affected authors who knew about the
         problem of using auto minimum in a flexible track, so they
         used an explicit minimum of zero, which then causes a
         separate problem.
  oriol: If you have 2 columns, one sized with minmax, other with 1fr.
         One item in auto column only, the other item crosses both.
  oriol: Author expects the flex item to fit the item that's only in
         that column, but we resolved in 3075 that *all* the flexible
         tracks, if they don't have an intrinsic minimum, it would be
         spread across all the tracks that an item spans.
  oriol: Otherwise, a minimum size on a particular item could cause it
         to overflow.
  oriol: But generally the element spanning both columns is the larger
         one, so this can result in stretching the column & therefore
         the other item too much.
  oriol: This could have been fixed with the content keywords, but
         since setting a minimum of zero was formerly a good way to do
         this, that's what they used.
  oriol: Proposal is to modify resolution from 3075. If an item spans
         flexible tracks, when running track-sizing algorithm, the
         intrinsic contribution will only be distributed among the
         *flexible* tracks it spans, not the non-flexible ones.
  oriol: That would solve this use case. There wouldn't be too much
         contribution going to the auto column, all the extra would go
         to the flexible one.
  oriol: The resolution we just took would still cover the use case we
         were trying to solve in the previous issue.

  astearns: We never resolved that other issue.
  fantasai: But the resolution we just had would address it, with this
            one modification.
  fantasai: I think there are some subtleties to define in what we
            mean by flexible tracks taking up this extra size. E.g.,
            depends on whether it has a fixed or intrinsic minimum
            size, and whether we're sizing the grid under a min size
            constraint.
  oriol: Should we do this at all if sizing under a min/max content
         constraint?
  fantasai: In that situation, we always consider the contents. That's
            expected. But I think we still have some errors there were
            we consider the max, but not the min. So we do need to
            think about those details.
  <fantasai> https://drafts.csswg.org/css-grid-1/#algo-flex-tracks
  fremy: My impression of this topic is that we had something widely
         implemented that we didn't think was well designed, but now
         we're making piecemeal changes to try to fix compatibility.
         But I'm afraid we're going to get inconsistent implementation
         where some browsers make some of these changes but not
         others. Reminds me of CSS tables, in a bad way. We're going
         to need careful tests to make sure we have consistency.
  TabAtkins: Elika & I have been adding tests against the changes
             section, so we should catch that quickly.
  fantasai: And we can add tests for these changes in next couple
            weeks.
  astearns: So, you have no concerns about these particular changes,
            just about following up with tests?
  fremy: Yes.

  astearns: fantasai, the other issue you raised about the algorithm
            not handling min/ max content, that's a separate issue?
  fantasai: yes, we can still go ahead with this.

  oriol: PROPOSAL: When distributing the intrinsic contribution of a
         grid item, if it spans flexible tracks, excess size is
         distributed to those tracks and not to fixed/auto sized
         tracks.
  Rossen: {Gives an example}
  oriol: No. If there are fixed size tracks, that size is subtracted
         before distributing extra to the flexible tracks.
  Rossen: OK, then I agree. Need to make that clear.

  RESOLVED: When distributing the intrinsic contribution of a grid
            item, if it spans flexible tracks, excess size is
            distributed to those tracks and not to fixed/auto sized
            tracks.

  astearns: ... and add tests

Growth limits not increased with min-content contributions of spanning
    items
----------------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/4790#issuecomment-664068575

  <fantasai> https://drafts.csswg.org/css-grid-1/#algo-content
  fantasai: This will make more sense if I pull up the relevant
            section of the spec. ↑
  fantasai: There are several sections in how we handle intrinsic
            sizes. Minimums first, then maximums. For minimums,
            there's auto, min-content, max-content. For maximums,
            there's no auto, so min-content then max-content.
  fantasai: When we edited the spec recently to add new terminology,
            we accidentally said “minimum” when we meant
            “min-content”. But when we went to fix that, discovered
            had been implemented as written, so need to confirm the
            reversion.
  fantasai: The current text is rather nonsensical. It's very rare/
            weird that min-content would be specified as the maximum
            value of your minmax range while not also the minimum.
            We should fix it.

  astearns: Anyone have actual web compat information measured? Or
            should we change & see if we get negative feedback.
  oriol: I do know there is no WPT for the bad behavior, although
         there is a Chromium internal test.
  <fremy> sounds unexpected to me
  fantasai: I can't see any reason why anyone would write this code,
            with min-content in the max side of a minmax function.
            -> minmax(<length>, min-content)
  fremy: I don't expect people would do that. We should be able to fix
         this.
  PROPOSAL: Accept the edits made to the ED re minimum vs min-content
            (and add WPT tests)

  RESOLVED: Accept the edits made to the ED re minimum vs min-content
            (and add WPT tests)

CSS Overflow
============
  Scribe: fantasai

CSS primitive for per-element panning and zooming
-------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/5275

  AmeliaBR: This has come up with work I've been doing, and zcorpan
            was reviewing, on standardizing map viewers
  AmeliaBR: A map embed, where you move around the map on the screen
            and zoom in / out
  AmeliaBR: There's no standard way to describe that behavior in specs
  AmeliaBR: But it is a very common pattern, with common interaction
            patterns
  AmeliaBR: Mouse behaves a certain way, touch behaves a certain wain
  AmeliaBR: In addition to map viewers, also common for product photos
            on a retail site
  AmeliaBR: data visualizations

  AmeliaBR: Some things to think about..
  AmeliaBR: two different aspects of typical pan+zoom impl
  AmeliaBR: One is the UI and interaction patterns
  AmeliaBR: how the end-user indicates, by gestures or whatever, where
            they want to go and and zooming in / out
  AmeliaBR: The other aspect is loading content, e.g. higher-resolution
  AmeliaBR: From a CSS perspective, they are going to be two
            independent things to think about
  AmeliaBR: Loading in separate content, have something similar to a
            MQ scoped to a particular container that has a zoom state
  AmeliaBR: triggers picture sources or whatever

  AmeliaBR: Basic prerequisite for that is to have a standardized way
            to describe pan + zoom
  AmeliaBR: Which as a lot of similarities to scrolling environments
  AmeliaBR: but the standard actions are a little different, different
            translation of input;
  AmeliaBR: different established pattern of movement
  AmeliaBR: Other thing is that you don't necessarily start at the
            beginning and scroll down, often starting in the middle
  AmeliaBR: and usually not showing scrollbars
  AmeliaBR: So established pattern of panning, semi-standardized
  AmeliaBR: not always implemented in a way that is
            keyboard-accessible, or devices otherwise unique wrt inputs
  AmeliaBR: So much easier for authors to have a standard way to
            switch into this mode, don't have to code up a lot of JS
  AmeliaBR: and can make it more cross-platform and accessible

  AmeliaBR: No proposal yet, but wanted to bring up to CSSWG, is it
            something appropriate to address in CSS? Any opinions on
            how?

  <tantek> interesting, Google Maps is a *mix* of infinite pan in the
           horizontal direction, while having blocking scrolling in
           the vertical direction!
  <tantek> Yandex maps also only does (infinite) pan horizontally and
           (blocking) scroll vertically.

  emilio: I was chatting about this with some of the zooming folks in
          Gecko
  emilio: Zooming and panning is limited to top-level content document
  emilio: Depends on specific use cases you want to solve
  emilio: Not enabling for iframes etc, is artificial limitation
  emilio: Depending on set of use cases, documents already have all
          these APIs, visual viewport API etc.
  emilio: allow authors to react to these things
  emilio: Depending on set of use cases, if enabling on iframes solves
          them, could be relatively easy to do
  AmeliaBR: That's interesting. So describing it as the same
            pinch-zoom behavior that we have in most mobile browsers
  AmeliaBR: but scoped to a specific element
  AmeliaBR: One thing there, I don't know enough about mobile a11y if
            there's standard mapping to keyboard controls for
            pinch-zoom view

  TabAtkins: I think this is great and interesting
  TabAtkins: especially on touch devices, interaction is similar wrt
             scroll vs pan
  TabAtkins: but being able to opt into more pan+zoom interaction
             easily on desktop would be useful

  TabAtkins: You said something about being media-query?
  TabAtkins: Needs to be a property modifying how we handle overflow
  TabAtkins: particularly because of wrapping behavior necessary for
             some cases
  AmeliaBR: MQ thing was for the loading different resolution images
  AmeliaBR: e.g. in a picture source
  TabAtkins: Talking about level of detail?
  AmeliaBR: Yes
  TabAtkins: Level of detail is a much more complicated topic
  TabAtkins: If we can separate from overflow interaction... it's much
             harder
  AmeliaBR: Agree it's the next level, and first level would be to
            standardize pan-zoom interaction
  AmeliaBR: and zoom part of it, so long as it's exposed to authors so
            they can detect the desired level
  AmeliaBR: that can be JS at first
  AmeliaBR: and work on declarative way to do that as we go along

  AmeliaBR: You brought up another point, tantek brought up too,
  AmeliaBR: in some environments, such as maps, you want a wrap-around
            effect
  AmeliaBR: If you scroll to the end, scrolls back to the beginning;
            spherical or cylindrical coordinate system
  AmeliaBR: Other areas in CSS where it might be useful, like an image
            gallery
  AmeliaBR: where you scroll to the end, end up at the beginning
  AmeliaBR: Again, slightly separate from panning interaction itself
  AmeliaBR: but is also a relevant part of the discussions

  heycam: I think it's worthwhile thinking about this further
  heycam: My one concern is that we know what the full set of
          requirements are around panning and zooming
  heycam: so that we don't design a feature that goes 90% of the way,
          but the last 10% requires reimplementing everything
  heycam: E.g. some JS things let you pinch-rotate the map
  heycam: if not a good way to do that, they authors might feel like
          re-implementing everything
  <tantek> oh yeah, there's also two-finger-tilt in some maps!
  heycam: Might want to list what are the missing features, that
          doesn't allow doing maps online
  heycam: what's missing/janky
  heycam: so we know the design space

  smfr: Echo some of heycam's concerns
  smfr: Different clients have different needs
  smfr: some have very specific requirements
  smfr: anything we make might not be enough, end up using JS again
  smfr: Maybe we should focus on primitives that people require to do
        this
  smfr: one is always getting gestures right
  smfr: sometimes it's vertical scroll, sometimes it's pinch-zooming,
        inconsistent
  smfr: WebKit had some non-standard events like this

  smfr: Different areas of the page with different zoom levels, could
        have confusion wrt MQ or something
  smfr: Need to figure that out
  AmeliaBR: Just answering to last bit about CSS transforms, that's
            how I picture it
  AmeliaBR: similar to CSS transforms or SVG viewbox, where it is a
            localized transform that gets added to that stack
  AmeliaBR: That's how it was originally specced for SVG, that there
            would be a user interaction that ends up changing the
            viewbox transform
  AmeliaBR: That never got implemented in browser versions of SVG

  dbaron: I agree with a lot of the concerns brought up so far
  dbaron: a lot of panning and zooming is complex behavior
  dbaron: as mentioned
  dbaron: Also many sites change fragment of the URL in response to
          panning and zooming, so you can bookmark where you are
  dbaron: An interesting thing to investigate, if we do or don't want
          to do something, requires a more concrete proposal about
          something to add
  dbaron: and an analysis of how that thing is useful for all the
          consumers that are out there
  <dbaron> Example of the pan/zoom results being in the URL (in a very
           common format for putting it in the URL):
           https://www.openstreetmap.org/#map=18/43.45397/-80.49867

  <tantek> could see pan as an alternative to scroll, meaning it wraps
           around in that dimension. that seems like a nice
           incremental enhancement.
  <tantek> gmap-pedometer is also horizontal pan, vertical scroll

  fremy: I think that's similar to what other said before
  fremy: Map use case, it's unlikely to desire to do in CSS
  fremy: When you start to do zooming, dimensions of pixel changes
         over time
  fremy: with dynamic contents
  fremy: it's easier to adapt yourself as zooming
  fremy: than to back-propagate to elements shown
  fremy: For use case for maps, highly unlikely anyone would prefer
         CSS solution
  fremy: but other cases
  fremy: if you include PDF or SVG documents
  fremy: Sometimes it's really nice to be able to zoom on them
  fremy: and these contents do not react to gestures
  fremy: so more reasonable use case to focus on these
  fremy: So you really want to provide view on fixed contents
  fremy: For maps, need to know where user is, fetching data to get
         new info, new tiles, etc.
  fremy: I'm not sure it would work for a world map to fit in CSS
         pixels
  fremy: At least for dynamic use cases, seems highly unlikely for CSS
         to provide a solution
  fremy: so if working on that, suggest to focus on static use cases
  fremy: You want the effect, but don't want to include an entire
         library

  chrishtr: In addition to what fremy said, about dynamic scenario,
            where devs want top optimize pixels at different zoom
            levels and to ??
  chrishtr: A lot of maps these days are drawn with WebGL anyway, I
            don't think this approach would work with WebGL
  AmeliaBR: Could work if you have a top-level DIV which maintains
            interaction with users, and passes things as events
  AmeliaBR: just as many things use position on scrollbar to trigger
            things, but still using normal scrolling
  chrishtr: Common gestures across sites would be useful

  Rossen: I think most everything was said already
  Rossen: Want to underline here, still the motivation or use case
          here involves quite a bit of complexity
  Rossen: Zoom as a gesture, as a capability of a presentation system,
          is a very overloaded behavior, that has many different parts
          that more often than not apps are hooking into
  Rossen: Initiation of zoom vs when it is already steady
  Rossen: visual zoom, layout-affecting zoom
  Rossen: semantic zoom, going through levels of different categories
          of app logic
  Rossen: loads / unloads resources
  Rossen: so this is also a type of zoom
  Rossen: Tab summarized as, what are primitives we're missing here?
  Rossen: When we thought about this in the past
  Rossen: and attempted to extend zoom for application developers
  Rossen: the main point was, what are the primitives that a platform
          such as CSS needs to provide
  Rossen: capabilities and observability of it
  Rossen: To extend that we do to today, quite far on this journey
  Rossen: can observe types of transforms applied, etc.

  Rossen: But you also mentioned something interesting
  Rossen: around a11y, and this being able to help a11y
  Rossen: What do you mean by that?
  Rossen: is that the ability to use zoom as an intent? or are there
          experiences broken today?
  AmeliaBR: Specifically about existing author code and libraries
            aren't necessarily working well with different ways people
            interact with their computer
  AmeliaBR: Pan and zoom via keyboard controls is very opaque and
            inconsistent from site to site
  AmeliaBR: just by standardizing it, we could move towards the
            browser controlling that standard interaction
  AmeliaBR: and making sure it's accessible for all the ways people
            interact with their computer
  AmeliaBR: Being able to zoom is also an a11y issue, but not
            necessarily going to line up with author's decision that
            certain content is zoomable

  Rossen: Usually what we specify here, we specify different modality
          of input
  Rossen: and capability of apps to provide the zoom experience or
          behavior
  Rossen: whether [lists input actions that all translate to same
          intent]
  Rossen: Reality is these will differ vastly between capabilities of
          device
  Rossen: and standardizing on these types of gestures or higher-level
          intents
  Rossen: will be more troublesome than if we identify primitives
          missing in the platform to allow awareness of this thing
          happening

  TabAtkins: I strongly agree with idea that this would be really
             useful for a11y, because not relying on bespoke and
             incomplete JS solutions to a very common modality
  TabAtkins: As something becomes common, if it's addressed by random
             JS solution, won't be accessible to people not having
             same setup as JS author
  TabAtkins: Capturing, as Amelia says, that this is meant to be a pan/
             zoom thing
  TabAtkins: As dbaron says, we need a concrete proposal
  TabAtkins: I propose two parts
  TabAtkins: 1. new generic property that switches into pan+zoom mode
  TabAtkins: 2. A gesture-based JS approach, so you can hook that, and
             then roll your own pan+ zoom
  TabAtkins: So you can roll your own, as people currently do with
             'overflow: hidden'
  <tantek> +1 TabAtkins
  TabAtkins: So, CSS side that does things automatically as long as
             you do simple thing
  TabAtkins: and JS side that standardizes pan+zoom gestures, and lets
             people hook that to do further stuff
  TabAtkins: build on top of mouse/keyboard gestures etc.
  <smfr> not scroll events (they are reactive, not prescriptive)
  <smfr> say input events like mouse and wheel
  AmeliaBR: That's a useful breakdown
  AmeliaBR: Also need to take into consideration what exactly overflow
            would look like, all different things that need to be
            considered.
  AmeliaBR: semantic gesture events, for pan+zoom

  <tantek> was tilt explicitly excluded or just not brought up?
  <TabAtkins> not brought up
  <tantek> e.g. Google maps on a touch device, two finger up/down
           gesture will tilt the map up/down

  AmeliaBR: One question, who would be standardizing group for adding
            new events?
  <tantek> good question, what would the TAG say?
  TabAtkins: I think WICG until it gets picked up by DOM?
  fremy: But we do have CSS events too
  smfr: We also have scroll events
  smfr: You want all the input events to be defined in the same place
  <tantek> pan / zoom / tilt / rotate

  fantasai: In addition to capturing the gestures that would
            correspond to pan/zoom/etc
  fantasai: I think if you had pan/zoom mode for overflow, we have
            currently a lot of APIs for getting the current scroll
            position and for directing to go to a particular position
  fantasai: You'd probably want analogous methods that would let you
            do the same things in pan+zoom, e.g. get zoom level or set
            zoom level
  <tantek> +1 fantasai, zoom level equivalents to scroll settings
  <tantek> The only request I have is to include tilt & rotate in pan
           & zoom considerations / designs

Received on Monday, 3 August 2020 23:43:07 UTC