at (8,8) content-size 784x17.46875 [BFC] children: inline
+ line 0 width: 80.25, height: 17.46875, bottom: 17.46875, baseline: 13.53125
+ frag 0 from TextNode start: 0, length: 9, rect: [8,8 80.25x17.46875]
+ "more text"
+ TextNode <#text>
+
+PaintableWithLines (Viewport<#document>) [0,0 800x600]
+ PaintableWithLines (BlockContainer) [0,0 800x600]
+ PaintableWithLines (BlockContainer) [8,8 784x17.46875]
+ PaintableBox (Box
.outer-grid) [8,8 784x17.46875]
+ PaintableWithLines (BlockContainer
.inner-absolute-block) [8,8 80.765625x17.46875]
+ TextPaintable (TextNode<#text>)
+ PaintableWithLines (BlockContainer
) [8,8 784x17.46875]
+ TextPaintable (TextNode<#text>)
diff --git a/Tests/LibWeb/Layout/input/grid/abspos-item.html b/Tests/LibWeb/Layout/input/grid/abspos-item.html
new file mode 100644
index 0000000000..523e7b7726
--- /dev/null
+++ b/Tests/LibWeb/Layout/input/grid/abspos-item.html
@@ -0,0 +1,10 @@
+
+
\ No newline at end of file
diff --git a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp
index 96fa2cea95..38209f0631 100644
--- a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp
+++ b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.cpp
@@ -1317,6 +1317,10 @@ void GridFormattingContext::place_grid_items(AvailableSpace const& available_spa
grid_container().for_each_child_of_type
([&](Box& child_box) {
if (can_skip_is_anonymous_text_run(child_box))
return IterationDecision::Continue;
+
+ if (child_box.is_out_of_flow(*this))
+ return IterationDecision::Continue;
+
m_boxes_to_place.append(child_box);
return IterationDecision::Continue;
});
@@ -1780,6 +1784,18 @@ void GridFormattingContext::run(Box const& box, LayoutMode, AvailableSpace const
}
}
+void GridFormattingContext::parent_context_did_dimension_child_root_box()
+{
+ grid_container().for_each_child_of_type([&](Layout::Box& box) {
+ if (box.is_absolutely_positioned()) {
+ auto& cb_state = m_state.get(*box.containing_block());
+ auto available_width = AvailableSize::make_definite(cb_state.content_width() + cb_state.padding_left + cb_state.padding_right);
+ auto available_height = AvailableSize::make_definite(cb_state.content_height() + cb_state.padding_top + cb_state.padding_bottom);
+ layout_absolutely_positioned_element(box, AvailableSpace(available_width, available_height));
+ }
+ });
+}
+
void GridFormattingContext::determine_intrinsic_size_of_grid_container(AvailableSpace const& available_space)
{
// https://www.w3.org/TR/css-grid-1/#intrinsic-sizes
diff --git a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.h b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.h
index 142193317e..df2a3c2d38 100644
--- a/Userland/Libraries/LibWeb/Layout/GridFormattingContext.h
+++ b/Userland/Libraries/LibWeb/Layout/GridFormattingContext.h
@@ -223,6 +223,8 @@ private:
void determine_grid_container_height();
void determine_intrinsic_size_of_grid_container(AvailableSpace const& available_space);
+ virtual void parent_context_did_dimension_child_root_box() override;
+
void resolve_grid_item_widths();
void resolve_grid_item_heights();