- From: fantasai <fantasai.lists@inkedblade.net>
- Date: Mon, 16 Oct 2017 22:19:33 -0700
- To: "www-style@w3.org" <www-style@w3.org>, Rachel Andrew <me@rachelandrew.co.uk>
On 10/16/2017 09:48 PM, fantasai wrote: > Copying www-style because this was a very interesting question. > > On 10/16/2017 03:33 AM, Rachel Andrew wrote: >> Hi - hopefully a quick question. >> >> Been building a whole bunch of sizing examples for a talk, but also to make sure I properly understand it all myself :D >> >> I am wondering why this behaves differently in grid and flexbox. >> >> https://codepen.io/rachelandrew/pen/1d0cb45dd6048547576cbf42a01c6f19 >> >> In the flex example the smaller tracks have collapsed to min-content, allowing the one with a lot of content to get as big >> as it can. >> >> In grid unless I actually use min-content as the track size, they don’t soft-wrap unless I add additional content. >> >> There seems to be interop, so I figured I’ve missed something and wondered why this behaves differently between layout >> methods as this section tends to refer back to the flexbox model https://drafts.csswg.org/css-grid/#min-size-auto. > > Oh, this is a realllllly good question, and I think something > we hadn't really thought about at all. > > Here's what's going on: > > Flexbox starts from the max-content size. It realizes it doesn't > have enough space, so it starts to distribute negative space to > the items. The distribution is in proportion to their flex shrink > ratio multiplied by their flex basis, so the item with the long > text shrinks more rapidly, but they all shrink to some extent > until everything fits, with each item flooring at its min-content > size. > > Grid starts from the min-content size. It realizes it has extra > space to distribute, so it starts distributing space--equally-- > to each track, capping each one at its max-content size. > > To get Grid's behavior in Flexbox, you need to use a 'flex-basis' > of 'min-content': then it will run the same algorithm as Grid. > (I'm not sure if that's supported yet; if not feel free to file > bugs, as that feature has been exceptionally resolved for release > even though Sizing isn't CR yet. :) > https://drafts.csswg.org/css-2017/#experimental ('flex: min-content' to be exact, since we also need flex-grow of 1.) Also you'd need to cap it at max-content like item { flex: min-content; max-width: max-content; } so that all extra space goes to the larger item rather than padding the smaller ones. Mozilla supports these keywords under -moz- prefixes. One behavior you can't get with Flexbox is Grid's auto behavior under justify-content: stretch, though--that extra phase of space distribution doesn't exist under Flexbox. It might be worth thinking about whether we want to align these behaviors more somehow, if that's even possible. ~fantasai
Received on Tuesday, 17 October 2017 05:20:18 UTC