summaryrefslogtreecommitdiff
path: root/Libraries/LibWeb/Layout
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2020-06-12 17:41:14 +0200
committerAndreas Kling <kling@serenityos.org>2020-06-12 18:47:18 +0200
commit21b1f1653d0e50b71d60f2b8bb9d1a7ea4e7b788 (patch)
tree92772c1f71dbe26c7af60316209cdb02cf4f9ee1 /Libraries/LibWeb/Layout
parent88673f3f8556e428b79a96c70e7527c456662e52 (diff)
downloadserenity-21b1f1653d0e50b71d60f2b8bb9d1a7ea4e7b788.zip
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.
Diffstat (limited to 'Libraries/LibWeb/Layout')
-rw-r--r--Libraries/LibWeb/Layout/LayoutBlock.cpp9
1 files changed, 8 insertions, 1 deletions
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 });