[CSSWG] Minutes Telecon 2024-12-04 [css-grid][masonry][css-2024][css-sizing][writing-modes]

=========================================
  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/Masonry
----------------

  - The group discussed the proposals to decide if Masonry should be a
      part of Grid or a separate system (Issue #11243: Masonry Syntax
      Debate)
  - Presentations were given by both sides explaining their views and
      reasoning
      - Masonry as a separate display type:
https://lists.w3.org/Archives/Public/www-archive/2024Dec/att-0002/Masonry_presentation_to_CSSWG_____Dec_4_2024.pdf
      - Masonry as a part of Grid:
https://lists.w3.org/Archives/Public/www-archive/2024Dec/0003.html
  - They also discussed the TAG feedback which argued for a general
      approach of integrating display types further:
      https://github.com/w3ctag/design-reviews/issues/1003#issuecomment-2489688718
  - At the end of the timebox the group did a strawpoll to see if there
      was a preference developing, however the results continued to be
      split. The two viewpoints will continue working on coming to a
      consensus approach.

CSS Snapshot
------------

  - RESOLVED: Add Scroll Anchoring 1, CSSOM 1, and Color 5 to Rough
              Interop; add Nesting once it's republished. (Issue #9793:
              Add specs to Rough Interoperability)
  - RESOLVED: Add Selectors 4 to Rough Interop (Issue #9793)

CSS Sizing
----------

  - There was an openness to clarifying the definition for issue #10605
      (Intrinsic size of <img> / <video> with aspect ratio but no
      definite size) however more thought was needed around describing
      the desired behavior so discussion will go back to github.

Writing Modes
-------------

  - RESOLVED: Allow consistent sideways-* and vertical-* writing modes
              to share a BFC (Issue #10714: Allow sideways-x and
              vertical-x to share a block formatting context?)

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

Agenda: https://lists.w3.org/Archives/Public/www-style/2024Dec/0001.html

Present:
  Rachel Andrew
  Tab Atkins-Bittner
  Kevin Babbitt
  David Baron
  Oriol Brufau
  Stephen Chenney
  Keith Cirkel
  Emilio Cobos Álvarez
  Yehonatan Daniv
  Elika Etemad
  Robert Flack
  Chris Harrelson
  Daniel Holbert
  Ethan Jimenez Vargas
  Jonathan Kew
  Roman Komarov
  Chris Lilley
  Alison Maher
  Jen Simmons
  Gaurav Singh Faujdar
  Alan Stearns
  Miriam Suzanne
  Josh Tumath
  Bramus Van Damme
  Lea Verou
  Jason Williams
  Jeffrey Yasskin
  Sebastian Zartner

Scribe: fantasai
Scribe's scribe: TabAtkins

CSS Grid/Masonry
================

Masonry Syntax Debate
---------------------
  github: https://github.com/w3c/csswg-drafts/issues/11243

  Slides from Jen Simmons:
https://lists.w3.org/Archives/Public/www-archive/2024Dec/att-0002/Masonry_presentation_to_CSSWG_____Dec_4_2024.pdf
  Slides from Alison Maher:
https://lists.w3.org/Archives/Public/www-archive/2024Dec/0003.html

  alisonmaher: [intros the topic]
  alisonmaher: Several properties behave differently in each, or don't
               apply, so we think a new display type would be better.
  alisonmaher: Plus we can define a better default value for the
               template tracks, creating an automatic masonry instead
               of a single column
  alisonmaher: Regarding grid fallback, needing one is a temporary
               problem, so should focus on the future
  alisonmaher: authors should make explicit fallback, to avoid surprises
  alisonmaher: Positioning in masonry is simpler than grid, it's only
               placed in 1 axis instead of 2
  alisonmaher: Grid is confusing because authors might make a mistake
               about which axis they are placing in (rows vs columns)
  alisonmaher: separate model only has one axis
  alisonmaher: this allows switching the axis easily
  alisonmaher: Shorthands also are better with separate shorthand. Grid
               shorthand is complicated, hard to use. Masonry shorthand
               is easier because don't need to remember the order
  alisonmaher: placement works differently in grid vs masonry
  alisonmaher: Dense packing is also different: for grid can place in
               any empty slot, but due to performance considerations
               for masonry current proposal restricts to same-sized
               track
  alisonmaher: Masonry also has different intrinsic sizing rules, with
               auto-placed items affecting all auto-sized tracks not
               just the one they end up in
  alisonmaher: alignment is also very different, open questions about
               how this works in the masonry axis
  alisonmaher: this means grid and flexbox are quite different in how
               they behave
  alisonmaher: in masonry layout auto-placed subgrids don't inherit
               line names
  alisonmaher: we expect there to also be other changes for submasonry/
               subgrid that will lead to divergences
  alisonmaher: Integrating masonry into grid will lead to spec bloat,
               will be harder to teach, and lead to developer confusion
  alisonmaher: Conclusion: masonry should be a separate display type

  jensimmons: [intro slide]
  jensimmons: At this point decision is about syntax -- mental model.
              Behavior is same in both.
  jensimmons: [reviews basic case]
  jensimmons: Choice to Just Use Grid is extending Grid L1. [shows
              example of grid vs masonry photo grid, with one
              difference - the grid-template-rows: collapse line]
  jensimmons: New layout type, creates a separate tool with separate
              syntax that's similar but not the same as what exists
  jensimmons: [shows table of properties being added]
  jensimmons: We don't believe there's a compelling argument to add so
              many new properties to CSS
  jensimmons: Both have properties for defining tracks; defining
              masonry axis
  jensimmons: both have ways to define placement, and both have a new
              slack property
  jensimmons: both have shorthand, and a gap property
  jensimmons: and both have ways to implicitly size tracks
  jensimmons: more significant difference is grid-auto-flow vs
              masonry-direction/fill/flow
  jensimmons: Chromium argues that their new syntax is more
              understandable. We disagree, just use grid-auto-flow
  jensimmons: Other major difference is template syntax
  jensimmons: Here's a column example using the template syntax.
              Identical in grid 1, and masonry in both
  jensimmons: When you layout rows in grid, template syntax is a bit
              different -- you stack the template names to physically
              diagram the names for the rows
  jensimmons: Just Use Grid re-uses this syntax exactly; but new
              masonry layout uses the column syntax for rows.
  jensimmons: Chrome believes it's less confusing to use the same
              syntax in rows vs columns; but we believe it's better to
              use the same syntax between grid rows and masonry rows
  jensimmons: Other difference is the auto-flow -- grid's indicates the
              primary fill direction, Chrome believes this doesn't make
              sense and changed it to match the orientation of lines
  jensimmons: Debatable which is better. Might make sense if we had
              time machine, but is it worth creating a new layout API
              for this?
  jensimmons: Lots of subtle differences are likely to trip people up.
              They're familiar but not quite the same.
  jensimmons: We shouldn't fork grid, would be confusing to authors.
  jensimmons: Chrome argues that new display type allows better
              defaults -- but the defaults propose aren't good
  jensimmons: if you think through the default they propose, it doesn't
              quite work as easily as claimed [see article]
  jensimmons: requires deep understanding of autosizing
  jensimmons: We believe it's better to just use grid. Very simple, one
              new value, re-uses syntax and mental model makes easier
              to learn
  jensimmons: also easier to switch, e.g. at breakpoints or progressive
              enhancement
  jensimmons: follows CSS design principles to re-use what already
              exists
  [end presentations]

  astearns: If you have comments, please add yourself to the queue

  <lea> https://github.com/w3ctag/design-reviews/issues/1003#issuecomment-2489688718
  lea: We did a TAG review on this
  lea: My opinion is fully reflected there. I think the arguments
       WebKit team makes are compelling.
  lea: We thought not only should masonry be part of grid, but should
       go further.
  lea: a lot of arguments for integrating is that "grid is too hard".
       In that case we should make grid things easier.
  lea: complex things are possible, but simple things are not so easy
  lea: Big part of Google's argument is defaults, but we could just
       have smarter defaults -- there is precedent for this in CSS
  lea: if we decided that would help ergonomics
  lea: We agree that switching between grid vs masonry is common. Grid
       might be a slightly better fallback than nothing, but minor
       argument because people can use @supports
  lea: Introducing all these new properties increasing the API surfaces
       that authors need to learn. Less they can port over.
  lea: Even if we say we will be disciplined, experience shows that we
       won't. Even if not intentional, accidental.
  lea: DRY - don't have multiple sources of truth

  lea: One of arguments against masonry in grid is that grid's are 2D,
       but actually in graphic design grids were often 1D
  lea: I agree that most masonry use cases need simpler grids than
       general grid use cases
  lea: but that means we should make those grids easier to define for
       both grid and masonry
  lea: The more we looked into this, we realize there are 3 different
       layout modes that give you 2D arrangement of children
  lea: we recommended not just make masonry part of grid, but find ways
       of integrating what we already have better
  lea: could we come up with a shorthand that sets grid-auto-flow and
       flex-direction, and promote that for layout direction in general?
  lea: then authors only need to learn one control for it
  lea: Another concern was overfitting
  lea: it doesn't cover a lot of cases that look like masonry, like
       Flickr-style grid
  lea: it's like a horizontal masonry

  oriol: Problem with jensimmons's reasoning
  oriol: She said the proposed masonry-direction property would be new
         syntax that doesn't match grid-auto-flow property
  oriol: but this property matches flex-direction property
  oriol: so instead of trying to be close to grid, tries to be close to
         flexbox
  oriol: closer to grid is a choice, could be consistent with different
         things

  astearns: One question I asked is, has anyone changed their mind on
            which proposal they support?
  astearns: I personally have. I thought that separate display property
            made a lot more sense, in terms of designing the feature
            and I was very daunted by the idea that we'd have to
            consider both grid and masonry for any new development in
            either
  astearns: seemed sticky to me
  astearns: but the TAG argument convinced me that we should do the
            work of integrating these things

  TabAtkins: Thanks for setting that up for me, because I'm going to
             refute the TAG argument! I think they're wrong in this case
  TabAtkins: You can draw a lot of surface-level connections between
             Grid and Masonry, and Flexbox, and other hypothetical
             layouts
  TabAtkins: but when you actually look at details of how they work,
             behaviors each one is capable of, they're pretty distinct
  TabAtkins: if you try to combine together, it would be an unholy mess
             of conflicting constraints -- e.g. flexing in items of
             masonry or grid
  TabAtkins: or you'd have a weird mish-mash of, "the 2D layout", but
             if you call it a flex you get access to these properties,
             call it grid, access to these other properties
  TabAtkins: concrete example, "pillar" example mentioned in webKit
             blog post, that wasn't compatible with the base concepts
             in masonry and flex because it wants a shared block
             formatting context
  TabAtkins: grid etc have different formatting contexts, can't use
             floats
  <miriam> I didn't come up with the pillar idea - that was from webkit
  <lea> actually, the TAG argument was that layout seems to actually be
        a continuum, and syntax should accommodate that rather than
        forcing one of two extremes (current flex vs current grid).
  TabAtkins: they're specialized for what makes sense
  TabAtkins: You can occasionally merge things together, but definitely
             not something you can do that by default
  TabAtkins: too distinct to be merged in a reasonable way
  <jensimmons> That's why the "pillar" example will use `display:
               block`. The argument being made when it was articulated
               is NOT that it should be part of Grid, but that it
               should be part of Block, and not it's own yet another
               new mode.
  <lea> Our argument was not "make it a part of grid" per se, but more
        "don't introduce a completely parallel new thing". If you can
        extend flex so that masonry can become part of that, that's
        just as fine

  TabAtkins: Then usability arguments.
  TabAtkins: The masonry shorthand can be very similar to a standard
             CSS shorthand -- fully reorderable, just put the bits you
             care about
  TabAtkins: integrated one, the grid shorthand is very complex, mixing
             in masonry doesn't make it simpler
  TabAtkins: would stay bad and get worse
  TabAtkins: separating lets use design things catered to the use case
  <lea> if the `grid` shorthand has poor usability we should improve
        the grid shorthand, not design a new thing :)
  <TabAtkins> The `grid` shorthand is complex *intrinsically*, it's got
              a lot of concepts that have to all be put together. It
              can't really be made much better.
  <TabAtkins> And that intrinsic complexity is directly tied to it
              being an inherently 2d layout mode, whereas Masonry,
like Flex, is "1d, plus a bit"

  miriam: Like Alan, tend to agree with TAG on this. I'm not real
          excited about a future where we keep inventing new layout
          modes with slight differences.
  miriam: I get that there's complexity, but it's worth the attempt to
          figure out how to not invent new tracks every time we have a
          new layout that has tracks

  dbaron: I remember Ian arguing about the performance characteristics
          with regards to intrinsic size calculations
  dbaron: Was related to fundamental ordering between how parts of the
          process run in grid vs masonry
  dbaron: Good performance important for end users. Is that topic still
          under debate? Or is masonry in grid syntax using the model
          that Ian wanted
  TabAtkins: Whether in grid syntax or not, using the distinct layout
             rules we defined to work for it

  jyasskin: Wanted to emphasize a couple aspects of TAG review
  jyasskin: It seems really nice to keep the property from Chrome
            proposal that you don't have to learn both, can just learn
            to do masonry without learning all of Grid
  jyasskin: even if that's in a unified system
  jyasskin: perhaps still define masonry shorthand, and have it set
            grid properties
  <jensimmons> To create a simple masonry-style layout in Grid, you
               just need 3 lines of code (4 with a gap). It's quite
               simple.
  jyasskin: Most consensus part of TAG feedback was to share properties
            whenever possible
  jyasskin: Not necessary to share the same 'display' values; could
            define different 'display' values but share the properties.
  jyasskin: One thing we didn't like about unified proposal was
            `grid-auto-flow` in the unified proposal, where some values
            were ignored.
  <TabAtkins> Yeah, this is the usability point I'm pounding on

  astearns: I'm not hearing a way forward yet. At some point, one of
            the camps is going to have to concede in order to move this
            forward.
  lea: What if we do a straw poll. Not to decide, but to figure out how
       far are we from consensus?
  <fantasai> +1 lea
  lea: People may have been convinced
  POLL: 1) Just Use Grid 2) New Masonry Layout
  <TabAtkins> 2
  <lea> 1
  <fantasai> 1
  <kizu> 1
  <oriol> 2
  <bts> 1
  <alisonmaher> 2
  <jensimmons> 1
  <masonf> 2
  <florian> 1
  <miriam> 1
  <ethanjv> 2
  <JaseW> 1
  <astearns> 1 (changed from 2)
  <dbaron> abstain
  <ydaniv> 2
  <rachelandrew> 2
  <dholbert> 2 (weak preference)
  <gfaujdar> 1
  <chrishtr> 2
  <SebastianZ> 2
  <jfkthame> 1
  <bramus> abstain
  <kbabbitt> 2
  <joshtumath> 2 (but being persuaded)
  * ChrisL finds convincing arguments from both sides
  <schenney> 1 but try to move toward common property names
  <noamr> abstain (happy if we ship either!)
  <jyasskin> I would love to see both camps' attempts to move a step
             closer to a shared understanding. e.g. Do the WebKit folks
             think it makes sense to define a masonry: shorthand in the
             grid-unified proposal? Can they fix grid-auto-flow? Do the
             Chromium folks see some properties that could be more
             shared?
  <romain> 1 (changed from 2)
  <emilio> 1.5

  jensimmons: Personally disappointed that we're not making more
              progress. We've been having this argument for 5 years.
  jensimmons: We have two implementations. We'd like to ship. Lots of
              discussion over the last year.
  jensimmons: Many folks have strong opinions, but the target keeps
              moving. A lot of the concerns have been addressed, but
              new reasons to keep separate.
  <TabAtkins> I mean, same.
  jensimmons: Argument is no longer about technical details, but
              overall concept and authoring experience.
  astearns: I believe both camps want to ship and are frustrated with
            current impasse.
  <rachelandrew> not new reasons here, same reasons I started with
                 (before I was at Google)

  <florian> though we could still not reach consensus, I want to thank
            both sides for presenting clear arguments, densely packed,
            well delivered. I will go back to the presentations, and
            revisit some points, it really was informative to present
            the way it was.

CSS Snapshot
============

Add specs to Rough Interoperability
-----------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/9793

  SebastianZ: I posted all the data I could collect in 1st comment
  ChrisL: I'm broadly agreeing, but 2 things that have become CSS
          Shadow have not been published in a long time and can't be
          referenced
  ChrisL: I do suggest adding Color 5. So much of it has been cleared
          to ship

  fantasai: Nesting hasn't been published in like 2 years
  fantasai: I think it should be in rough interop, but it needs to be
            updated on TR
  fantasai: otherwise id' be fine with adding it
  fantasai: so i'd be fine if it was updated, but not until it is

  astearns: So stripped down is add CSS Scroll Anchoring 1, CSSOM 1,
            and Color 5 to Rough Interop
  <ChrisL> +1
  SebastianZ: We can add CSS Nesting if it gets updated in time
  fantasai: If Tab can update in the next couple weeks, happy to add
            it :)
  <TabAtkins> we'll see
  ChrisL: Do we mean publish a new WD as we have today, or do a bunch
          of work on it?
  TabAtkins: I think the ED is pretty up to date

  PROPOSED: Add Scroll Anchoring 1, CSSOM 1, and Color 5 to Rough
            Interop; add Nesting once it's republished.
  SebastianZ: One more thing -- Selectors 4

  RESOLVED: Add Scroll Anchoring 1, CSSOM 1, and Color 5 to Rough
            Interop; add Nesting once it's republished.

  ChrisL: Not objecting to including it
  astearns: Comment is that it's perhaps further than Rough Interop
  PROPOSED: Add Selectors 4 to Rough Interop

  RESOLVED: Add Selectors 4 to Rough Interop

CSS Sizing
==========

Intrinsic size of <img> / <video> with aspect ratio but no definite
    size
-------------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/10605

  emilio: This is about what happens when a video isn't loaded, and you
          specify width/height but override it with 'auto'
  emilio: There's inconsistency here with image.
  emilio: Very common to have an unloaded video
  emilio: Test in WPT that Blink still failing, but WK and GK pass
  emilio: Not super well-defined. Should we improve it?
  <emilio> https://wpt.fyi/results/html/rendering/replaced-elements/attributes-for-embedded-content-and-images/video-aspect-ratio.html?label=experimental&label=master&aligned
           is the wpt fwiw

  astearns: Preference for what to define?
  emilio: When I implemented this, I very explicitly thought about it,
          so would prefer to align on Gecko/WebKit behavior
  emilio: It is how images behave, so makes sense
  astearns: What is that behavior?

  oriol: I think the test emilio points out that Blink is failing is
         not completely related
  oriol: In Servo, we match Blink in a bunch of cases
  oriol: Problem emilio points out is you have a video and image
         element, both of which have width/height set to auto
  oriol: they behave different in Blink
  oriol: We behave like Blink, but pass the Test
  oriol: so there's room to do both things
  oriol: In particular, difference in Servo between images and video,
         if an img has no resource, we fall back to 0x0 natural size (
         not undefined), but video is undefined (no natural size) so
         get default object size (300x150)
  emilio: given you have aspect ratio, you end up with a sensible
          behavior
  emilio: given how common it has to have an unloaded video...
  emilio: I think I need to think through this again, been a long time
  emilio: I'll take it back to GH

Writing Modes
=============
  scribe: TabAtkins

Allow sideways-x and vertical-x to share a block formatting context?
--------------------------------------------------------------------
  github: https://github.com/w3c/csswg-drafts/issues/10714

  fantasai: WM3 said if you have a different writing mode, you form a
            different bfc
  fantasai: Made sense then, each writing mode went in a different
            block-flow direction
  fantasai: but in WM4 we introduced the sideways variants, which
            differ from vertical only in line orientation
  fantasai: so switching between those doesn't change block flow
            direction, probably doesn't need a new bfc
  fantasai: So does it make sense to allow them to share a bfc?
  fantasai: In terms of use-cases, say an English block quote inside of
            vertical Japanese
  fantasai: and you formatted that with sideways-*

  astearns: So firefox ships the sideways keywords. Does it establish a
            new bfc there?
  fantasai: Haven't checked, but also don't think we're under compat
            pressure here
  jfkthame: I think it does establish a bfc, but think we could change
            that without too much difficulty
  astearns: And Kent's comment is that we shouldn't change the spec
            unless there's a good author use-case
  fantasai: I think if you do mix these two... the cases where there is
            a behavior difference are rare
  fantasai: but if you did end up in such a situation, you'd want them
            to be in the same bfc
  TabAtkins: Obvious example is a float. If you started in Japanese,
             and then switched to sideways English, and float intruded
             into the English paragraph

  astearns: So proposal is to change the spec to not require a new bfc
            between sideways-* and vertical-* WM changes
  astearns: and we'll see if it's web compatible
  <oriol> The author can always force a bfc manually if desired
  fantasai: Yes. I suspect it is since firefox is the only one shipping
            sideways right now
  astearns: Comments or objections?

  RESOLVED: Allow consistent sideways-* and vertical-* writing modes to
            share a BFC

Admin
=====

  astearns: Next week we'll be inviting the CSS Next people to present
            to the group about a new CSS icon
  astearns: Also, huge backlog. If someone has 5-10 issues on a topic
            that we can schedule a breakout for, happy to do more of
            those

  <bramus> @astearns: Are the date for the F2F confirmed?
  astearns: I believe the Jan f2f dates are confirmed?
  fantasai: Haven't gotten final confirmation from the events team, but
            I have reserved it. Will update when I get notice soon

Received on Thursday, 5 December 2024 01:23:45 UTC