aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/layout_2020/flow/float.rs2
-rw-r--r--tests/wpt/meta-legacy-layout/css/CSS2/floats/floats-wrap-bfc-with-margin-010.html.ini2
-rw-r--r--tests/wpt/meta/MANIFEST.json17
-rw-r--r--tests/wpt/tests/css/CSS2/floats/floats-wrap-bfc-with-margin-010-ref.html43
-rw-r--r--tests/wpt/tests/css/CSS2/floats/floats-wrap-bfc-with-margin-010.html46
5 files changed, 109 insertions, 1 deletions
diff --git a/components/layout_2020/flow/float.rs b/components/layout_2020/flow/float.rs
index 461b8a322ed..f0230f2ac40 100644
--- a/components/layout_2020/flow/float.rs
+++ b/components/layout_2020/flow/float.rs
@@ -307,7 +307,7 @@ impl FloatContext {
pub fn new(max_inline_size: Length) -> Self {
let mut bands = FloatBandTree::new();
bands = bands.insert(FloatBand {
- top: Length::zero(),
+ top: Length::new(-f32::INFINITY),
left: None,
right: None,
});
diff --git a/tests/wpt/meta-legacy-layout/css/CSS2/floats/floats-wrap-bfc-with-margin-010.html.ini b/tests/wpt/meta-legacy-layout/css/CSS2/floats/floats-wrap-bfc-with-margin-010.html.ini
new file mode 100644
index 00000000000..56def230e36
--- /dev/null
+++ b/tests/wpt/meta-legacy-layout/css/CSS2/floats/floats-wrap-bfc-with-margin-010.html.ini
@@ -0,0 +1,2 @@
+[floats-wrap-bfc-with-margin-010.html]
+ expected: FAIL
diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json
index 7e09fdfeb08..ef8e5f6c76c 100644
--- a/tests/wpt/meta/MANIFEST.json
+++ b/tests/wpt/meta/MANIFEST.json
@@ -61965,6 +61965,19 @@
{}
]
],
+ "floats-wrap-bfc-with-margin-010.html": [
+ "1cc9690602fd6b6beb383aef8a80e7ee8be926e3",
+ [
+ null,
+ [
+ [
+ "/css/CSS2/floats/floats-wrap-bfc-with-margin-010-ref.html",
+ "=="
+ ]
+ ],
+ {}
+ ]
+ ],
"floats-wrap-top-below-bfc-001l.xht": [
"17bec33eb143ce14f13c439e83f433c3fef74fdd",
[
@@ -365676,6 +365689,10 @@
"ac45eb30bf43748284a1c7a19061f8df56fa5dca",
[]
],
+ "floats-wrap-bfc-with-margin-010-ref.html": [
+ "b29df933ebae5558f63d799907cbef138910dfd5",
+ []
+ ],
"floats-wrap-top-below-001l-notref.xht": [
"0953df73d203c1bb3e8d1dba0a3b7a2cde465e18",
[]
diff --git a/tests/wpt/tests/css/CSS2/floats/floats-wrap-bfc-with-margin-010-ref.html b/tests/wpt/tests/css/CSS2/floats/floats-wrap-bfc-with-margin-010-ref.html
new file mode 100644
index 00000000000..b29df933eba
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/floats/floats-wrap-bfc-with-margin-010-ref.html
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<title>CSS Test Reference</title>
+<link rel="author" title="Oriol Brufau" href="obrufau@igalia.com">
+<style>
+body {
+ position: relative;
+}
+.wrapper {
+ position: absolute;
+ width: 100px;
+ border: 5px solid;
+ top: 75px;
+}
+.float {
+ position: absolute;
+ width: 50px;
+ height: 50px;
+ left: 0;
+ top: 0;
+ background: cyan;
+}
+.bfc {
+ position: absolute;
+ height: 50px;
+ background: green;
+}
+</style>
+<div class="wrapper" style="left: 10px; height: 50px">
+ <div class="float"></div>
+ <div class="bfc" style="width: 50px; left: 0; top: -75px"></div>
+</div>
+<div class="wrapper" style="left: 140px; height: 50px">
+ <div class="float"></div>
+ <div class="bfc" style="width: 75px; left: 0; top: -75px"></div>
+</div>
+<div class="wrapper" style="left: 270px; height: 50px">
+ <div class="float"></div>
+ <div class="bfc" style="width: 50px; left: 50px; top: -25px"></div>
+</div>
+<div class="wrapper" style="left: 400px; height: 100px">
+ <div class="float"></div>
+ <div class="bfc" style="width: 75px; left: 0px; top: 50px"></div>
+</div>
diff --git a/tests/wpt/tests/css/CSS2/floats/floats-wrap-bfc-with-margin-010.html b/tests/wpt/tests/css/CSS2/floats/floats-wrap-bfc-with-margin-010.html
new file mode 100644
index 00000000000..1cc9690602f
--- /dev/null
+++ b/tests/wpt/tests/css/CSS2/floats/floats-wrap-bfc-with-margin-010.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<title>CSS Test: Float followed by a BFC root with a negative margin-top</title>
+<link rel="author" title="Oriol Brufau" href="obrufau@igalia.com">
+<link rel="help" href="https://drafts.csswg.org/css2/#floats">
+<link rel="match" href="floats-wrap-bfc-with-margin-010-ref.html">
+<meta name="assert" content="
+ If the negative margin places the BFC root entirely above the float,
+ then they don't overlap so we are done.
+ If the negative margin is not enough to prevent them from overlapping,
+ then the BFC root needs to be placed adjacent to the float if there
+ is enough available space, or be cleared below the float.">
+<style>
+.wrapper {
+ float: left;
+ width: 100px;
+ border: 5px solid;
+ margin: 75px 10px;
+}
+.float {
+ float: left;
+ width: 50px;
+ height: 50px;
+ background: cyan;
+}
+.bfc {
+ overflow: hidden;
+ height: 50px;
+ background: green;
+}
+</style>
+<div class="wrapper">
+ <div class="float"></div>
+ <div class="bfc" style="margin-top: -75px; width: 50px"></div>
+</div>
+<div class="wrapper">
+ <div class="float"></div>
+ <div class="bfc" style="margin-top: -75px; width: 75px"></div>
+</div>
+<div class="wrapper">
+ <div class="float"></div>
+ <div class="bfc" style="margin-top: -25px; width: 50px"></div>
+</div>
+<div class="wrapper">
+ <div class="float"></div>
+ <div class="bfc" style="margin-top: -25px; width: 75px"></div>
+</div>