diff options
author | Martin Robinson <martin.james.robinson@gmail.com> | 2014-08-18 14:27:10 -0700 |
---|---|---|
committer | Martin Robinson <martin.james.robinson@gmail.com> | 2014-08-18 14:27:10 -0700 |
commit | d565eade8894bd788b56e77d84153bd5f67f627d (patch) | |
tree | 41d7a03638b9ec40477a9d0101c88f35aaa4a926 /src | |
parent | 7b24d3e2998199d0f2d68a0ab5712b1876bfc8c4 (diff) | |
parent | 65fce97f5114c97d52ea81504926b98cea3525a3 (diff) | |
download | servo-d565eade8894bd788b56e77d84153bd5f67f627d.tar.gz servo-d565eade8894bd788b56e77d84153bd5f67f627d.zip |
Merge pull request #3107 from mrobinson/root-margin-collapse
Prevent margin collapse in the root flow
Diffstat (limited to 'src')
-rw-r--r-- | src/components/layout/block.rs | 8 | ||||
-rw-r--r-- | src/test/ref/basic.list | 1 | ||||
-rw-r--r-- | src/test/ref/root_margin_collapse_a.html | 5 | ||||
-rw-r--r-- | src/test/ref/root_margin_collapse_b.html | 5 |
4 files changed, 17 insertions, 2 deletions
diff --git a/src/components/layout/block.rs b/src/components/layout/block.rs index 50dfd7e3a3e..ea65756c7de 100644 --- a/src/components/layout/block.rs +++ b/src/components/layout/block.rs @@ -760,7 +760,7 @@ impl BlockFlow { } /// If this is the root flow, shifts all kids down and adjusts our size to account for - /// collapsed margins. + /// root flow margins, which should never be collapsed according to CSS § 8.3.1. /// /// TODO(#2017, pcwalton): This is somewhat inefficient (traverses kids twice); can we do /// better? @@ -770,7 +770,7 @@ impl BlockFlow { } let (block_start_margin_value, block_end_margin_value) = match self.base.collapsible_margins { - MarginsCollapseThrough(margin) => (Au(0), margin.collapse()), + MarginsCollapseThrough(_) => fail!("Margins unexpectedly collapsed through root flow."), MarginsCollapse(block_start_margin, block_end_margin) => { (block_start_margin.collapse(), block_end_margin.collapse()) } @@ -1581,6 +1581,10 @@ impl Flow for BlockFlow { } else if self.is_float() { debug!("assign_block_size_float: assigning block_size for float"); self.assign_block_size_float(ctx); + } else if self.is_root() { + // Root element margins should never be collapsed according to CSS § 8.3.1. + debug!("assign_block_size: assigning block_size for root flow"); + self.assign_block_size_block_base(ctx, MarginsMayNotCollapse); } else { debug!("assign_block_size: assigning block_size for block"); self.assign_block_size_block_base(ctx, MarginsMayCollapse); diff --git a/src/test/ref/basic.list b/src/test/ref/basic.list index 3a36b86aa4f..058e567068a 100644 --- a/src/test/ref/basic.list +++ b/src/test/ref/basic.list @@ -93,3 +93,4 @@ flaky_cpu == linebreak_simple_a.html linebreak_simple_b.html == line_height_a.html line_height_ref.html == block_replaced_content_a.html block_replaced_content_ref.html == block_replaced_content_b.html block_replaced_content_ref.html +== root_margin_collapse_a.html root_margin_collapse_b.html diff --git a/src/test/ref/root_margin_collapse_a.html b/src/test/ref/root_margin_collapse_a.html new file mode 100644 index 00000000000..a3c98252be0 --- /dev/null +++ b/src/test/ref/root_margin_collapse_a.html @@ -0,0 +1,5 @@ +<html style="margin-top: 10px;"> + <body style="margin-top: 10px;"> + <div style="width: 100px; height: 100px; background: black;"></div> + </body> +</html> diff --git a/src/test/ref/root_margin_collapse_b.html b/src/test/ref/root_margin_collapse_b.html new file mode 100644 index 00000000000..d7bdcf4e536 --- /dev/null +++ b/src/test/ref/root_margin_collapse_b.html @@ -0,0 +1,5 @@ +<html> + <body style="margin-top: 20px;"> + <div style="width: 100px; height: 100px; background: black;"></div> + </body> +</html> |