[CSSWG] Minutes Virtual F2F 2020-04-30 Part III: CSS Snapshot, Masonry Layout, CSS Backgrounds, Foldable & dual-screen devices [snapshot-2020] [css-backgrounds-4]

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

  - RESOLVED: Move contain-1, cascade-4, easing-1 to the official
              snapshot
  - Grid was argued to not be ready to move into the official section
      due to the number of outstanding issues.
  - Align was argued to not be ready to move into the rough interop
      section due to the sections on display:block not being
      implemented yet.
  - RESOLVED: Move writing-modes-4, display-3, font-loading-3 to the
              "fairly stable" bucket
  - Color-4 was not ready to move into fairly stable as it still needs
      more work.
  - Fonts-4 was not ready to move into fairly stable as it had too
      many open issues, though may be moved later in 2020 when the
      spec is closer to CR.
  - RESOLVED: Have snapshot buckets all be sections

Masonry Layout
--------------

  - There's a new explainer for masonry layout (Issue #4650) with more
      details on the proposed spec:
      https://github.com/w3c/csswg-drafts/blob/master/css-grid-2/MASONRY-EXPLAINER.md
  - There still wasn't agreement on if masonry layout should be grid 3
      or on its own. An issue will be opened so it can be discussed
      further.
  - Masonry layout works for both columns and rows, but fails if set
      on both.
  - An issue will be opened on how masonry layout interacts with
      intrinsic size. The definition in the explainer seems like it
      will need additional details and some possible solutions were
      proposed.

CSS Backgrounds 4
-----------------

  - RESOLVED: Close #4996 (Suggestion: “background-opacity” CSS
              property (as suggested by CSS-Tricks.com)) and #4706
              (`background-filter`) as no-change; filter() is what's
              intended to solve these cases.

Foldable & dual-screen devices
------------------------------

  - dlibby gave an update to the group on the changes that have been
      made for multi-screen extensibility based on the previous
      feedback.
  - Solving for multiple geometry across multiple folds seems like it
      will require complex calculations and some people in the group
      believed that for simplicity the original scope should be just
      multiple folds without complex geometry.

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

Agenda: https://wiki.csswg.org/planning/virtual-spring-2020#day-two-time-slot-b

Scribe: fantasai

