LibWeb: Fix 0fr track intrinsic sizing in grid layout

When distributing item contributions among flexible tracks with
intrinsic min sizing functions, we were skipping distribution entirely
when total_flex == 0. However, tracks like `0fr` (equivalent to
minmax(auto, 0fr)) should still receive the item's contribution
distributed equally among them.

Now we count intrinsic flexible tracks separately and distribute
equally when all flex factors are zero.
This commit is contained in:
Aliaksandr Kalenik
2026-01-03 01:27:31 +01:00
committed by Alexander Kalenik
parent c9a1548c00
commit b2bc33a8e4
Notes: github-actions[bot] 2026-01-03 15:42:41 +00:00
3 changed files with 33 additions and 23 deletions

View File

@@ -2,9 +2,8 @@ Harness status: OK
Found 30 tests
24 Pass
6 Fail
Fail 'grid' with: grid-template-columns: 0fr; and grid-template-rows: 0fr;
30 Pass
Pass 'grid' with: grid-template-columns: 0fr; and grid-template-rows: 0fr;
Pass 'grid' with: grid-template-columns: 1fr; and grid-template-rows: 1fr;
Pass 'grid' with: grid-template-columns: 2fr; and grid-template-rows: 2fr;
Pass 'grid' with: grid-template-columns: minmax(0, 0fr); and grid-template-rows: minmax(0, 0fr);
@@ -12,22 +11,22 @@ Pass 'grid' with: grid-template-columns: minmax(0, .5fr); and grid-template-rows
Pass 'grid' with: grid-template-columns: minmax(0, 1fr); and grid-template-rows: minmax(0, 1fr);
Pass 'grid' with: grid-template-columns: minmax(0, 2fr); and grid-template-rows: minmax(0, 2fr);
Pass 'grid' with: grid-template-columns: minmax(75px, 1fr); and grid-template-rows: minmax(75px, 1fr);
Fail 'grid' with: grid-template-columns: 0fr 0fr; and grid-template-rows: 0fr 0fr;
Pass 'grid' with: grid-template-columns: 0fr 0fr; and grid-template-rows: 0fr 0fr;
Pass 'grid' with: grid-template-columns: 0fr 1fr; and grid-template-rows: 0fr 1fr;
Pass 'grid' with: grid-template-columns: 1fr 0fr; and grid-template-rows: 1fr 0fr;
Pass 'grid' with: grid-template-columns: 1fr 1fr; and grid-template-rows: 1fr 1fr;
Pass 'grid' with: grid-template-columns: 1fr 3fr; and grid-template-rows: 1fr 3fr;
Fail 'grid' with: grid-template-columns: 0fr 0fr 1fr; and grid-template-rows: 0fr 0fr 1fr;
Pass 'grid' with: grid-template-columns: 0fr 0fr 1fr; and grid-template-rows: 0fr 0fr 1fr;
Pass 'grid' with: grid-template-columns: minmax(0, 0fr) minmax(0, 0fr); and grid-template-rows: minmax(0, 0fr) minmax(0, 0fr);
Pass 'grid' with: grid-template-columns: minmax(0, 0fr) minmax(0, 1fr); and grid-template-rows: minmax(0, 0fr) minmax(0, 1fr);
Pass 'grid' with: grid-template-columns: minmax(15px, 0fr) minmax(0, 1fr); and grid-template-rows: minmax(15px, 0fr) minmax(0, 1fr);
Pass 'grid' with: grid-template-columns: minmax(20px, 1fr) minmax(0, 1fr); and grid-template-rows: minmax(20px, 1fr) minmax(0, 1fr);
Pass 'grid' with: grid-template-columns: minmax(30px, 1fr) minmax(0, 1fr); and grid-template-rows: minmax(30px, 1fr) minmax(0, 1fr);
Fail 'grid' with: grid-template-columns: 0fr minmax(0, 0fr); and grid-template-rows: 0fr minmax(0, 0fr);
Fail 'grid' with: grid-template-columns: 0fr minmax(0, 1fr); and grid-template-rows: 0fr minmax(0, 1fr);
Pass 'grid' with: grid-template-columns: 0fr minmax(0, 0fr); and grid-template-rows: 0fr minmax(0, 0fr);
Pass 'grid' with: grid-template-columns: 0fr minmax(0, 1fr); and grid-template-rows: 0fr minmax(0, 1fr);
Pass 'grid' with: grid-template-columns: 1fr minmax(0, 1fr); and grid-template-rows: 1fr minmax(0, 1fr);
Pass 'grid' with: grid-template-columns: 1fr minmax(25px, 1fr); and grid-template-rows: 1fr minmax(25px, 1fr);
Fail 'grid' with: grid-template-columns: 0fr auto; and grid-template-rows: 0fr auto;
Pass 'grid' with: grid-template-columns: 0fr auto; and grid-template-rows: 0fr auto;
Pass 'grid' with: grid-template-columns: 1fr auto; and grid-template-rows: 1fr auto;
Pass 'grid' with: grid-template-columns: 1fr max-content; and grid-template-rows: 1fr max-content;
Pass 'grid' with: grid-template-columns: minmax(0, 0fr) auto; and grid-template-rows: minmax(0, 0fr) auto;

View File

