- From: Manuel Rego Casasnovas via GitHub <sysbot+gh@w3.org>
- Date: Tue, 03 Oct 2017 11:19:51 +0000
- To: public-css-archive@w3.org
> A = contribute back-computatation ratio, resolve as percent
> Back-compute percentages on gaps: the intrinsic size of the grid
> container is the sum of the intrinsic sizes of the tracks multiplied
> by a ratio computed from the sum of the percentage gaps.
> (@MatsPalmgren <https://github.com/matspalmgren> will provide the
> exact formula for this ratio, which presumably includes some
> clamping, and is implemented in Gecko.) The gaps then resolve
> against that size.
So here the formula (if I got it right) would be something like.
`sum of the track sizes / (1 - sum of percentages)`
For example if you've `grid-template-columns: 50px 50px; grid-column-gap: 20%;` you'll do:
`(50 + 50) / (1 - 0.20)`
The result would be 125px and the gap size would be 25px (20% of 125px).
We think we've found an issue with this idea. Let's use another example:
```html
<div style="display: inline-grid; font: 10px/1 Ahem; border: thick dotted;
grid-template-columns: auto 50px; grid-template-rows: 20px 20px; grid-column-gap: 20%;">
<div style="grid-column: 1; background: pink; color: magenta;">X</div>
<div style="grid-column: 2; background: cyan; color: blue;">X</div>
<div style="grid-column: 1 / span 2; background: yellow; color: maroon;">XXXXXXXXXXXXXXX</div>
</div>
```
Here we've 2 tracks, the first track one is `auto` and the 2nd one has 50px. Then we've a gap of `20%`.
Then we've an item that is spanning both tracks with a size of 150px.

To backcompute the perctenage gap, Firefox does `150 / (1-0.2) = 187.5`. And the gap is 37.5px (20% of 187.5px).
But then we've a grid container of 187.5px when the biggest element is 150px, so we don't need such a big grid container.
Would we want this kind of result?
> B = contribute zero, resolve as percent
> Percentage gaps contribute zero, resolve against intrinsic size: the
> intrinsic size of the grid container is the sum of the intrinsic
> sizes of the tracks. The gaps then resolve against that size in both
> axes.
On Blink we do this for column gaps.
Which is somehow similar to what happens with perecentea widths in regular blocks.
> C = contribute auto, resolve as percent
> Percentage gaps contribute based on content that was spanned,
> exactly as if they were percentage tracks. The intrinsic size of the
> grid container is the sum of the intrinsic sizes of the tracks
> assuming the gaps are also `auto` tracks. The gaps then resolve
> against that size in both axes.
This would be really hard to implement for us.
The problem is that right now we consider that the gaps have a fixed size during the track sizing algorithm.
If we need to consider them as `auto` tracks, then we'll need to deal on how the spanning elements are placed on those *extra tracks*, which won't be easy at all for our implementations.
> D = contribute zero, resolve as zero
> Percentage gaps contribute zero, resolve against intrinsic size: the
> intrinsic size of the grid container is the sum of the intrinsic
> sizes of the tracks. The gaps also resolve as zero: the percentage
> is treated exactly as zero inside indefinite containers.
This is what we do for rows in Blink.
Which is somehow similar to what happens with perecentea heights in regular blocks.
> E = contribute auto, resolve as auto
> Percentage gaps contribute based on content that was spanned,
> exactly as if they were percentage tracks. The intrinsic size of the
> grid container is the sum of the intrinsic sizes of the tracks
> assuming the gaps are also `auto` tracks. The gaps are also resolved
> as auto: they behave exactly as an ''auto'' track inside indefinite
> containers, and therefore may vary in size.
I guess this is discarted becuase the size of the gaps will be different, which doesn't make a lot of sense.
> F = contribute zero, resolve as percent (for column-gap) or zero (for
> row-gap)
> B for column gaps (contribute zero, resolve as percentage), D for
> row gaps (contribute zero, resolve as zero). (This is apparently
> what Blink does?)
Yeah, that's what we do now for gaps.
We're more inclined to do anyone of B, D or F.
--
GitHub Notification of comment by mrego
Please view or discuss this issue at https://github.com/w3c/csswg-drafts/issues/509#issuecomment-333812409 using your GitHub account
Received on Tuesday, 3 October 2017 11:19:40 UTC