CSS Snapshot
============
  github: https://github.com/w3c/csswg-drafts/issues/4715

  astearns: I think all we need to decide is which specs go in which
            category
  astearns: At the moment, there are four specs proposed to graduate
            to official CSS
  astearns: 2 to graduate to "rough interop"
  astearns: and 6 into "fairly stable"
  astearns: Proposed to add to official set
  astearns: Grid 1
  astearns: Contain 1
  astearns: Cascade 4
  astearns: Easing 1

  fantasai: I don't think Grid is stable enough yet
  fantasai: Shouldn't go into snapshot in the current state
  fantasai: Lots of open issues
  fantasai: Also publication is still blocked on test cases

  Scribe: heycam

  chris: What does stable mean?
  chris: People are relying on it
  fantasai: The original purpose of the snapshot--might want to
            rethink, but--we had a whole bunch of specs that were
            basically RECs
  fantasai: but didn't have a completed "all tests pass, full test
            suite" etc.
  fantasai: Known limitations of the test suite, known bugs unfixed
  fantasai: We wanted to capture the fact that these specs are
            basically RECs, but have a few things need fixing up,
            which might take a while
  fantasai: The bar for getting into that top level is really high
  fantasai: Another problem right now, we have a lot of specs which
            should be in CR but are not
  fantasai: The poster child for these: animations, transitions,
            those kinds of things
  fantasai: We added a note to the snapshot saying these are widely
            implemented, with fiddly bits not worked out yet. That new
            category
  fantasai: Then for completeness, we have a bunch of CRs, may as well
            put them in there. but they're not at the "this is a Rec"
            level
  fantasai: That's how we got to this point with those categories
  fantasai: Not sure what we need from the snapshot right now
  <dbaron> I'm not quite sure I agree with the description of the
           third category
  fantasai: The purpose of the snapshot was to communicate actual
            status which was not obvious from the official status
            of the specs

  astearns: I propose we don't discuss the purpose of the snapshots
            today
  astearns: we have a list of specs that have been suggested to add,
            we can just move through them, and choose not to move
            individual specs if we want
  astearns: for the remaining things, that are being considered to be
            put into the official section, any objection to contain-1,
            cascade-4, and easing-1?
  <TabAtkins> I object to Grid being omitted; I don't think that this
              is worth anything to authors if something of Grid's
              practical status is omitted.
  fremy: It's really weird that you would have contain but not grid
  florian: contain is a rec, grid is not
  fantasai: Grid is not stable, the spec text is not at the same level
            of stability
  TabAtkins: Regardless of still tweaking grid, authors are depending
             on grid in its current form in production all over the
             place
  TabAtkins: If it's not considered stable for the snapshot, I'm not
             sure what message it's communicating if grid is not there
  fantasai: It wasn't originally intended for authors
  fantasai: hence we might want to discuss the purpose of snapshots
  dbaron: I think Grid is in a similar state to what we thought about
          animations a few years ago
  dbaron: when it went into this category
  astearns: The first category is "roughtly interoperable"
  fantasai: Grid belongs there, not the top category
  AmeliaBR: Three categories are: official stable specs, roughly
            interoperable but needs more spec work, fairly
            stable but needs more impl experience
  AmeliaBR: transitions, animations, grid, these are all in the "rough
            interop" category
  AmeliaBR: moving one up and not the others, not sure what the
            argument is for that

  astearns: To make some progress, I didn't hear objections for
            contain-1, cascade-4, easing-1
  <dbaron> (BTW, I think I was confused about what was proposed to
           move where when I made my last comment.)

  RESOLVED: Move contain-1, cascade-4, easing-1 to the official
            snapshot

  astearns: Two candidates for adding to "rough interop"
  astearns: align-3 and cascade-4
  fantasai: I thought cascade-4 was at the top now?
  astearns: cascade-3 is in the official part, cascade-4 is currently
            in the "fairly stable" part
  fantasai: cascade-4 I think is revert + scoping?
  fantasai: shadow DOM scoping stuff
  dbaron: I have comments on align, but maybe we should talk about
          cascade first
  florian: cascade is part of the resolution we just took
  astearns: Sorry, my duplication problem
  astearns: Let's talk about align

  dbaron: One question about align is to what extent it's roughly
          interop varies depending on what you're talking about
  dbaron: Align is pretty interop if you talk about it applying it
          flexbox
  dbaron: but for applying display:block, it's mostly not implemented
          at all
  dbaron: so I think that makes it a little unclear where it should go
          here
  AmeliaBR: Are the parts of align that were originally defined in
            terms of flexbox/grid, is that text still in those spec?
            or has it been moved out to align
  fantasai: Believe it's in flexbox, was never in grid
  astearns: Seems like enough for me not to move it up to "rough
            interop"
  heycam: Might want to split out the application to block to a
          separate level
  astearns: Yes but there's still value to having the aspiration in
            the current spec
  chris: There is a cost to splitting it out, can cause impls to slow
         down
  dbaron: In this case, we're in a position where the longer we wait,
          the more likely we'll have compat problems if we do it
  dbaron: to the point that from a Gecko perspective we wouldn't be
          comfortable implementing first
  dbaron: If we impl, find it is compatible, nobody else impls, then a
          year later we find it's no longer compatible, and we have to
          take it out
  astearns: For snapshot purposes, let's move on

  astearns: The last category is "fairly stable"
  astearns: 5 spec suggested to move into it
  astearns: writing-modes-4 (fairly small), display-1, fonts-4,
            font-loading-3, color-4
  chris: Despite being the editor, I will argue against color-4
  chris: It's not quite ready
  chris: The working color space needs to be added

  chris: fonts-4, I would argue for that
  chris: The variable font part is good, rest is fairly reasonable
  chris: I will resist splitting out the color font stuff
  chris: I want to encourage impls by having it in there
  fantasai: There are a lot of open issues on fonts-4
  chris: 67 of them
  fantasai: Putting it into stable-ish category usually indicates
            fewer issues
  fantasai: In terms of open issues, what does that look like?
  chris: Lots of little issues. a pile related to generic font
         families, ~20 of them
  chris: Many will be closed with no effort or dealt with
  chris: Think it's reasonably mature though
  fantasai: If it's reasonably mature, we should try to get it into CR
            and push it forward
  fantasai: If it makes sense, push out the generic fonts stuff to
            level 5...
  chris: I did ask i18n for wide review today
  chris: but I give them a 3-6 months to CR guesstimate
  fantasai: I would love to see fonts-4 in CR
  fantasai: At that point it would be great to add to the snapshot
  fantasai: but given there are significant open issues, I don't think
            it qualifies as "fairly stable"
  fantasai: but I think you're not far from there, could probably add
            it later in 2020

  astearns: So let's not add it to the snapshot for now
  astearns: We're down to 3 new candidates
  astearns: writing-modes-4, display-1, font-loading-3
  dbaron: I would like to change display-1 to display-3, since
          display-1 doesn't exist
  astearns: Any concerns with those three specs going into the "fairly
            stable" bucket?
  astearns: any objections?

  RESOLVED: Move writing-modes-4, display-3, font-loading-3 to the
            "fairly stable" bucket

  astearns: Organizational question about the buckets:
  astearns: Two are sections, one is a note. why not have 3 sections?
  fantasai: I think that would probably make sense!
  astearns: Any objections to having 3 sections?
  chris: sgtm

  RESOLVED: Have snapshot buckets all be sections

  <dbaron> FWIW, I think I somewhat preferred the note setup rather
           than switching to sections, but I'm ok with sections
  <fantasai> dbaron, why?
  <fantasai> not that I necessarily disagree, just want to know your
             reasons :)
  <dbaron> fantasai, I guess I liked the idea of the snapshot defining
           one thing rather than three things

  chris: Who's pushing it forward? florian made the first draft
  florian: I am the editor
  florian: I'm OK with doing some of it

  Scribe: fantasai

