The TAG response to the masonry syntax issue asked us to look into unifying controls for our layout modes, calling out grid-auto-flow and flex-flow (flex-direction + flex-wrap) in particular. Apple looked into this, and we have the following syntax proposal:
Introduce item-flow aliased to both flex-flow and grid-auto-flow and defined as a shorthand for the following properties:
Caveats: This would make flex-flow and grid-auto-flow cascade as a single property, which is a change in behavior and therefore could have some Web-compat impact.
Variations: This is our initial sketch, but there are some variations we’ve considered:
- We’re unsure if
item-slack should be a longhand of item-flow or not: it's often nice to put it in the item-flow shorthand, but it might also make sense for it to cascade independently.
- We’re open to ideas about the
item- prefix. Ideas we’ve come up with so far include item-, box-, items-, and placement-. (We’re drawing the “item” terminology from the specs and from the align-items property.)
Thoughts?
The TAG response to the masonry syntax issue asked us to look into unifying controls for our layout modes, calling out
grid-auto-flowandflex-flow(flex-direction+flex-wrap) in particular. Apple looked into this, and we have the following syntax proposal:Introduce
item-flowaliased to bothflex-flowandgrid-auto-flowand defined as a shorthand for the following properties:item-direction(also aliased asflex-direction)row | column | row-reverse | column-reverseitem-wrap(also aliased asflex-wrap)auto | wrap | wrap-reverse | nowrapautocomputes to eitherwrap(for Grid) ornowrap(for Flexbox)nowrapin Grid would mean autoplacement adds implicit tracks instead of wrapping to the next rowitem-packnormal | densedensepacking for Flexbox would mean that instead of breaking lines as soon as an item can’t fit, we try to cram in one more, triggeringflex-shrinkbehavior instead offlex-growon that line. See [css-flexbox-2] Allow cramming items into a line when they would only overflow if not shrunk #3071.item-pack: normal | dense || [ collapse | balance ]could allow:collapsetriggering a masonry-style layout for Grid (see [css-grid-3][masonry] Masonry Syntax Debate #11243).balanceopting into balanced line-wrapping for Flexbox ([css-flexbox-2] Add flex-wrap: balance; #3070).item-slack<length-percentage>masonry-slackproperty. See [css-grid] Decide on a name foritem-slack#10884.10pxslack would mean “if there’s only 10px overflow on this line when adding the next item, cram it in anyway, as squeezing in an extra 10px is no big deal”.10pxslack would mean “if there’s only 10px empty space left on this line, don’t try to cram in the next item, that’s too much cramming”.Caveats: This would make
flex-flowandgrid-auto-flowcascade as a single property, which is a change in behavior and therefore could have some Web-compat impact.Variations: This is our initial sketch, but there are some variations we’ve considered:
item-slackshould be a longhand ofitem-flowor not: it's often nice to put it in theitem-flowshorthand, but it might also make sense for it to cascade independently.item-prefix. Ideas we’ve come up with so far includeitem-,box-,items-, andplacement-. (We’re drawing the “item” terminology from the specs and from thealign-itemsproperty.)Thoughts?