diff --git a/Userland/Libraries/LibWeb/Layout/FormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/FormattingContext.cpp index 2a08e9f126..8da09790a7 100644 --- a/Userland/Libraries/LibWeb/Layout/FormattingContext.cpp +++ b/Userland/Libraries/LibWeb/Layout/FormattingContext.cpp @@ -1111,13 +1111,22 @@ float FormattingContext::containing_block_height_for(Box const& box, LayoutState VERIFY_NOT_REACHED(); } +static Box const* previous_block_level_sibling(Box const& box) +{ + for (auto* sibling = box.previous_sibling_of_type(); sibling; sibling = sibling->previous_sibling_of_type()) { + if (sibling->computed_values().display().is_block_outside()) + return sibling; + } + return nullptr; +} + float FormattingContext::compute_box_y_position_with_respect_to_siblings(Box const& child_box, LayoutState::UsedValues const& box_state) { float y = box_state.border_box_top(); Vector collapsible_margins; - auto* relevant_sibling = child_box.previous_sibling_of_type(); + auto* relevant_sibling = previous_block_level_sibling(child_box); while (relevant_sibling != nullptr) { if (!relevant_sibling->is_absolutely_positioned() && !relevant_sibling->is_floating()) { auto const& relevant_sibling_state = m_state.get(*relevant_sibling); @@ -1127,7 +1136,7 @@ float FormattingContext::compute_box_y_position_with_respect_to_siblings(Box con break; collapsible_margins.append(relevant_sibling_state.margin_top); } - relevant_sibling = relevant_sibling->previous_sibling_of_type(); + relevant_sibling = previous_block_level_sibling(*relevant_sibling); } if (relevant_sibling) {