Masonry Layout
==============
  github: https://github.com/w3c/csswg-drafts/issues/4650
  explainer: https://github.com/w3c/csswg-drafts/blob/master/css-grid-2/MASONRY-EXPLAINER.md
  example: https://codepen.io/jensimmons/full/QWjqbJj

  heycam: Small update since we last talked about this in A Coruña
          where jensimmons gave a great introduction
  heycam: Since that time, Mats has done some refining of the idea in
          the issue
  heycam: and has landed a prototype in Gecko
  heycam: Want to get feedback
  heycam: Also written up an explainer doc
  heycam: Thought it might be helpful to have a more high-level
          description
  heycam: so not wading through GH issue
  heycam: Don't know whether people are wanting to dive into
          discussions about particular aspects of the proposal or not
  heycam: Now that we have a prototype and an explainer, might be
          worth people filing individual issues against the proposal
  astearns: definite +1 to individual issue

  fantasai: Great to have individual issues. Why not have a FPWD? We
            have agreed to work on it.
  heycam: Seemed like people were not sure about whether this should
          be a grid feature or not
  fantasai: When we come up with early stage work; we're often unsure
            about many things. Doesn't mean we don't draft it up and
            publish it.
  AmeliaBR: Can we agree to adopt this concept as described in this
            explainer as something we want written up in css-grid-2
            spec or grid-3?
  AmeliaBR: So question is can we agree to adopt what's written up?
  fantasai: Thought we already agreed to adopt.
  heycam: Thought we only agreed on the idea.
  heycam: If people willing to resolve on, for now, keep this as
          something to the grid model
  heycam: add to grid-3
  astearns: We officially agreed to adopt and assigned editors

  jensimmons: There seemed to be a lot of debate in the group about
              whether built on grid
  jensimmons: Example, fallback is grid, very nice
  jensimmons: Idea that Mats had to use masonry as part of Grid spec
              means you get Masonry in one dimension while all power
              of grid in the other dimension
  jensimmons: so rows can be masonry and columns are full power of grid
  jensimmons: But other ideas, certain people very strongly held
              opinions
  jensimmons: didn't like using Grid as the place to do masonry,
              wanted display: masonry
  jensimmons: I've seen some reactions from folks on Twitter etc.
  jensimmons: "you can already do this, why new thing", Well no you
              can't
  jensimmons: They think of it as multicol or flexbox
  jensimmons: Open question, should this be part of Grid
  jensimmons: But enough of a disagreement that we weren't sure

  florian: Remains an open question, will have to dive in at some
           later point
  florian: but even if it's an open question, can still decide if it
           starts in Grid 3 and split later or start later and merge
           later, but should put it somewhere
  <fremy> (votes for separate spec)

  dbaron: Also one other distinction here, worth thinking about
  dbaron: To what extent we want to put prototyping into formal spec
          language
  dbaron: vs having documents about those things that are more
          example-driven
  dbaron: Some amount of formal spec language
  dbaron: but serve a different audience as part of trying to solicit
          feedback from people who might use the thing
  fantasai: I don't see why that needs to be a separate doc that's not
            adopted by the WG.
  fantasai: I think publishing a side explainer that's not official
            work of the working group.... seems like not part of
            official work of WG.
  iank: Gives impression to Web devs that they can give feedback
  dbaron: Just because it's an explainer doesn't mean it's not
          official working group work. It's in the repo
  fantasai: [said stuff that did not get captured, likely about
             how if publishing stuff officially is offputting
             feedback, that's a problem that should be addressed,
             not worked around by publishing stuff off-site]
  dbaron: Idea of explainers was to address that problem

  Rossen: Seem to be getting off topic
  astearns: Let's put aside how we work and where work happens, look
            at demo

  <jensimmons> demo: https://codepen.io/jensimmons/pen/QWjqbJj?editors=1100
  <jensimmons> display: grid;
  <jensimmons> grid-template-rows: masonry;
  <jensimmons> grid-template-columns: repeat(auto-fill, 20rem);
  jensimmons: Mats's design is elegant
  jensimmons: Shape of this layout can be accomplished in multicol,
              but the ordering cannot
  Rossen: this is awesome
  jensimmons: Responsive design style
  jensimmons: narrower it's 2 col, wider is 4 or 5 columns
  jensimmons: Content gets rearranged
  jensimmons: but always in masonry style layout
  jensimmons: One of the main reasons people keep doing this layout in
              JS is because of lazy-loading
  jensimmons: They want to load new content into the bottom
  jensimmons: using a proper masonry layout, first levels of content
              stay at the top, add to the bottom
  jensimmons: with multicol, everything gets rearranged each time you
              add content
  jensimmons: [shows code]
  jensimmons: This one is auto-fill columns of even size, but could
              make different-sized columns... anything you can do in
              Grid, can do in Masonry layout
  jensimmons: Fallback, if you open in current FF, has
              grid-template-rows: auto (default value), so everything
              lines up and just have extra space in the rows

  Rossen: Someone asked if only available for rows, suspect not
  jensimmons: Could define columns as masonry
  dholbert: Works in either axis
  jensimmons: What happens if you put in both axes
  dholbert: You can't, fails in one
  dholbert: Probably behaves as none

  AmeliaBR: Looking through explainer, thing that was new since last
            time I saw this is how this interacts with intrinsic sizing
  AmeliaBR: and way it suggests is to just use the 1st item that goes
            in each column as the one that decides the size of that
            column
  AmeliaBR: which I guess is similar to fixed mode for table column
            sizing
  AmeliaBR: but it's a little weird, unsure if there are other
            solutions for it
  heycam: You're right, hadn't thought about the analogy to fixed
          table layout
  heycam: The grid items you know for sure will be in particular
          column, they're the only ones you can rely on to size the
          columns
  heycam: can choose those that are placed in a particular column
  heycam: or ones which by automatic placement
  heycam: would go into a particular column
  heycam: which is true of the items in the first row
  heycam: Do agree it feels a bit odd, other items can't influence
          sizing
  heycam: I think you can by forcing them to be in the top row with
          grid-placement properties maybe??
  heycam: not sure what else you could do apart from not allowing grid
          items to influence sizes

  AmeliaBR: Question for those who know grid layout better than I do,
            when we have regular auto layout with intrinsic rows
  AmeliaBR: How does that handle cycles
  fantasai: In grid layout, you have to do placement before you can do
            the sizing of the columns
  fantasai: because the sizing can depend on what's in it
  fantasai: Grid placement doesn't depend on the size of anything
  fantasai: You start putting things into slots, doesn't matter what
            the size of the item is
  fantasai: That's not true of masonry layout, which is where this
            rule is coming in
  fantasai: You need to know which column it's in to size it, but in
            order to size the column, you need to know what's in it
  fantasai: So the proposal is using the items that we know will be in
            a particular column
  fantasai: What we could do is do an initial sizing pass based on the
            items we know, with an explicit column or in top row
  fantasai: Then place all the items into appropriate columns, then
            run the grid sizing algorithm on all of the items to adjust
            the sizes but not re-place the items.
  fantasai: So later items would also influence the size of the
            columns.
  fantasai: This could cause, depending on width -> height influences,
            could cause them to shift higher/lower in their columns.
  AmeliaBR: Way they approached it, seems simple as anything
  AmeliaBR: Most of the time this layout seems to be used with
            fixed-width cols
  florian: Also if we take fantasai's approach, probably want a switch
           it off, so that column heights can remain stable over time
           as you load comments.

  astearns: Comments on the proposal / demo?
  astearns: I agree with fantasai that this should be in an official
            document. We did resolve on doing that.
  astearns: Let's open a separate issue for that question
  astearns: Let's assume it goes into css-grid-3
  astearns: and have the issue have discussion for why that might not
            be the case
  astearns: and come back to this next week
  astearns: and decide if it goes into grid-3 or a separate module
  astearns: Put your arguments into the issue soon

  astearns: Thanks for explainer, do like having a more
            generally-accessible version of our documents
  astearns: I'm glad it's in our repo
  astearns: and thanks for demo, cool to see
  heycam: File specific issues on e.g. sizing
  astearns: Break up into subtopics will help, yes
  fantasai: I think we should be publishing our work, so we should
            also consider publishing the explainer either as a FPWD,
            or as a Note at some point.

