Overview#
Implement CSS Grid Layout Module Level 1 — the core grid layout algorithm.
Requirements#
Parsing#
- Parse grid container properties:
display: grid/display: inline-gridgrid-template-columns/grid-template-rows: track sizing with<length>,<percentage>,fr,auto,min-content,max-content,minmax(min, max),repeat(count, tracks)grid-template-areas: named grid areasgrid-auto-columns/grid-auto-rows: implicit track sizinggrid-auto-flow:row,column,densegap/row-gap/column-gap
- Parse grid item properties:
grid-column-start/grid-column-end/grid-columngrid-row-start/grid-row-end/grid-rowgrid-area- Line numbers,
span N, named lines/areas
Grid Layout Algorithm#
- Resolve explicit grid (from template definitions)
- Place items with explicit positions
- Auto-place remaining items (row-first or column-first, with dense packing)
- Track sizing algorithm:
- Initialize track sizes (base size and growth limit)
- Resolve intrinsic track sizes using item contributions
- Maximize tracks (distribute remaining space)
- Expand flexible tracks (
frunits) - Stretch
autotracks
- Resolve item positions within their grid areas
- Handle alignment:
justify-items,align-items,justify-content,align-content,justify-self,align-self
Integration#
- Extend CSS parser in
crates/css/for grid properties - Add grid layout mode to
crates/layout/alongside existing block and inline layout - Grid containers establish a new formatting context for their children
Acceptance Criteria#
-
display: gridcreates a grid container -
grid-template-columns: 1fr 2fr 1frcreates three columns -
grid-template-rows: auto 100px autosizes rows correctly -
frunits distribute remaining space proportionally -
minmax()andrepeat()work in track definitions - Grid items can be placed with
grid-column/grid-row -
grid-template-areaswith named areas works - Auto-placement fills cells in order
-
gapadds spacing between tracks - Alignment properties position items within their areas
- All existing tests continue to pass
- Unit tests for track sizing algorithm, auto-placement, and alignment