W3C home > Mailing lists > Public > public-css-archive@w3.org > October 2017

Re: [csswg-drafts] [css-grid] Percentages and intrinsic size

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
Message-ID: <issue_comment.created-333812409-1507029577-sysbot+gh@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.

![Example of back computing percentage gaps with intrinsic tracks](https://user-images.githubusercontent.com/11602/31122672-0699ecf4-a83d-11e7-99d9-a268f5b26811.png)

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

This archive was generated by hypermail 2.4.0 : Tuesday, 5 July 2022 06:41:19 UTC