From 21b1f1653d0e50b71d60f2b8bb9d1a7ea4e7b788 Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Fri, 12 Jun 2020 17:41:14 +0200 Subject: LibWeb: Implement very basic margin collapsing We now collapse a block's top margin with the previous sibling's bottom margin so that the larger margin wins. --- Libraries/LibWeb/Layout/LayoutBlock.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'Libraries/LibWeb/Layout') diff --git a/Libraries/LibWeb/Layout/LayoutBlock.cpp b/Libraries/LibWeb/Layout/LayoutBlock.cpp index 19318a9551..114a4df77d 100644 --- a/Libraries/LibWeb/Layout/LayoutBlock.cpp +++ b/Libraries/LibWeb/Layout/LayoutBlock.cpp @@ -477,7 +477,14 @@ void LayoutBlock::compute_position() if (relevant_sibling) { auto& previous_sibling_style = relevant_sibling->box_model(); position_y += relevant_sibling->effective_offset().y() + relevant_sibling->height(); - position_y += previous_sibling_style.margin_box(*this).bottom; + + // Collapse top margin with bottom margin of previous sibling if necessary + float previous_sibling_margin_bottom = previous_sibling_style.margin().bottom.to_px(*relevant_sibling); + float my_margin_top = box_model().margin().top.to_px(*this); + if (previous_sibling_margin_bottom > my_margin_top) { + // Sibling's margin is larger than mine, adjust so we use sibling's. + position_y += previous_sibling_margin_bottom - my_margin_top; + } } set_offset({ position_x, position_y }); -- cgit v1.2.3