Scheduling
==========

[discussion about when to schedule more 4-hour blocks to soak up some
    of the excess agenda items]
[group would like to have more next week, details will be discussed on
    mailing list]

Backgrounds 4
=============
  scribe: TabAtkins

background-filter
-----------------
  github: https://github.com/w3c/csswg-drafts/issues/4706

  AmeliaBR: This issue, and the next about background-opacity, are
            basically the same issue
  AmeliaBR: When you have layered backgrounds, sometimes you want to
            modify those backgrounds, or see one thru the other
  AmeliaBR: Like have a dark overlay over a texture image
  AmeliaBR: Or you want a slightly blurred image so it's not as
            distracting from the text over top
  AmeliaBR: Right now no way to do that
  AmeliaBR: Some things you can do with blend modes, but not a lot
  AmeliaBR: So today people have to instead put the bg on a
            pseudo-element and abspos it behind the element's content,
            and then use 'filter' on it
  AmeliaBR: Suggestion is to add more properties that describe
            filter-effects, or perhaps just a simple opacity.
  AmeliaBR: One thing that immediately is brought up is that we have a
            spec for this functionality - in filter effects, there's a
            filter() function that should take an image, apply filters
            to it
  AmeliaBR: So could say "background-image: filter(url(...)
            blur(...));"
  AmeliaBR: But no impl of that
  <faceless2> We implemented it yesterday!
  AmeliaBR: Don't know the reasons for that, if there are technical
            issues or just priority
  <fantasai> There's also https://drafts.fxtf.org/filter-effects-2/
             which has no FPWD or anything
  AmeliaBR: Other side, about separating to properties, that might be
            nicer from an authoring perspective to just reuse the
            existing bg model, rather than trying to squish everything
            into a property
  AmeliaBR: But need to talk about whether people will implement if
            specced in a different way

  smfr: We do have stable impl of filter() in webkit
  smfr: I like it because authors are used to filter property, this is
        a simple way to apply that in a different context
  smfr: And lets you do the classic thing of shipping one set of
        images and changing them on the fly with filters to do what
        you want
  smfr: Plus you can animate the filters
  smfr: So I like filter(), would like to hear from other implementors
  smfr: There's also a proposal to support the same filters for canvas
  smfr: So if they don't have it already, will need it soon anyway
  smfr: Also, filter() can be used anywhere, like border-image. If
        doing a background-* property, can't apply it to other image
        properties

  faceless2: One difference between background-filter and filter(),
             background-filter applies to all layers after merging,
             filter() is per-layer
  faceless2: Also when trying to blur image, filter doesn't apply
             beyond the bounds of the image
  faceless2: Not a problem if you have a single image covering the
             whole bg
  faceless2: But if you're tiling the image, you won't get the desired
             effect
  faceless2: So I think there's still a usecase for a whole-layer
             filter
  fantasai: Good point

  fantasai: There's a proposal for backdrop-filter property; it does
            something else entirely.
  <TabAtkins> It's not the background at all, actually
  smfr: backdrop-filter is different
  smfr: It renders what's behind the element, then filter it. *Then*
        the element itself, including its background, is composited
        atop it.

  fantasai: So there's still another case for compositing the bg
            layers together before filtering
  smfr: Yeah, definitely a difference there. Use-cases for both
  smfr: For backgrounds, if you're using colors you can use alpha.
  smfr: Would be curious to see use-cases for bg-filter that wants the
        whole bg at once
  smfr: And if doing it for bg, why not for border? So you can blur
        your borders? Feature-creep potential.
  fantasai: I think there are cases of people using bg to make a
            stretchable scene in several layers, and there you'd want
            to composite them together before applying opacity
  smfr: That's a good use case

  astearns: Any response to smfr's question about other impls of the
            filter() function?
  iank: Have to check with the team
  emilio: Seems like putting it in the image is the more flexible
          thing to do

  dbaron: Someone mentioned tiled bg images, and diff between blurring
          each tile vs the whole set
  dbaron: One control that's common here is what's off the edge
  dbaron: One option is the edge is transparent black, vs closest
          pixel, vs pretend you tiled
  dbaron: So with that control you could get the effect you wanted
  dbaron: Filter controls like that are generally applicable, worth
          considering
  AmeliaBR: That's called edgemode attribute on feGaussianBlur
  AmeliaBR: filter() is, as defined in spec, should magically choose
            edgemode based on tiling or not
  <smfr> “For the <blur()> function the edgeMode attribute on the
         feGaussianBlur element is set to duplicate. This produces
         more pleasant results on the edges of the filtered input
         image.”
  AmeliaBR: If bg image is tiled, is does blurring smoothly.
  AmeliaBR: So for what is getting filtered, I think that's worth
            talking about, but if there's a concern, there are ways to
            address that concern.
  <TabAtkins> I can dust off the @filter rule proposal, dino expressed
              interest in it again a while back...

  AmeliaBR: Maybe there are use-cases for both "filter each layer" vs
            "filter layers together"
  AmeliaBR: But filter() function is def treating each image before
            tiling/compositing.

  AmeliaBR: Other question is why only bg?
  AmeliaBR: I brought this up as well. If we did it as a separate
            property, all the other similar groups would want a
            matching prop, so could add a bunch of properties.
  AmeliaBR: fill-image-filter, border-image-filter, etc

  faceless2: Re: compositing borders together, table borders would
             make me cry...
  faceless2: And table bgs are stacked up as well, phew

  heycam: I think it's not just an issue with tiling; agree we need
          something to fix that.
  heycam: Also stretching - before or after filter() could affect
          things.
  <TabAtkins> Yeah, blur() would act differently if applied before or
              after stretching.

  AmeliaBR: So, we have filter() in the spec. There are clear
            use-cases.
  AmeliaBR: Do we feel that, from an authoring or impl standpoint,
            filter() isn't good enough and we need to look at new
            options? Or is it good enough, we close this no-change,
            and continue working on filter()
  fantasai: I think this addresses a number of the cases.
  fantasai: But think it doesn't address "I want opacity on entire bg
            at once, but not on the text", which is a common use

  TabAtkins: One of the things suggested there was a ::background
             pseudo
  TabAtkins: if you could put filter on that, could achieve that case
             at least syntactically it's easy
  astearns: Would end up with a lot of pseudos for each thing you
            might want to filter...
  astearns: Then you run into "well if you do it for bgs, why not
            borders, etc"
  TabAtkins: Well, so far it seems that filter per layer shouldn't be
             handled by separate properties
  TabAtkins: Pursue filter() function as preferred method for that
  astearns: Do we leave background-filter issue open to deal with the
            background-all-at-once case?
  AmeliaBR: I think we should see more use of filter() before we say
            that use case isn't addressed
  AmeliaBR: Think we need wider use of the filter() before we can
            conclude we need to address more use-cases
  astearns: So we can do that - close these as no-change and use
            filter() function
  astearns: Objections?

  RESOLVED: Close #4736 and #4715 as no-change; filter() is what's
            intended to solve these cases.

