mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 13:57:35 +00:00
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.
This commit is contained in:
parent
88673f3f85
commit
21b1f1653d
3 changed files with 25 additions and 1 deletions
16
Base/home/anon/www/margin-collapse-1.html
Normal file
16
Base/home/anon/www/margin-collapse-1.html
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
<style>
|
||||||
|
#foo {
|
||||||
|
border: 1px solid red;
|
||||||
|
margin: 25px;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
#bar {
|
||||||
|
border: 1px solid green;
|
||||||
|
margin: 25px;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<div id=foo>foo</div>
|
||||||
|
<div id=bar>bar</div>
|
|
@ -28,6 +28,7 @@ span#ua {
|
||||||
<p>Your user agent is: <b><span id="ua"></span></b></p>
|
<p>Your user agent is: <b><span id="ua"></span></b></p>
|
||||||
<p>Some small test pages:</p>
|
<p>Some small test pages:</p>
|
||||||
<ul>
|
<ul>
|
||||||
|
<li><a href="margin-collapse-1.html">margin collapsing 1</a></li>
|
||||||
<li><a href="position-absolute-from-edges.html">position: absolute, offset from edges</a></li>
|
<li><a href="position-absolute-from-edges.html">position: absolute, offset from edges</a></li>
|
||||||
<li><a href="iframe.html">iframe</a></li>
|
<li><a href="iframe.html">iframe</a></li>
|
||||||
<li><a href="many-buggies.html">many buggies</a></li>
|
<li><a href="many-buggies.html">many buggies</a></li>
|
||||||
|
|
|
@ -477,7 +477,14 @@ void LayoutBlock::compute_position()
|
||||||
if (relevant_sibling) {
|
if (relevant_sibling) {
|
||||||
auto& previous_sibling_style = relevant_sibling->box_model();
|
auto& previous_sibling_style = relevant_sibling->box_model();
|
||||||
position_y += relevant_sibling->effective_offset().y() + relevant_sibling->height();
|
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 });
|
set_offset({ position_x, position_y });
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue