aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Howell <michael@notriddle.com>2016-07-06 10:02:33 -0700
committerMichael Howell <michael@notriddle.com>2016-07-06 10:02:33 -0700
commitc11f85947e6406d053f02de6129ab7ecfbe7145c (patch)
tree6c986fdc5d5833b08bd7c9d9c3724d2605b2aa82
parent4aaae7a4e69fd0dfb10b562d6a78ddfe3972d8f1 (diff)
downloadservo-c11f85947e6406d053f02de6129ab7ecfbe7145c.tar.gz
servo-c11f85947e6406d053f02de6129ab7ecfbe7145c.zip
Correct negative margins in centered table cells
Fixes @AelitaBot queue viewer page
-rw-r--r--components/layout/table_cell.rs4
-rw-r--r--tests/wpt/mozilla/meta/MANIFEST.json24
-rw-r--r--tests/wpt/mozilla/tests/css/table_vertical_align_margin_padding.html9
-rw-r--r--tests/wpt/mozilla/tests/css/table_vertical_align_margin_padding_ref.html9
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>
+