diff options
author | Michael Howell <michael@notriddle.com> | 2016-07-06 10:02:33 -0700 |
---|---|---|
committer | Michael Howell <michael@notriddle.com> | 2016-07-06 10:02:33 -0700 |
commit | c11f85947e6406d053f02de6129ab7ecfbe7145c (patch) | |
tree | 6c986fdc5d5833b08bd7c9d9c3724d2605b2aa82 | |
parent | 4aaae7a4e69fd0dfb10b562d6a78ddfe3972d8f1 (diff) | |
download | servo-c11f85947e6406d053f02de6129ab7ecfbe7145c.tar.gz servo-c11f85947e6406d053f02de6129ab7ecfbe7145c.zip |
Correct negative margins in centered table cells
Fixes @AelitaBot queue viewer page
4 files changed, 46 insertions, 0 deletions
diff --git a/components/layout/table_cell.rs b/components/layout/table_cell.rs index 58bb96cfbf6..1e36adc65af 100644 --- a/components/layout/table_cell.rs +++ b/components/layout/table_cell.rs @@ -80,8 +80,12 @@ impl TableCellFlow { if !flow::base(self).restyle_damage.contains(REFLOW) { return; } + // Note to the reader: this code has been tested with negative margins. + // We end up with a "end" that's before the "start," but the math still works out. let first_start = flow::base(self).children.front().map(|kid| { + let kid_base = flow::base(kid); flow::base(kid).position.start.b + - kid_base.collapsible_margins.block_start_margin_for_noncollapsible_context() }); if let Some(mut first_start) = first_start { let mut last_end = first_start; diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index 32d55768235..e0c9ebfc5af 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -4960,6 +4960,18 @@ "url": "/_mozilla/css/table_specified_width_a.html" } ], + "css/table_vertical_align_margin_padding.html": [ + { + "path": "css/table_vertical_align_margin_padding.html", + "references": [ + [ + "/_mozilla/css/table_vertical_align_margin_padding_ref.html", + "==" + ] + ], + "url": "/_mozilla/css/table_vertical_align_margin_padding.html" + } + ], "css/table_width_attribute_a.html": [ { "path": "css/table_width_attribute_a.html", @@ -12092,6 +12104,18 @@ "url": "/_mozilla/css/table_specified_width_a.html" } ], + "css/table_vertical_align_margin_padding.html": [ + { + "path": "css/table_vertical_align_margin_padding.html", + "references": [ + [ + "/_mozilla/css/table_vertical_align_margin_padding_ref.html", + "==" + ] + ], + "url": "/_mozilla/css/table_vertical_align_margin_padding.html" + } + ], "css/table_width_attribute_a.html": [ { "path": "css/table_width_attribute_a.html", diff --git a/tests/wpt/mozilla/tests/css/table_vertical_align_margin_padding.html b/tests/wpt/mozilla/tests/css/table_vertical_align_margin_padding.html new file mode 100644 index 00000000000..3dc9c49c6c3 --- /dev/null +++ b/tests/wpt/mozilla/tests/css/table_vertical_align_margin_padding.html @@ -0,0 +1,9 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Negative margins in a table with middle alignment</title> +<link rel="match" href="table_vertical_align_margin_padding_ref.html"> +<style>table,tr,td{margin:0;padding:0;vertical-align:middle}</style> +<h1>Test passes if there is a single green box</h1> +<table><tr><td style="background:red"> +<div style="margin:-40px;padding:40px"><div style="background:green;width:40px;height:40px"></div></div> +</td></tr></table> diff --git a/tests/wpt/mozilla/tests/css/table_vertical_align_margin_padding_ref.html b/tests/wpt/mozilla/tests/css/table_vertical_align_margin_padding_ref.html new file mode 100644 index 00000000000..8ae237dbe2b --- /dev/null +++ b/tests/wpt/mozilla/tests/css/table_vertical_align_margin_padding_ref.html @@ -0,0 +1,9 @@ +<!doctype html> +<meta charset="utf-8"> +<title>Negative margins in table reference</title> +<Style>table,tr,td{margin:0;padding:0;vertical-align:middle}</style> +<h1>Test passes if there is a single green box</h1> +<table><tr><td style="background:red"> +<div style="background:green;width:40px;height:40px"></div> +</td></tr></table> + |