Foldable & dual-screen devices
==============================
  scribe: AmeliaBR
  github: https://github.com/w3c/csswg-drafts/issues/4736
  explainer: https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/master/Foldables/explainer.md

  dlibby: A few months ago, we wrote up initial thinking on this
          project space. Specifically, foldables with 2 identical
          screens. We've had a lot of feedback, a lot about more
          exotic form factors or possible application to desktop
          multi-screen.
  dlibby: (shares slides from explainer) This was the proposal, a new
          media feature, screen-spanning, with value describing
          direction, and then environment variables for the dimensions.
  dlibby: We went back to the drawing board based on feedback. Some
          detailed comments about how this interacts with bezels and
          so on, and how can we make it extensible to multiple dividers
          /folds in different directions. So need more complex
          environmental variables.

  fantasai: This slide shows 4 panes, but 3 in the media query. Is
            that correct?
  dlibby: Yes, though that's open for debate. We're counting the
          number of folds/divisions, not panes.
  dlibby: For the environment variable, that means we then have an
          array-like structure, needs a way to access the nth value.
          Can't use comma, because that's the fallback. One
          possibility is a nested function.
  fantasai: Or could just use a space separated `env(divider-left 3,
            <fallback>)`
  <fremy> @dlibby: also, why not just divider-left-1, divider-left-2,
          etc...?

  dlibby: We then can start looking at more complicated cases (3 by 2
          panes in example). Should there be different names to access
          horizontal vs vertical, top vs left. Getting a little
          overwhelming in complexity. Wanted feedback from WG about
          whether there is a more generic way to describe this.

  smfr: I don't really have a mental model of how content is supposed
        to interact with the different screens. Can you pinch zoom on
        one screen, or would that zoom the whole display? Or
        scrolling, doesn't the divider line move relative to the
        content?
  dlibby: Our proposal was based on defining things in the “client”
          coordinate system, doesn't change by scrolling. Zooming,
          haven't looked at that. Depends on a pinch or layout zoom,
          whether it changes the geometry in CSS px.
  fantasai: Generally, we say pinch zoom shouldn't change geometry,
            don't re-compute layout. But layout zoom would require
            computing everything.

  fantasai: On the slide, you're calling this 1,2,3,4 dividers for the
            top row and then the bottom row. That's really confusing
            to number in this wrapping fashion. I'd try to name more
            like grid dividers, assuming continuous columns, maybe
            taking the widest gap if they're not all the same.
  plinss: I agree that number seems weird, but in multi-monitors,
          they're not necessarily be in a grid layout. We can't assume
          something simple if we want to include that.
  florian: And desktop screens are often different sizes.
  plinss: And that will probably be true in future for foldable mobile
          devices.
  dlibby: Yes, we're trying to define in a generic way that doesn't
          make geometry assumptions.
  fantasai: But at a certain point, what are the chances that you're
            going to make a design for inconsistent sizes of panels
            arranged arbitrarily in space? Can we start with a simple
            assumption of a grid-like layout. The original proposal
            was for just a single fold.
  plinss: But we should at least consider whether more complex is
          possible.
  fantasai: So long as simple cases stay simple.
  dlibby: Agree with that. Kind of hard at this point in time to
          imagine all application use cases and all devices in the
          future.
  <fantasai> extending to multi-fold from single fold wasn't hard, so
             worth doing; extending to arbitrary geometry in space,
             it's harder, so I wouldn't be opposed if there was a
             proposal that handle complex cases but still kept simple
             cases simple, but don't want us to get stuck on trying to
             solve arbitrary geometry and make simple cases hard or
             impossible for the next 5 yrs

  astearns: Like with custom origins and masonry, it would be helpful
            if specific questions are split out into separate issues.
            Right now we have a giant discussion. As these questions
            come up, please make separate issues.
  dlibby: Agreed. Main goal for this f2f is to ensure we're on the
          right track.

  astearns: On that note, any other concerns that came up from the
            presentation?
  florian: I'm slightly concerned about how this media query will be
           used & is it the best approach to the problem. E.g., can
           you make your grid just nicely snap to the folds, without
           needing to calculate all the environment variables,
           margins, and so on of ancestors and previous siblings and
           cousins.
  <fantasai> +1 to florian, that's important consideration
  Rossen: Snapping to the gaps is definite a use case, but we have so
          many different layout contexts, and we already have ways to
          make those sizings. Yes it uses calc. But if tomorrow we
          change grid, we don't want to need to retrofit a lot of
          magic. Trying to keep it simple rather than baking in
          interactions with all layout models.
  fantasai: I do think that florian's point is really important. We
            don't want people to need to calculate many layers of
            margin and padding to figure out where they are on the
            screen.
  Rossen: I disagree.
  dlibby: There's certainly things we can look at, but I do think this
          proposal covers the basic primitives to start to get
          developers exploring things. Integrating with special layout
          modes could be revisited.

  <tantek> Curious about relation to "multi screen" work if any
  <tantek> In particular I'm curious about possible overlap with
           https://www.w3.org/2014/secondscreen/ specs and thoughts

  fantasai: One thing to look at might be re-using fragmentation module
            to avoid breaks. That's what fragmentation is designed to
            address.
  astearns: Most examples I've seen treat different screens
            differently, two or more separate layouts. Not fragmenting
            content across screens.
  Rossen: And fragmentation is one-dimensional.

  astearns: We have dave & Mike on the call, can we talk string-set()?
  bremford: Let's push that back.

  [scheduling discussion for possible long call next week]

Received on Friday, 15 May 2020 22:39:58 UTC