@@ -2,9 +2,9 @@ Harness status: OK
Found 102 tests
75 Pass
27 Fail
Fail auto min item 'grid' with: grid-template-columns: 0fr; and grid-template-rows: 0fr;
83 Pass
19 Fail
Pass auto min item 'grid' with: grid-template-columns: 0fr; and grid-template-rows: 0fr;
Pass auto min item 'grid' with: grid-template-columns: 1fr; and grid-template-rows: 1fr;
Pass auto min item 'grid' with: grid-template-columns: 2fr; and grid-template-rows: 2fr;
Pass auto min item 'grid' with: grid-template-columns: minmax(0, 0fr); and grid-template-rows: minmax(0, 0fr);
@@ -72,7 +72,7 @@ Pass min-content min item 'grid' with: grid-template-columns: minmax(0, 0fr) aut
Pass min-content min item 'grid' with: grid-template-columns: minmax(0, 1fr) auto; and grid-template-rows: minmax(0, 1fr) auto;
Pass min-content min item 'grid' with: grid-template-columns: minmax(25px, 0fr) auto; and grid-template-rows: minmax(25px, 0fr) auto;
Pass min-content min item 'grid' with: grid-template-columns: minmax(25px, 1fr) auto; and grid-template-rows: minmax(25px, 1fr) auto;
Fail 50px min item 'grid' with: grid-template-columns: 0fr; and grid-template-rows: 0fr;
Pass 50px min item 'grid' with: grid-template-columns: 0fr; and grid-template-rows: 0fr;
Pass 50px min item 'grid' with: grid-template-columns: 1fr; and grid-template-rows: 1fr;
Pass 50px min item 'grid' with: grid-template-columns: 2fr; and grid-template-rows: 2fr;
Pass 50px min item 'grid' with: grid-template-columns: minmax(0, 0fr); and grid-template-rows: minmax(0, 0fr);
@@ -80,23 +80,23 @@ Pass 50px min item 'grid' with: grid-template-columns: minmax(0, .5fr); and grid
Pass 50px min item 'grid' with: grid-template-columns: minmax(0, 1fr); and grid-template-rows: minmax(0, 1fr);
Pass 50px min item 'grid' with: grid-template-columns: minmax(0, 2fr); and grid-template-rows: minmax(0, 2fr);
Pass 50px min item 'grid' with: grid-template-columns: minmax(75px, 1fr); and grid-template-rows: minmax(75px, 1fr);
Fail 50px min item 'grid' with: grid-template-columns: 0fr 0fr; and grid-template-rows: 0fr 0fr;
Pass 50px min item 'grid' with: grid-template-columns: 0fr 0fr; and grid-template-rows: 0fr 0fr;
Pass 50px min item 'grid' with: grid-template-columns: 0fr 1fr; and grid-template-rows: 0fr 1fr;
Pass 50px min item 'grid' with: grid-template-columns: 1fr 0fr; and grid-template-rows: 1fr 0fr;
Pass 50px min item 'grid' with: grid-template-columns: 1fr 1fr; and grid-template-rows: 1fr 1fr;
Pass 50px min item 'grid' with: grid-template-columns: 1fr 3fr; and grid-template-rows: 1fr 3fr;
Fail 50px min item 'grid' with: grid-template-columns: 0fr 0fr 1fr; and grid-template-rows: 0fr 0fr 1fr;
Pass 50px min item 'grid' with: grid-template-columns: 0fr 0fr 1fr; and grid-template-rows: 0fr 0fr 1fr;
Pass 50px min item 'grid' with: grid-template-columns: minmax(0, 0fr) minmax(0, 0fr); and grid-template-rows: minmax(0, 0fr) minmax(0, 0fr);
Pass 50px min item 'grid' with: grid-template-columns: minmax(0, 0fr) minmax(0, 1fr); and grid-template-rows: minmax(0, 0fr) minmax(0, 1fr);
Pass 50px min item 'grid' with: grid-template-columns: minmax(15px, 0fr) minmax(0, 1fr); and grid-template-rows: minmax(15px, 0fr) minmax(0, 1fr);
Pass 50px min item 'grid' with: grid-template-columns: minmax(20px, 1fr) minmax(0, 1fr); and grid-template-rows: minmax(20px, 1fr) minmax(0, 1fr);
Pass 50px min item 'grid' with: grid-template-columns: minmax(40px, 1fr) minmax(0, 1fr); and grid-template-rows: minmax(40px, 1fr) minmax(0, 1fr);
Fail 50px min item 'grid' with: grid-template-columns: 0fr minmax(0, 0fr); and grid-template-rows: 0fr minmax(0, 0fr);
Fail 50px min item 'grid' with: grid-template-columns: 0fr minmax(0, 1fr); and grid-template-rows: 0fr minmax(0, 1fr);
Pass 50px min item 'grid' with: grid-template-columns: 0fr minmax(0, 0fr); and grid-template-rows: 0fr minmax(0, 0fr);
Pass 50px min item 'grid' with: grid-template-columns: 0fr minmax(0, 1fr); and grid-template-rows: 0fr minmax(0, 1fr);
Pass 50px min item 'grid' with: grid-template-columns: 1fr minmax(0, 1fr); and grid-template-rows: 1fr minmax(0, 1fr);
Pass 50px min item 'grid' with: grid-template-columns: 1fr minmax(25px, 1fr); and grid-template-rows: 1fr minmax(25px, 1fr);
Fail 50px min item 'grid' with: grid-template-columns: 0fr min-content; and grid-template-rows: 0fr min-content;
Fail 50px min item 'grid' with: grid-template-columns: 0fr auto; and grid-template-rows: 0fr auto;
Pass 50px min item 'grid' with: grid-template-columns: 0fr min-content; and grid-template-rows: 0fr min-content;
Pass 50px min item 'grid' with: grid-template-columns: 0fr auto; and grid-template-rows: 0fr auto;
Pass 50px min item 'grid' with: grid-template-columns: 0.5fr auto; and grid-template-rows: 0.5fr auto;
Pass 50px min item 'grid' with: grid-template-columns: 1fr auto; and grid-template-rows: 1fr auto;
Pass 50px min item 'grid' with: grid-template-columns: 1fr max-content; and grid-template-rows: 1fr max-content;