diff --git a/Tests/LibWeb/Layout/expected/grid/item-span-exceeds-columns-size.txt b/Tests/LibWeb/Layout/expected/grid/item-span-exceeds-columns-size.txt
new file mode 100644
index 0000000000..83508435c0
--- /dev/null
+++ b/Tests/LibWeb/Layout/expected/grid/item-span-exceeds-columns-size.txt
@@ -0,0 +1,5 @@
+Viewport <#document> at (0,0) content-size 800x600 children: not-inline
+ BlockContainer at (0,0) content-size 800x600 [BFC] children: not-inline
+ BlockContainer
at (8,8) content-size 784x100 children: not-inline
+ Box at (8,8) content-size 300x100 [GFC] children: not-inline
+ BlockContainer at (8,8) content-size 300x100 [BFC] children: not-inline
diff --git a/Tests/LibWeb/Layout/input/grid/item-span-exceeds-columns-size.html b/Tests/LibWeb/Layout/input/grid/item-span-exceeds-columns-size.html
new file mode 100644
index 0000000000..87b17df492
--- /dev/null
+++ b/Tests/LibWeb/Layout/input/grid/item-span-exceeds-columns-size.html
@@ -0,0 +1,13 @@
+
\ No newline at end of file
diff --git a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp
index 98327196e5..df1bf79f18 100644
--- a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp
+++ b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp
@@ -362,11 +362,6 @@ void GridFormattingContext::place_item_with_row_position(Box const& child_box)
int column_start = 0;
size_t column_span = child_box.computed_values().grid_column_start().is_span() ? child_box.computed_values().grid_column_start().raw_value() : 1;
- // https://drafts.csswg.org/css-grid/#auto-placement-algo
- // 8.5. Grid Item Placement Algorithm
- // 3.3. If the largest column span among all the items without a definite column position is larger
- // than the width of the implicit grid, add columns to the end of the implicit grid to accommodate
- // that column span.
bool found_available_column = false;
for (size_t column_index = column_start; column_index < m_occupation_grid.column_count(); column_index++) {
if (!m_occupation_grid.is_occupied(column_index, row_start)) {
@@ -531,11 +526,6 @@ void GridFormattingContext::place_item_with_no_declared_position(Box const& chil
column_span = child_box.computed_values().grid_column_start().raw_value();
else if (child_box.computed_values().grid_column_end().is_span())
column_span = child_box.computed_values().grid_column_end().raw_value();
- // https://drafts.csswg.org/css-grid/#auto-placement-algo
- // 8.5. Grid Item Placement Algorithm
- // 3.3. If the largest column span among all the items without a definite column position is larger
- // than the width of the implicit grid, add columns to the end of the implicit grid to accommodate
- // that column span.
auto row_start = 0;
size_t row_span = 1;
if (child_box.computed_values().grid_row_start().is_span())
@@ -1371,6 +1361,20 @@ void GridFormattingContext::place_grid_items(AvailableSpace const& available_spa
// and 2, respectively. Adding columns for "items not yet positioned but with a definite column"
// will be done in step 4.
+ // 3.3. If the largest column span among all the items without a definite column position is larger
+ // than the width of the implicit grid, add columns to the end of the implicit grid to accommodate
+ // that column span.
+ for (auto const& child_box : m_boxes_to_place) {
+ int column_span = 1;
+ if (child_box->computed_values().grid_column_start().is_span())
+ column_span = child_box->computed_values().grid_column_start().raw_value();
+ else if (child_box->computed_values().grid_column_end().is_span())
+ column_span = child_box->computed_values().grid_column_end().raw_value();
+
+ if (column_span - 1 > m_occupation_grid.max_column_index())
+ m_occupation_grid.set_max_column_index(column_span - 1);
+ }
+
// 4. Position the remaining grid items.
// For each grid item that hasn't been positioned by the previous steps, in order-modified document
// order:
diff --git a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.h b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.h
index 5427e30b4a..b42a53ab8e 100644
--- a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.h
+++ b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.h
@@ -73,6 +73,8 @@ public:
return abs(m_min_row_index) + m_max_row_index + 1;
}
+ void set_max_column_index(size_t max_column_index) { m_max_column_index = max_column_index; }
+
int min_column_index() const { return m_min_column_index; }
int max_column_index() const { return m_max_column_index; }
int min_row_index() const { return m_min_row_index; }