summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/css-flexbox/abspos
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-19 00:47:55 +0000
commit26a029d407be480d791972afb5975cf62c9360a6 (patch)
treef435a8308119effd964b339f76abb83a57c29483 /testing/web-platform/tests/css/css-flexbox/abspos
parentInitial commit. (diff)
downloadfirefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz
firefox-26a029d407be480d791972afb5975cf62c9360a6.zip
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/css/css-flexbox/abspos')
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-htb-ltr.html34
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-htb-rtl.html34
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-vlr-ltr.html34
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-vlr-rtl.html34
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-vrl-ltr.html34
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-vrl-rtl.html34
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/abspos-descendent-001.html32
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/dynamic-align-self-001.html46
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-content-001.html106
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-001.html98
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-002.html98
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-003.html98
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-004.html98
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-005.html98
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-006.html98
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-007.html98
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-008.html98
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-001.html98
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-002.html99
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-003.html98
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-004.html99
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-safe-001-ref.html47
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-safe-001.html49
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-001.html102
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-002.html103
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-003.html98
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-004.html100
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-fallback-justify-content-001-ref.html79
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-fallback-justify-content-001.html80
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-001.html97
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-002.html97
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-003.html97
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-004.html97
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-005.html97
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-006.html97
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-007.html97
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-008.html97
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-rtl-001.html98
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-rtl-002.html98
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-001.html98
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-002.html98
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-self-001-ref.html93
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-self-001.html97
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-001-ref.html79
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-001.html83
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-002-ref.html79
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-002.html84
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-003-ref.html68
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-003.html74
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-001-ref.html26
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-001a.html54
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-001b.html55
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-002-ref.html44
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-002.html62
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flexbox_absolute-atomic-ref.html21
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flexbox_absolute-atomic.html28
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/flexbox_inline-abspos.html15
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-001.html709
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-002.html160
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-003.html96
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-004.html44
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-005-ref.html14
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-005.html66
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-006.html22
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-007.html20
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-008.html22
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-009.html21
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-010.html21
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-011.html22
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-012.html116
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-013.html154
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-014.html82
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-015.html19
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-containing-block-001-ref.html25
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-containing-block-001.html28
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-containing-block-002-ref.html25
-rw-r--r--testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-containing-block-002.html36
77 files changed, 6056 insertions, 0 deletions
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-htb-ltr.html b/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-htb-ltr.html
new file mode 100644
index 0000000000..53229296ff
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-htb-ltr.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<title>Absolutely positioned child with auto position in vertical-rl ltr flexbox</title>
+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements">
+<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#abspos-items" title="4.1. Absolutely-Positioned Flex Children">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square.xht">
+<style>
+ .flex {
+ display: flex;
+ position: relative;
+ writing-mode: horizontal-tb;
+ direction: ltr;
+ width: 100px;
+ height: 100px;
+ border: solid white;
+ border-left-width: 20px;
+ left: -20px;
+ border-top-width: 5px;
+ top: -5px;
+ border-right-width: 10px;
+ border-bottom-width: 15px;
+ background: red;
+ }
+ .flex > div {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background: green;
+ }
+</style>
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="flex">
+ <div></div>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-htb-rtl.html b/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-htb-rtl.html
new file mode 100644
index 0000000000..1788c0d3b8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-htb-rtl.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<title>Absolutely positioned child with auto position in vertical-rl ltr flexbox</title>
+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements">
+<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#abspos-items" title="4.1. Absolutely-Positioned Flex Children">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square.xht">
+<style>
+ .flex {
+ display: flex;
+ position: relative;
+ writing-mode: horizontal-tb;
+ direction: rtl;
+ width: 100px;
+ height: 100px;
+ border: solid white;
+ border-left-width: 20px;
+ left: -20px;
+ border-top-width: 5px;
+ top: -5px;
+ border-right-width: 10px;
+ border-bottom-width: 15px;
+ background: red;
+ }
+ .flex > div {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background: green;
+ }
+</style>
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="flex">
+ <div></div>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-vlr-ltr.html b/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-vlr-ltr.html
new file mode 100644
index 0000000000..c3435235aa
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-vlr-ltr.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<title>Absolutely positioned child with auto position in vertical-rl ltr flexbox</title>
+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements">
+<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#abspos-items" title="4.1. Absolutely-Positioned Flex Children">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square.xht">
+<style>
+ .flex {
+ display: flex;
+ position: relative;
+ writing-mode: vertical-lr;
+ direction: ltr;
+ width: 100px;
+ height: 100px;
+ border: solid white;
+ border-left-width: 20px;
+ left: -20px;
+ border-top-width: 5px;
+ top: -5px;
+ border-right-width: 10px;
+ border-bottom-width: 15px;
+ background: red;
+ }
+ .flex > div {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background: green;
+ }
+</style>
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="flex">
+ <div></div>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-vlr-rtl.html b/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-vlr-rtl.html
new file mode 100644
index 0000000000..0c7b701a47
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-vlr-rtl.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<title>Absolutely positioned child with auto position in vertical-rl ltr flexbox</title>
+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements">
+<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#abspos-items" title="4.1. Absolutely-Positioned Flex Children">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square.xht">
+<style>
+ .flex {
+ display: flex;
+ position: relative;
+ writing-mode: vertical-lr;
+ direction: rtl;
+ width: 100px;
+ height: 100px;
+ border: solid white;
+ border-left-width: 20px;
+ left: -20px;
+ border-top-width: 5px;
+ top: -5px;
+ border-right-width: 10px;
+ border-bottom-width: 15px;
+ background: red;
+ }
+ .flex > div {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background: green;
+ }
+</style>
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="flex">
+ <div></div>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-vrl-ltr.html b/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-vrl-ltr.html
new file mode 100644
index 0000000000..618bda4387
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-vrl-ltr.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<title>Absolutely positioned child with auto position in vertical-rl ltr flexbox</title>
+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements">
+<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#abspos-items" title="4.1. Absolutely-Positioned Flex Children">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square.xht">
+<style>
+ .flex {
+ display: flex;
+ position: relative;
+ writing-mode: vertical-rl;
+ direction: ltr;
+ width: 100px;
+ height: 100px;
+ border: solid white;
+ border-left-width: 20px;
+ left: -20px;
+ border-top-width: 5px;
+ top: -5px;
+ border-right-width: 10px;
+ border-bottom-width: 15px;
+ background: red;
+ }
+ .flex > div {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background: green;
+ }
+</style>
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="flex">
+ <div></div>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-vrl-rtl.html b/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-vrl-rtl.html
new file mode 100644
index 0000000000..0c7b701a47
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/abspos-autopos-vrl-rtl.html
@@ -0,0 +1,34 @@
+<!DOCTYPE html>
+<title>Absolutely positioned child with auto position in vertical-rl ltr flexbox</title>
+<link rel="author" title="Morten Stenshorne" href="mstensho@chromium.org">
+<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#abs-non-replaced-width" title="10.3.7 Absolutely positioned, non-replaced elements">
+<link rel="help" href="https://www.w3.org/TR/css-flexbox-1/#abspos-items" title="4.1. Absolutely-Positioned Flex Children">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square.xht">
+<style>
+ .flex {
+ display: flex;
+ position: relative;
+ writing-mode: vertical-lr;
+ direction: rtl;
+ width: 100px;
+ height: 100px;
+ border: solid white;
+ border-left-width: 20px;
+ left: -20px;
+ border-top-width: 5px;
+ top: -5px;
+ border-right-width: 10px;
+ border-bottom-width: 15px;
+ background: red;
+ }
+ .flex > div {
+ position: absolute;
+ width: 100%;
+ height: 100%;
+ background: green;
+ }
+</style>
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+<div class="flex">
+ <div></div>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/abspos-descendent-001.html b/testing/web-platform/tests/css/css-flexbox/abspos/abspos-descendent-001.html
new file mode 100644
index 0000000000..ecba51e8ef
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/abspos-descendent-001.html
@@ -0,0 +1,32 @@
+<!DOCTYPE html>
+<html>
+<head>
+<title>CSS Flexbox: removing abspos descendents</title>
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#flex-containers">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<link rel="issue" href="https://bugs.chromium.org/p/chromium/issues/detail?id=167566">
+<meta name="assert" content="This test ensures that flex item's padding doesn't disappear when an abspos descendent is removed.">
+<link href="../support/flexbox.css" rel="stylesheet">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<script>
+window.onload = function() {
+ document.body.offsetHeight;
+
+ document.getElementById('to-hide').style.display = "none";
+ checkLayout(".flexbox");
+};
+</script>
+</head>
+<body>
+<div id=log></div>
+<div class="flexbox" style="height: 100px;" data-expected-height="100">
+ <div style="width: 100%; overflow: auto; padding-bottom: 100px; background-color: red;" data-expected-height="100">
+ <div style="position: relative; height: 100px; background-color: green;" data-expected-height="100">
+ <div id="to-hide" style="position: absolute;" data-expected-height="0"></div>
+ </div>
+ </div>
+</div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/dynamic-align-self-001.html b/testing/web-platform/tests/css/css-flexbox/abspos/dynamic-align-self-001.html
new file mode 100644
index 0000000000..208c006d2d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/dynamic-align-self-001.html
@@ -0,0 +1,46 @@
+<!DOCTYPE html>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://crbug.com/1306037">
+<link rel="match" href="../../reference/ref-filled-green-100px-square.xht">
+<meta name="assert"
+ content="Abspos child of a flexbox moves after script changes its alignment.">
+<style>
+ #reference-overlapped-red {
+ position: absolute;
+ background-color: red;
+ width: 100px;
+ height: 100px;
+ z-index: -1;
+ }
+
+ #parent {
+ position: relative;
+ display: flex;
+ width: 200px;
+ height: 200px;
+ }
+
+ #child {
+ display: flex;
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background-color: green;
+ align-self: end;
+ }
+
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.
+</p>
+
+<div id=reference-overlapped-red></div>
+
+<div id="parent">
+ <div id="child"></div>
+</div>
+
+<script>
+ document.body.offsetTop;
+ child.style.alignSelf = 'start';
+</script>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-content-001.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-content-001.html
new file mode 100644
index 0000000000..6e99510cd1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-content-001.html
@@ -0,0 +1,106 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a row flex container, with various "align-content" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <link rel="help" href="https://github.com/w3c/csswg-drafts/issues/7596#issuecomment-1225952646">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: row wrap;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ /* This "align-self" is actually the only alignment that matters here.
+ The flex containers' various "align-content" values have no impact on
+ the positioning of absolutely-positioned flex children. */
+ align-self: center;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="align-content: normal"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container" style="align-content: baseline"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container" style="align-content: last baseline"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="align-content: space-between"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container" style="align-content: space-around"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container" style="align-content: space-evenly"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container" style="align-content: stretch"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="align-content: center"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container" style="align-content: start"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container" style="align-content: end"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="align-content: flex-start"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container" style="align-content: flex-end"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="align-content: normal"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container" style="align-content: baseline"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container" style="align-content: last baseline"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="align-content: space-between"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container" style="align-content: space-around"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container" style="align-content: space-evenly"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container" style="align-content: stretch"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="align-content: center"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container" style="align-content: start"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container" style="align-content: end"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="align-content: flex-start"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container" style="align-content: flex-end"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-001.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-001.html
new file mode 100644
index 0000000000..7fb82d4f92
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-001.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a row flex container, with various "align-self" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: row;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ align-items: center; /* To exercise 'align-self: auto' on children */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="2" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="2" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="2" data-offset-y="5"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="2" data-offset-y="-3"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-002.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-002.html
new file mode 100644
index 0000000000..c570a9f79d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-002.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a row wrap-reverse flex container, with various "align-self" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: row wrap-reverse;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ align-items: center; /* To exercise 'align-self: auto' on children */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="2" data-offset-y="5"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="2" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="2" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-003.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-003.html
new file mode 100644
index 0000000000..4208ff25e6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-003.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a row-reverse flex container, with various "align-self" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: row-reverse;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ align-items: center; /* To exercise 'align-self: auto' on children */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-004.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-004.html
new file mode 100644
index 0000000000..3cf1318d70
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-004.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a row-reverse wrap-reverse flex container, with various "align-self" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: row-reverse wrap-reverse;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ align-items: center; /* To exercise 'align-self: auto' on children */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-005.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-005.html
new file mode 100644
index 0000000000..ae9d263ea0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-005.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a column flex container, with various "align-self" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: column;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ align-items: center; /* To exercise 'align-self: auto' on children */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-006.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-006.html
new file mode 100644
index 0000000000..3c03636b35
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-006.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a column wrap-reverse flex container, with various "align-self" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: column wrap-reverse;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ align-items: center; /* To exercise 'align-self: auto' on children */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="10" data-offset-y=""></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-007.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-007.html
new file mode 100644
index 0000000000..7e09b41d79
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-007.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a column-reverse flex container, with various "align-self" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: column-reverse;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ align-items: center; /* To exercise 'align-self: auto' on children */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="6" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="2" data-offset-y="5"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="6" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="0" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="0" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-008.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-008.html
new file mode 100644
index 0000000000..8ea47aadda
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-008.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a column-reverse wrap-reverse flex container, with various "align-self" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: column-reverse wrap-reverse;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ align-items: center; /* To exercise 'align-self: auto' on children */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="6" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="6" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="2" data-offset-y="5"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="0" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="0" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="2" data-offset-y="-3"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-001.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-001.html
new file mode 100644
index 0000000000..703b9bb2f9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-001.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a RTL row flex container, with various "align-self" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: row;
+ direction: rtl;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-002.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-002.html
new file mode 100644
index 0000000000..c09c6fa167
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-002.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos LTR children in a RTL row flex container, with various "align-self" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: row;
+ direction: rtl;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ direction: ltr;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-003.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-003.html
new file mode 100644
index 0000000000..39038b95f8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-003.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a RTL column flex container, with various "align-self" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: column;
+ direction: rtl;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-004.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-004.html
new file mode 100644
index 0000000000..fc61e6cf9b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-rtl-004.html
@@ -0,0 +1,99 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos LTR children in a RTL column flex container, with various "align-self" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: column;
+ direction: rtl;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ direction: ltr;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-safe-001-ref.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-safe-001-ref.html
new file mode 100644
index 0000000000..fb1fb93ea9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-safe-001-ref.html
@@ -0,0 +1,47 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0
+-->
+<html>
+<head>
+ <title>Reference: Testing safe overflow-position for align-self in absolutely positioned boxes in flex containers</title>
+ <link rel="author" title="Mihir Iyer" href="mailto:miyer@mozilla.com">
+ <meta charset="utf-8">
+ <style>
+ .flex {
+ display: flex;
+ height: 50px;
+ width: 50px;
+ border: 3px solid black;
+ vertical-align: top;
+ margin: 20px;
+ position: relative;
+ }
+ .child {
+ border: 2px dotted purple;
+ background: teal;
+ width: 65px;
+ height: 65px;
+ align-self: start;
+ position: absolute;
+ background: yellow;
+ }
+ .rowDir {
+ flex-direction: row;
+ }
+ .colDir {
+ flex-direction: column;
+ }
+ .vertRL {
+ writing-mode: vertical-rl;
+ }
+ </style>
+</head>
+<body>
+ <div class="flex rowDir"><div class="child"></div></div>
+ <div class="flex colDir"><div class="child"></div></div>
+ <div class="flex rowDir vertRL"><div class="child"></div></div>
+ <div class="flex colDir vertRL"><div class="child"></div></div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-safe-001.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-safe-001.html
new file mode 100644
index 0000000000..b7302cb962
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-safe-001.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0
+-->
+<html>
+<head>
+ <title>CSS Test: Testing safe overflow-position for align-self in absolutely positioned boxes in flex containers</title>
+ <link rel="author" title="Mihir Iyer" href="mailto:miyer@mozilla.com">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <link rel="match" href="flex-abspos-staticpos-align-self-safe-001-ref.html">
+ <meta charset="utf-8">
+ <style>
+ .flex {
+ display: flex;
+ height: 50px;
+ width: 50px;
+ border: 3px solid black;
+ vertical-align: top;
+ margin: 20px;
+ position: relative;
+ }
+ .child {
+ border: 2px dotted purple;
+ background: teal;
+ width: 65px;
+ height: 65px;
+ align-self: safe center;
+ position: absolute;
+ background: yellow;
+ }
+ .rowDir {
+ flex-direction: row;
+ }
+ .colDir {
+ flex-direction: column;
+ }
+ .vertRL {
+ writing-mode: vertical-rl;
+ }
+ </style>
+</head>
+<body>
+ <div class="flex rowDir"><div class="child"></div></div>
+ <div class="flex colDir"><div class="child"></div></div>
+ <div class="flex rowDir vertRL"><div class="child"></div></div>
+ <div class="flex colDir vertRL"><div class="child"></div></div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-001.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-001.html
new file mode 100644
index 0000000000..42aeb01907
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-001.html
@@ -0,0 +1,102 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a vertical-rl row flex container, with various "align-self" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: row;
+ writing-mode: vertical-rl;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: left" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: right" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: left" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: right" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-002.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-002.html
new file mode 100644
index 0000000000..bb5b1f57a7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-002.html
@@ -0,0 +1,103 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos horizontal-tb children in a vertical-rl row flex container, with various "align-self" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: row;
+ writing-mode: vertical-rl;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ writing-mode: horizontal-tb;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: left" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: right" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: left" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: right" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-003.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-003.html
new file mode 100644
index 0000000000..6d877c6280
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-003.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a vertical-rl column flex container, with various "align-self" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: column;
+ writing-mode: vertical-rl;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-004.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-004.html
new file mode 100644
index 0000000000..3248871fe5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-align-self-vertWM-004.html
@@ -0,0 +1,100 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos vertical-lr + RTL children in a vertical-rl column flex container, with various "align-self" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: column;
+ writing-mode: vertical-rl;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ writing-mode: vertical-lr;
+ direction: rtl;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various align-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="align-self: auto" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: normal" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: stretch" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="align-self: baseline" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: last baseline" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="align-self: center" data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container"><div style="align-self: start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: self-start" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container"><div style="align-self: self-end" data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="align-self: flex-start" data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container"><div style="align-self: flex-end" data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-fallback-justify-content-001-ref.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-fallback-justify-content-001-ref.html
new file mode 100644
index 0000000000..0abf592d6d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-fallback-justify-content-001-ref.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Reference</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: block;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ .big .alignStart { /* nothing special */ }
+ .big .alignCenter { margin-left: 4px }
+ .big .alignEnd { margin-left: 8px }
+ .small .alignStart { /* nothing special */ }
+ .small .alignCenter { margin-left: -2px }
+ .small .alignEnd { margin-left: -4px }
+ </style>
+</head>
+<body>
+ <div class="big">
+ <!-- <content-distribution> with implied fallback -->
+ <div class="container"><div class="alignStart"><!--space-between--></div></div>
+ <div class="container"><div class="alignCenter"><!--space-around--></div></div>
+ <div class="container"><div class="alignCenter"><!--space-evenly--></div></div>
+ <div class="container"><div class="alignStart"><!--stretch--></div></div>
+ <br>
+ <!-- <content-distribution> with explicit "flex-end" fallback -->
+ <div style="display: none">
+ <div class="container"><div class="alignEnd"><!--space-between--></div></div>
+ <div class="container"><div class="alignEnd"><!--space-around--></div></div>
+ <div class="container"><div class="alignEnd"><!--space-evenly--></div></div>
+ <div class="container"><div class="alignStart"><!--stretch--></div></div>
+ </div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- <content-distribution> with implied fallback -->
+ <div class="container"><div class="alignStart"><!--space-between--></div></div>
+ <div class="container"><div class="alignCenter"><!--space-around--></div></div>
+ <div class="container"><div class="alignCenter"><!--space-evenly--></div></div>
+ <div class="container"><div class="alignStart"><!--stretch--></div></div>
+ <br>
+ <!-- <content-distribution> with explicit "flex-end" fallback -->
+ <div style="display: none">
+ <div class="container"><div class="alignEnd"><!--space-between--></div></div>
+ <div class="container"><div class="alignEnd"><!--space-around--></div></div>
+ <div class="container"><div class="alignEnd"><!--space-evenly--></div></div>
+ <div class="container"><div class="alignStart"><!--stretch--></div></div>
+ </div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-fallback-justify-content-001.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-fallback-justify-content-001.html
new file mode 100644
index 0000000000..004ce831c2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-fallback-justify-content-001.html
@@ -0,0 +1,80 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a row flex container, with various "justify-content" values with explicit fallback values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <link rel="match" href="flex-abspos-staticpos-fallback-justify-content-001-ref.html">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ flex-flow: row;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+</head>
+<body>
+ <div class="big">
+ <!-- <content-distribution> with implied fallback -->
+ <div class="container" style="justify-content: space-between"><div></div></div>
+ <div class="container" style="justify-content: space-around"><div></div></div>
+ <div class="container" style="justify-content: space-evenly"><div></div></div>
+ <div class="container" style="justify-content: stretch"><div></div></div>
+ <br>
+ <!-- <content-distribution> with explicit "flex-end" fallback -->
+ <!-- TODO: https://github.com/w3c/csswg-drafts/issues/1002
+ <div class="container" style="justify-content: space-between flex-end"><div></div></div>
+ <div class="container" style="justify-content: space-around flex-end"><div></div></div>
+ <div class="container" style="justify-content: space-evenly flex-end"><div></div></div>
+ <div class="container" style="justify-content: stretch flex-end"><div></div></div>
+ -->
+ <!-- Note: specifically for flex containers, in the justify-content axis,
+ "stretch behaves as flex-start (ignoring the specified fallback
+ alignment, if any." https://drafts.csswg.org/css-align-3/#distribution-flex -->
+ <br>
+ </div>
+ <div class="small">
+ <!-- <content-distribution> with implied fallback -->
+ <div class="container" style="justify-content: space-between"><div></div></div>
+ <div class="container" style="justify-content: space-around"><div></div></div>
+ <div class="container" style="justify-content: space-evenly"><div></div></div>
+ <div class="container" style="justify-content: stretch"><div></div></div>
+ <br>
+ <!-- <content-distribution> with explicit "flex-end" fallback -->
+ <!-- TODO: https://github.com/w3c/csswg-drafts/issues/1002
+ <div class="container" style="justify-content: space-between flex-end"><div></div></div>
+ <div class="container" style="justify-content: space-around flex-end"><div></div></div>
+ <div class="container" style="justify-content: space-evenly flex-end"><div></div></div>
+ <div class="container" style="justify-content: stretch flex-end"><div></div></div>
+ -->
+ <!-- As noted above, the explicit fallback for "stretch" is ignored here. -->
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-001.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-001.html
new file mode 100644
index 0000000000..afcecaafd2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-001.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a row flex container, with various "justify-content" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: row;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-002.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-002.html
new file mode 100644
index 0000000000..db6f116fea
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-002.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a row wrap-reverse flex container, with various "justify-content" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: row wrap-reverse;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="2" data-offset-y="5"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="6" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="6" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="2" data-offset-y="5"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="6" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="0" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="0" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="0" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-003.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-003.html
new file mode 100644
index 0000000000..fc5a2cdab0
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-003.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a row-reverse flex container, with various "justify-content" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: row-reverse wrap;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-004.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-004.html
new file mode 100644
index 0000000000..38066fa32b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-004.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a row-reverse wrap-reverse flex container, with various "justify-content" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: row-reverse wrap-reverse;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="6" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="6" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="6" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="0" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="0" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="0" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-005.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-005.html
new file mode 100644
index 0000000000..058d9e8fd8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-005.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a column flex container, with various "justify-content" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: column;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="2" data-offset-y="5"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-006.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-006.html
new file mode 100644
index 0000000000..9b22ddd636
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-006.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a column wrap-reverse flex container, with various "justify-content" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: column wrap-reverse;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-007.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-007.html
new file mode 100644
index 0000000000..6c51255b8a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-007.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a column-reverse flex container, with various "justify-content" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: column-reverse wrap;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="2" data-offset-y="5"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="2" data-offset-y="5"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="2" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="2" data-offset-y="5"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="2" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-008.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-008.html
new file mode 100644
index 0000000000..b7ec27301f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-008.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a column-reverse wrap-reverse flex container, with various "justify-content" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: column-reverse wrap-reverse;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-rtl-001.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-rtl-001.html
new file mode 100644
index 0000000000..0d7593b26b
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-rtl-001.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a RTL row flex container, with various "justify-content" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: row;
+ direction: rtl;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-rtl-002.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-rtl-002.html
new file mode 100644
index 0000000000..7aa31aaabc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-rtl-002.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a RTL column flex container, with various "justify-content" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: column;
+ direction: rtl;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-001.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-001.html
new file mode 100644
index 0000000000..f9038aad05
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-001.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a vertical-rl row flex container, with various "justify-content" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: row;
+ writing-mode: vertical-rl;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="10" data-offset-y="3"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="10" data-offset-y="5"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="-2" data-offset-y="-1"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="-2" data-offset-y="-3"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-002.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-002.html
new file mode 100644
index 0000000000..690e6116d8
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-content-vertWM-002.html
@@ -0,0 +1,98 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a vertical-rl column flex container, with various "justify-content" values</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ position: relative;
+ flex-flow: column;
+ writing-mode: vertical-rl;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+ <script src="/resources/testharness.js"></script>
+ <script src="/resources/testharnessreport.js"></script>
+ <script src="/resources/check-layout-th.js"></script>
+</head>
+<body onload="checkLayout('.container > div')">
+ <div class="big">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="6" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="10" data-offset-y="1"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various justify-content values, from
+ https://www.w3.org/TR/css-align-3/#propdef-align-content -->
+ <!-- normal -->
+ <div class="container" style="justify-content: normal"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-distribution> -->
+ <div class="container" style="justify-content: space-between"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-around"><div data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: space-evenly"><div data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: stretch"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 1 -->
+ <div class="container" style="justify-content: center"><div data-offset-x="0" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: start"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: end"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <br>
+ <!-- <content-position>, part 2 -->
+ <div class="container" style="justify-content: flex-start"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: flex-end"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: left"><div data-offset-x="2" data-offset-y="1"></div></div>
+ <div class="container" style="justify-content: right"><div data-offset-x="-2" data-offset-y="1"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-self-001-ref.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-self-001-ref.html
new file mode 100644
index 0000000000..d4f75a036a
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-self-001-ref.html
@@ -0,0 +1,93 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Reference</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: block;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+</head>
+<body>
+ <div class="big">
+ <!-- The various justify-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-justify-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <br>
+ <!-- <self-position>, part 1: -->
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <br>
+ <!-- <self-position>, part 2: -->
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various justify-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-justify-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <br>
+ <!-- <self-position>, part 1: -->
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <br>
+ <!-- <self-position>, part 2: -->
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-self-001.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-self-001.html
new file mode 100644
index 0000000000..1f826ca38f
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-justify-self-001.html
@@ -0,0 +1,97 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a row flex container, with various "justify-self" values (which shouldn't have any effect) </title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <link rel="match" href="flex-abspos-staticpos-justify-self-001-ref.html">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ flex-flow: row;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 5px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 10px;
+ width: 16px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+</head>
+<body>
+ <div class="big">
+ <!-- The various justify-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-justify-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="justify-self: auto"></div></div>
+ <div class="container"><div style="justify-self: normal"></div></div>
+ <div class="container"><div style="justify-self: stretch"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="justify-self: baseline"></div></div>
+ <div class="container"><div style="justify-self: last baseline"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="justify-self: center"></div></div>
+ <div class="container"><div style="justify-self: start"></div></div>
+ <div class="container"><div style="justify-self: end"></div></div>
+ <div class="container"><div style="justify-self: self-start"></div></div>
+ <div class="container"><div style="justify-self: self-end"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="justify-self: flex-start"></div></div>
+ <div class="container"><div style="justify-self: flex-end"></div></div>
+ <div class="container"><div style="justify-self: left"></div></div>
+ <div class="container"><div style="justify-self: right"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- The various justify-self values, from
+ https://www.w3.org/TR/css-align-3/#propdef-justify-self -->
+ <!-- auto | normal | stretch -->
+ <div class="container"><div style="justify-self: auto"></div></div>
+ <div class="container"><div style="justify-self: normal"></div></div>
+ <div class="container"><div style="justify-self: stretch"></div></div>
+ <br>
+ <!-- <baseline-position> -->
+ <div class="container"><div style="justify-self: baseline"></div></div>
+ <div class="container"><div style="justify-self: last baseline"></div></div>
+ <br>
+ <!-- <self-position>, part 1 -->
+ <div class="container"><div style="justify-self: center"></div></div>
+ <div class="container"><div style="justify-self: start"></div></div>
+ <div class="container"><div style="justify-self: end"></div></div>
+ <div class="container"><div style="justify-self: self-start"></div></div>
+ <div class="container"><div style="justify-self: self-end"></div></div>
+ <br>
+ <!-- <self-position>, part 2 -->
+ <div class="container"><div style="justify-self: flex-start"></div></div>
+ <div class="container"><div style="justify-self: flex-end"></div></div>
+ <div class="container"><div style="justify-self: left"></div></div>
+ <div class="container"><div style="justify-self: right"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-001-ref.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-001-ref.html
new file mode 100644
index 0000000000..428aeae649
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-001-ref.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Reference</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: block;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 10px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 14px;
+ width: 20px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+</head>
+<body>
+ <div class="big">
+ <!-- Margin just on one side: -->
+ <div class="container"><div style="margin-top: 3px"></div></div>
+ <div class="container"><div style="margin-right: 3px"></div></div>
+ <div class="container"><div style="margin-bottom: 3px"></div></div>
+ <div class="container"><div style="margin-left: 3px"></div></div>
+ <!-- Margin on all sides: -->
+ <div class="container"><div style="margin: 1px 2px 3px 4px"></div></div>
+ <br>
+
+ <!-- "auto" margin on just one side (should be treated as 0): -->
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <!-- "auto" margin on all sides (should be treated as 0): -->
+ <div class="container"><div></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- Margin just on one side: -->
+ <div class="container"><div style="margin-top: 3px"></div></div>
+ <div class="container"><div style="margin-right: 3px"></div></div>
+ <div class="container"><div style="margin-bottom: 3px"></div></div>
+ <div class="container"><div style="margin-left: 3px"></div></div>
+ <!-- Margin on all sides: -->
+ <div class="container"><div style="margin: 1px 2px 3px 4px"></div></div>
+ <br>
+
+ <!-- "auto" margin on just one side (should be treated as 0): -->
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <div class="container"><div></div></div>
+ <!-- "auto" margin on all sides (should be treated as 0): -->
+ <div class="container"><div></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-001.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-001.html
new file mode 100644
index 0000000000..535fa2ecbf
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-001.html
@@ -0,0 +1,83 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a row flex container, with various margins applied</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <link rel="match" href="flex-abspos-staticpos-margin-001-ref.html">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ flex-flow: row;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 10px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 14px;
+ width: 20px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+</head>
+<body>
+ <div class="big">
+ <!-- Margin just on one side: -->
+ <div class="container"><div style="margin-top: 3px"></div></div>
+ <div class="container"><div style="margin-right: 3px"></div></div>
+ <div class="container"><div style="margin-bottom: 3px"></div></div>
+ <div class="container"><div style="margin-left: 3px"></div></div>
+ <!-- Margin on all sides: -->
+ <div class="container"><div style="margin: 1px 2px 3px 4px"></div></div>
+ <br>
+
+ <!-- "auto" margin on just one side (should be treated as 0): -->
+ <div class="container"><div style="margin-top: auto"></div></div>
+ <div class="container"><div style="margin-right: auto"></div></div>
+ <div class="container"><div style="margin-bottom: auto"></div></div>
+ <div class="container"><div style="margin-left: auto"></div></div>
+ <!-- "auto" margin on all sides (should be treated as 0): -->
+ <div class="container"><div style="margin: auto"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- Margin just on one side: -->
+ <div class="container"><div style="margin-top: 3px"></div></div>
+ <div class="container"><div style="margin-right: 3px"></div></div>
+ <div class="container"><div style="margin-bottom: 3px"></div></div>
+ <div class="container"><div style="margin-left: 3px"></div></div>
+ <!-- Margin on all sides: -->
+ <div class="container"><div style="margin: 1px 2px 3px 4px"></div></div>
+ <br>
+
+ <!-- "auto" margin on just one side (should be treated as 0): -->
+ <div class="container"><div style="margin-top: auto"></div></div>
+ <div class="container"><div style="margin-right: auto"></div></div>
+ <div class="container"><div style="margin-bottom: auto"></div></div>
+ <div class="container"><div style="margin-left: auto"></div></div>
+ <!-- "auto" margin on all sides (should be treated as 0): -->
+ <div class="container"><div style="margin: auto"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-002-ref.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-002-ref.html
new file mode 100644
index 0000000000..38cfdff074
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-002-ref.html
@@ -0,0 +1,79 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Reference</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: block;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 10px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 14px;
+ width: 20px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+</head>
+<body>
+ <div class="big">
+ <!-- Margin just on one side: -->
+ <div class="container"><div style="margin: 3px 0 0 12px"></div></div>
+ <div class="container"><div style="margin: 0 0 0 9px"></div></div>
+ <div class="container"><div style="margin: 0 0 0 12px"></div></div>
+ <div class="container"><div style="margin: 0 0 0 12px"></div></div>
+ <!-- Margin on all sides: -->
+ <div class="container"><div style="margin: 1px 0 0 10px"></div></div>
+ <br>
+
+ <!-- "auto" margin on just one side (should be treated as 0): -->
+ <div class="container"><div style="margin: 0 0 0 12px"></div></div>
+ <div class="container"><div style="margin: 0 0 0 12px"></div></div>
+ <div class="container"><div style="margin: 0 0 0 12px"></div></div>
+ <div class="container"><div style="margin: 0 0 0 12px"></div></div>
+ <!-- "auto" margin on all sides (should be treated as 0): -->
+ <div class="container"><div style="margin: 0 0 0 12px"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- Margin just on one side: -->
+ <div class="container"><div style="margin: 3px 0 0 -4px"></div></div>
+ <div class="container"><div style="margin: 0 0 0 -7px"></div></div>
+ <div class="container"><div style="margin: 0 0 0 -4px"></div></div>
+ <div class="container"><div style="margin: 0 0 0 -4px"></div></div>
+ <!-- Margin on all sides: -->
+ <div class="container"><div style="margin: 1px 0 0 -6px"></div></div>
+ <br>
+
+ <!-- "auto" margin on just one side (should be treated as 0): -->
+ <div class="container"><div style="margin: 0 0 0 -4px"></div></div>
+ <div class="container"><div style="margin: 0 0 0 -4px"></div></div>
+ <div class="container"><div style="margin: 0 0 0 -4px"></div></div>
+ <div class="container"><div style="margin: 0 0 0 -4px"></div></div>
+ <!-- "auto" margin on all sides (should be treated as 0): -->
+ <div class="container"><div style="margin: 0 0 0 -4px"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-002.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-002.html
new file mode 100644
index 0000000000..624a9e8592
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-002.html
@@ -0,0 +1,84 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Static position of abspos children in a row flex container, with various margins applied, and "justify-content: flex-end"</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+ <link rel="match" href="flex-abspos-staticpos-margin-002-ref.html">
+ <meta charset="utf-8">
+ <style>
+ .container {
+ display: flex;
+ flex-flow: row;
+ justify-content: flex-end;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 10px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 14px;
+ width: 20px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+ </style>
+</head>
+<body>
+ <div class="big">
+ <!-- Margin just on one side: -->
+ <div class="container"><div style="margin-top: 3px"></div></div>
+ <div class="container"><div style="margin-right: 3px"></div></div>
+ <div class="container"><div style="margin-bottom: 3px"></div></div>
+ <div class="container"><div style="margin-left: 3px"></div></div>
+ <!-- Margin on all sides: -->
+ <div class="container"><div style="margin: 1px 2px 3px 4px"></div></div>
+ <br>
+
+ <!-- "auto" margin on just one side (should be treated as 0): -->
+ <div class="container"><div style="margin-top: auto"></div></div>
+ <div class="container"><div style="margin-right: auto"></div></div>
+ <div class="container"><div style="margin-bottom: auto"></div></div>
+ <div class="container"><div style="margin-left: auto"></div></div>
+ <!-- "auto" margin on all sides (should be treated as 0): -->
+ <div class="container"><div style="margin: auto"></div></div>
+ <br>
+ </div>
+ <div class="small">
+ <!-- Margin just on one side: -->
+ <div class="container"><div style="margin-top: 3px"></div></div>
+ <div class="container"><div style="margin-right: 3px"></div></div>
+ <div class="container"><div style="margin-bottom: 3px"></div></div>
+ <div class="container"><div style="margin-left: 3px"></div></div>
+ <!-- Margin on all sides: -->
+ <div class="container"><div style="margin: 1px 2px 3px 4px"></div></div>
+ <br>
+
+ <!-- "auto" margin on just one side (should be treated as 0): -->
+ <div class="container"><div style="margin-top: auto"></div></div>
+ <div class="container"><div style="margin-right: auto"></div></div>
+ <div class="container"><div style="margin-bottom: auto"></div></div>
+ <div class="container"><div style="margin-left: auto"></div></div>
+ <!-- "auto" margin on all sides (should be treated as 0): -->
+ <div class="container"><div style="margin: auto"></div></div>
+ <br>
+ </div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-003-ref.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-003-ref.html
new file mode 100644
index 0000000000..74e4066570
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-003-ref.html
@@ -0,0 +1,68 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Static position of abspos children in a row flex container, with various margins applied, and "align-items: flex-end" reference</title>
+<style>
+ .container {
+ display: block;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 10px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 14px;
+ width: 20px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+</style>
+<div class="big">
+ <!-- Margin just on one side: -->
+ <div class="container"><div style="margin: 8px 0 0 0"></div></div>
+ <div class="container"><div style="margin: 8px 0 0 0"></div></div>
+ <div class="container"><div style="margin: 5px 0 0 0"></div></div>
+ <div class="container"><div style="margin: 8px 0 0 3px"></div></div>
+ <!-- Margin on all sides: -->
+ <div class="container"><div style="margin: 5px 0 0 4px"></div></div>
+ <br>
+
+ <!-- "auto" margin on just one side (should be treated as 0): -->
+ <div class="container"><div style="margin: 8px 0 0 0"></div></div>
+ <div class="container"><div style="margin: 8px 0 0 0"></div></div>
+ <div class="container"><div style="margin: 8px 0 0 0"></div></div>
+ <div class="container"><div style="margin: 8px 0 0 0"></div></div>
+ <!-- "auto" margin on all sides (should be treated as 0): -->
+ <div class="container"><div style="margin: 8px 0 0 0"></div></div>
+ <br>
+</div>
+<div class="small">
+ <!-- Margin just on one side: -->
+ <div class="container"><div style="margin: -4px 0 0 0"></div></div>
+ <div class="container"><div style="margin: -4px 0 0 0"></div></div>
+ <div class="container"><div style="margin: -7px 0 0 0"></div></div>
+ <div class="container"><div style="margin: -4px 0 0 3px"></div></div>
+ <!-- Margin on all sides: -->
+ <div class="container"><div style="margin: -7px 0 0 4px"></div></div>
+ <br>
+
+ <!-- "auto" margin on just one side (should be treated as 0): -->
+ <div class="container"><div style="margin: -4px 0 0 0"></div></div>
+ <div class="container"><div style="margin: -4px 0 0 0"></div></div>
+ <div class="container"><div style="margin: -4px 0 0 0"></div></div>
+ <div class="container"><div style="margin: -4px 0 0 0"></div></div>
+ <!-- "auto" margin on all sides (should be treated as 0): -->
+ <div class="container"><div style="margin: -4px 0 0 0"></div></div>
+ <br>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-003.html b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-003.html
new file mode 100644
index 0000000000..64ef7a7fe5
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flex-abspos-staticpos-margin-003.html
@@ -0,0 +1,74 @@
+<!DOCTYPE html>
+<meta charset="utf-8">
+<title>Static position of abspos children in a row flex container, with various margins applied, and "align-items: flex-end"</title>
+<link rel="author" title="Vitaly Dyachkov" href="mailto:obyknovenius@me.com">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<link rel="match" href="flex-abspos-staticpos-margin-003-ref.html">
+<style>
+ .container {
+ display: flex;
+ flex-flow: row;
+ align-items: flex-end;
+ padding: 1px 2px;
+ border: 1px solid black;
+ background: yellow;
+ margin-bottom: 5px;
+ margin-right: 10px;
+ float: left; /* For testing in "rows" of containers */
+ }
+ br { clear: both }
+
+ .big > .container {
+ height: 14px;
+ width: 20px;
+ }
+ .small > .container {
+ height: 2px;
+ width: 4px;
+ }
+
+ .container > * {
+ position: absolute;
+ background: teal;
+ height: 6px;
+ width: 8px;
+ }
+</style>
+<div class="big">
+ <!-- Margin just on one side: -->
+ <div class="container"><div style="margin-top: 3px"></div></div>
+ <div class="container"><div style="margin-right: 3px"></div></div>
+ <div class="container"><div style="margin-bottom: 3px"></div></div>
+ <div class="container"><div style="margin-left: 3px"></div></div>
+ <!-- Margin on all sides: -->
+ <div class="container"><div style="margin: 1px 2px 3px 4px"></div></div>
+ <br>
+
+ <!-- "auto" margin on just one side (should be treated as 0): -->
+ <div class="container"><div style="margin-top: auto"></div></div>
+ <div class="container"><div style="margin-right: auto"></div></div>
+ <div class="container"><div style="margin-bottom: auto"></div></div>
+ <div class="container"><div style="margin-left: auto"></div></div>
+ <!-- "auto" margin on all sides (should be treated as 0): -->
+ <div class="container"><div style="margin: auto"></div></div>
+ <br>
+</div>
+<div class="small">
+ <!-- Margin just on one side: -->
+ <div class="container"><div style="margin-top: 3px"></div></div>
+ <div class="container"><div style="margin-right: 3px"></div></div>
+ <div class="container"><div style="margin-bottom: 3px"></div></div>
+ <div class="container"><div style="margin-left: 3px"></div></div>
+ <!-- Margin on all sides: -->
+ <div class="container"><div style="margin: 1px 2px 3px 4px"></div></div>
+ <br>
+
+ <!-- "auto" margin on just one side (should be treated as 0): -->
+ <div class="container"><div style="margin-top: auto"></div></div>
+ <div class="container"><div style="margin-right: auto"></div></div>
+ <div class="container"><div style="margin-bottom: auto"></div></div>
+ <div class="container"><div style="margin-left: auto"></div></div>
+ <!-- "auto" margin on all sides (should be treated as 0): -->
+ <div class="container"><div style="margin: auto"></div></div>
+ <br>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-001-ref.html b/testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-001-ref.html
new file mode 100644
index 0000000000..95c1f3341d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-001-ref.html
@@ -0,0 +1,26 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Reftest Reference</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <meta charset="utf-8">
+ <style>
+ .tealBlock {
+ background: teal;
+ width: 20px;
+ height: 20px;
+ margin-bottom: 5px;
+ }
+ </style>
+</head>
+<body>
+ <div class="tealBlock"></div>
+ <div class="tealBlock"></div>
+ <div class="tealBlock"></div>
+ <div class="tealBlock"></div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-001a.html b/testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-001a.html
new file mode 100644
index 0000000000..fabe204b27
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-001a.html
@@ -0,0 +1,54 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Testing that "min-width", "max-width", "min-height", and "max-height" are applied on absolutely positioned children of a horizontal flex container</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#abspos-items">
+ <link rel="match" href="flexbox-abspos-child-001-ref.html">
+ <meta charset="utf-8">
+ <style>
+ .flexContainer {
+ display: flex;
+ height: 10px;
+ width: 10px;
+ background: purple;
+ margin-bottom: 15px;
+ position: relative;
+ }
+ .absPos {
+ position: absolute;
+ background: teal;
+ }
+ .testMinWidth {
+ width: 10px;
+ height: 20px;
+ min-width: 20px;
+ }
+ .testMaxWidth {
+ width: 50px;
+ height: 20px;
+ max-width: 20px;
+ }
+ .testMinHeight {
+ width: 20px;
+ height: 10px;
+ min-height: 20px;
+ }
+ .testMaxHeight {
+ width: 20px;
+ height: 50px;
+ max-height: 20px;
+ }
+ </style>
+</head>
+<body>
+ <div class="flexContainer"><div class="absPos testMinWidth"></div></div>
+ <div class="flexContainer"><div class="absPos testMaxWidth"></div></div>
+ <div class="flexContainer"><div class="absPos testMinHeight"></div></div>
+ <div class="flexContainer"><div class="absPos testMaxHeight"></div></div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-001b.html b/testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-001b.html
new file mode 100644
index 0000000000..30fc58c3d1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-001b.html
@@ -0,0 +1,55 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <title>CSS Test: Testing that "min-width", "max-width", "min-height", and "max-height" are applied on absolutely positioned children of a vertical flex container</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#abspos-items">
+ <link rel="match" href="flexbox-abspos-child-001-ref.html">
+ <meta charset="utf-8">
+ <style>
+ .flexContainer {
+ display: flex;
+ flex-direction: column;
+ height: 10px;
+ width: 10px;
+ background: purple;
+ margin-bottom: 15px;
+ position: relative;
+ }
+ .absPos {
+ position: absolute;
+ background: teal;
+ }
+ .testMinWidth {
+ width: 10px;
+ height: 20px;
+ min-width: 20px;
+ }
+ .testMaxWidth {
+ width: 50px;
+ height: 20px;
+ max-width: 20px;
+ }
+ .testMinHeight {
+ width: 20px;
+ height: 10px;
+ min-height: 20px;
+ }
+ .testMaxHeight {
+ width: 20px;
+ height: 50px;
+ max-height: 20px;
+ }
+ </style>
+</head>
+<body>
+ <div class="flexContainer"><div class="absPos testMinWidth"></div></div>
+ <div class="flexContainer"><div class="absPos testMaxWidth"></div></div>
+ <div class="flexContainer"><div class="absPos testMinHeight"></div></div>
+ <div class="flexContainer"><div class="absPos testMaxHeight"></div></div>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-002-ref.html b/testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-002-ref.html
new file mode 100644
index 0000000000..876e5d6c2c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-002-ref.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>CSS Reftest Reference</title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <style>
+ .tealBlock {
+ background: teal;
+ width: 10px;
+ height: 10px;
+ margin-bottom: 5px;
+ }
+ .purpleBlock {
+ background: purple;
+ width: 10px;
+ height: 10px;
+ margin-bottom: 5px;
+ }
+ </style>
+</head>
+<body>
+
+ <div class="purpleBlock"></div>
+ <div class="purpleBlock"></div>
+ <div class="purpleBlock"></div>
+ <div class="purpleBlock"></div>
+
+ <div class="tealBlock"></div>
+ <div class="tealBlock"></div>
+ <div class="tealBlock"></div>
+ <div class="tealBlock"></div>
+
+ <div class="tealBlock"></div>
+ <div class="tealBlock"></div>
+ <div class="tealBlock"></div>
+ <div class="tealBlock"></div>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-002.html b/testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-002.html
new file mode 100644
index 0000000000..8234085681
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flexbox-abspos-child-002.html
@@ -0,0 +1,62 @@
+<!DOCTYPE html>
+<!--
+ Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/
+-->
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>
+ CSS Test: Test that "flex-basis" doesn't affect layout of abspos flex child
+ </title>
+ <link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
+ <link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#abspos-items">
+ <link rel="match" href="flexbox-abspos-child-002-ref.html">
+ <style>
+ .flex {
+ display: flex;
+ height: 10px;
+ width: 10px;
+ background: purple;
+ margin-bottom: 5px;
+ position: relative;
+ }
+ .flex > * {
+ position: absolute;
+ background: teal;
+ height: 10px;
+ }
+ .sized {
+ width: 10px;
+ }
+ .implied {
+ left: 0;
+ right: 0;
+ }
+ </style>
+</head>
+<body>
+ <!-- In all cases below, flex-basis should have no effect on layout (because
+ it's on an element that is abspos and hence not a flex item). -->
+
+ <!-- Abspos child has auto width (which should end up 0): -->
+ <div class="flex"><div style="flex-basis: 2px"></div></div>
+ <div class="flex"><div style="flex-basis: 100px"></div></div>
+ <div class="flex"><div style="flex-basis: 80%"></div></div>
+ <div class="flex"><div style="flex-basis: content"></div></div>
+
+ <!-- Abspos child has explicit 10px width: -->
+ <div class="flex"><div class="sized" style="flex-basis: 2px"></div></div>
+ <div class="flex"><div class="sized" style="flex-basis: 100px"></div></div>
+ <div class="flex"><div class="sized" style="flex-basis: 80%"></div></div>
+ <div class="flex"><div class="sized" style="flex-basis: content"></div></div>
+
+ <!-- Abspos child has implicit 10px width (implied by auto width and
+ constrained left/right properties): -->
+ <div class="flex"><div class="implied" style="flex-basis: 2px"></div></div>
+ <div class="flex"><div class="implied" style="flex-basis: 100px"></div></div>
+ <div class="flex"><div class="implied" style="flex-basis: 80%"></div></div>
+ <div class="flex"><div class="implied" style="flex-basis: content"></div></div>
+
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flexbox_absolute-atomic-ref.html b/testing/web-platform/tests/css/css-flexbox/abspos/flexbox_absolute-atomic-ref.html
new file mode 100644
index 0000000000..310ea204b3
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flexbox_absolute-atomic-ref.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<title>flexbox | abspos atomic flexitems</title>
+<link rel="author" href="http://opera.com" title="Opera Software">
+<style>
+body {margin: 0;}
+body>div {
+ background: #ffcc00;
+
+ display: flex;
+ justify-content: space-around;
+}
+div div {
+ background: #3366cc;
+ margin: 20px;
+}
+</style>
+
+<div>
+ <div>filler</div>
+ <div>filler</div>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flexbox_absolute-atomic.html b/testing/web-platform/tests/css/css-flexbox/abspos/flexbox_absolute-atomic.html
new file mode 100644
index 0000000000..dae6b3e43e
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flexbox_absolute-atomic.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+<title>flexbox | abspos atomic flexitems</title>
+<link rel="author" href="http://opera.com" title="Opera Software">
+<link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#abspos-items">
+<link rel="match" href="flexbox_absolute-atomic-ref.html">
+<style>
+body {margin: 0;}
+body>div {
+ background: #ffcc00;
+
+ display: flex;
+ justify-content: space-around;
+}
+div div {
+ background: #3366cc;
+ margin: 20px;
+}
+#abs {
+ position: absolute;
+ top: -1000px;
+}
+</style>
+
+<div>
+ <div>filler</div>
+ <div id="abs">filler</div>
+ <div>filler</div>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/flexbox_inline-abspos.html b/testing/web-platform/tests/css/css-flexbox/abspos/flexbox_inline-abspos.html
new file mode 100644
index 0000000000..56077ae585
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/flexbox_inline-abspos.html
@@ -0,0 +1,15 @@
+<!DOCTYPE html>
+<title>flexbox | absolutely positioned inline</title>
+<link rel="author" href="http://opera.com" title="Opera Software">
+<link rel="help" href="http://www.w3.org/TR/css-flexbox-1/#abspos-items">
+<link rel="match" href="/css/reference/blank.html">
+<style>
+div {
+ background: red;
+ margin-top: -20em;
+ position: absolute;
+ display: inline-flex;
+}
+</style>
+
+<div>FAIL</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-001.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-001.html
new file mode 100644
index 0000000000..f601740846
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-001.html
@@ -0,0 +1,709 @@
+<!DOCTYPE html>
+<html>
+<title>CSS Test: Absolutely positioned children of flexboxes</title>
+<link rel="author" title="Google Inc." href="http://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<meta name="flags" content="dom">
+<meta name="assert" content="Checks that we correctly position abspos children
+in a number of writing modes and alignments">
+<style>
+body {
+ margin: 0;
+}
+
+.title {
+ margin-top: 1em;
+}
+
+.flexbox {
+ display: flex;
+ background-color: #aaa;
+ position: relative;
+}
+.flexbox div {
+ border: 0;
+ flex: none;
+}
+
+.horizontal-tb {
+ writing-mode: horizontal-tb;
+}
+.vertical-rl {
+ writing-mode: vertical-rl;
+}
+.vertical-lr {
+ writing-mode: vertical-lr;
+}
+
+.row {
+ flex-flow: row;
+}
+.row-reverse {
+ flex-flow: row-reverse;
+}
+.column {
+ flex-flow: column;
+}
+.column-reverse {
+ flex-flow: column-reverse;
+}
+
+.flexbox :nth-child(1) {
+ background-color: blue;
+}
+.flexbox :nth-child(2) {
+ background-color: green;
+}
+
+.rtl {
+ direction: rtl;
+}
+.ltr {
+ direction: ltr;
+}
+
+.justify-content-flex-start {
+ justify-content: flex-start;
+}
+.justify-content-flex-end {
+ justify-content: flex-end;
+}
+.justify-content-center {
+ justify-content: center;
+}
+.justify-content-space-between {
+ justify-content: space-between;
+}
+.justify-content-space-around {
+ justify-content: space-around;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.flexbox')">
+<div id=log></div>
+<script>
+// Each flexbox has two abspos children - one is 40x10, the other 10x20.
+// The flexbox itself is 80x20.
+// All that is flipped for vertical flows.
+var expectations = {
+ 'horizontal-tb': {
+ 'row': {
+ 'ltr': {
+ 'flex-start': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'flex-end': {
+ 'child1': [40, 0],
+ 'child2': [70, 0],
+ },
+ 'center': {
+ 'child1': [20, 0],
+ 'child2': [35, 0],
+ },
+ 'space-between': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'space-around': {
+ 'child1': [20, 0],
+ 'child2': [35, 0],
+ },
+ },
+ 'rtl': {
+ 'flex-start': {
+ 'child1': [40, 0],
+ 'child2': [70, 0],
+ },
+ 'flex-end': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'center': {
+ 'child1': [20, 0],
+ 'child2': [35, 0],
+ },
+ 'space-between': {
+ 'child1': [40, 0],
+ 'child2': [70, 0],
+ },
+ 'space-around': {
+ 'child1': [20, 0],
+ 'child2': [35, 0],
+ },
+ },
+ },
+ 'column': {
+ 'ltr': {
+ 'flex-start': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'flex-end': {
+ 'child1': [0, 40],
+ 'child2': [0, 70],
+ },
+ 'center': {
+ 'child1': [0, 20],
+ 'child2': [0, 35],
+ },
+ 'space-between': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'space-around': {
+ 'child1': [0, 20],
+ 'child2': [0, 35],
+ },
+ },
+ 'rtl': {
+ 'flex-start': {
+ 'child1': [10, 0],
+ 'child2': [0, 0],
+ },
+ 'flex-end': {
+ 'child1': [10, 40],
+ 'child2': [0, 70],
+ },
+ 'center': {
+ 'child1': [10, 20],
+ 'child2': [0, 35],
+ },
+ 'space-between': {
+ 'child1': [10, 0],
+ 'child2': [0, 0],
+ },
+ 'space-around': {
+ 'child1': [10, 20],
+ 'child2': [0, 35],
+ },
+ },
+ },
+ 'row-reverse': {
+ 'ltr': {
+ 'flex-start': {
+ 'child1': [40, 0],
+ 'child2': [70, 0],
+ },
+ 'flex-end': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'center': {
+ 'child1': [20, 0],
+ 'child2': [35, 0],
+ },
+ 'space-between': {
+ 'child1': [40, 0],
+ 'child2': [70, 0],
+ },
+ 'space-around': {
+ 'child1': [20, 0],
+ 'child2': [35, 0],
+ },
+ },
+ 'rtl': {
+ 'flex-start': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'flex-end': {
+ 'child1': [40, 0],
+ 'child2': [70, 0],
+ },
+ 'center': {
+ 'child1': [20, 0],
+ 'child2': [35, 0],
+ },
+ 'space-between': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'space-around': {
+ 'child1': [20, 0],
+ 'child2': [35, 0],
+ },
+ },
+ },
+ 'column-reverse': {
+ 'ltr': {
+ 'flex-start': {
+ 'child1': [0, 40],
+ 'child2': [0, 70],
+ },
+ 'flex-end': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'center': {
+ 'child1': [0, 20],
+ 'child2': [0, 35],
+ },
+ 'space-between': {
+ 'child1': [0, 40],
+ 'child2': [0, 70],
+ },
+ 'space-around': {
+ 'child1': [0, 20],
+ 'child2': [0, 35],
+ },
+ },
+ 'rtl': {
+ 'flex-start': {
+ 'child1': [10, 40],
+ 'child2': [0, 70],
+ },
+ 'flex-end': {
+ 'child1': [10, 0],
+ 'child2': [0, 0],
+ },
+ 'center': {
+ 'child1': [10, 20],
+ 'child2': [0, 35],
+ },
+ 'space-between': {
+ 'child1': [10, 40],
+ 'child2': [0, 70],
+ },
+ 'space-around': {
+ 'child1': [10, 20],
+ 'child2': [0, 35],
+ },
+ },
+ },
+ },
+ 'vertical-rl': {
+ 'row': {
+ 'ltr': {
+ 'flex-start': {
+ 'child1': [10, 0],
+ 'child2': [0, 0],
+ },
+ 'flex-end': {
+ 'child1': [10, 40],
+ 'child2': [0, 70],
+ },
+ 'center': {
+ 'child1': [10, 20],
+ 'child2': [0, 35],
+ },
+ 'space-between': {
+ 'child1': [10, 0],
+ 'child2': [0, 0],
+ },
+ 'space-around': {
+ 'child1': [10, 20],
+ 'child2': [0, 35],
+ },
+ },
+ 'rtl': {
+ 'flex-start': {
+ 'child1': [10, 40],
+ 'child2': [0, 70],
+ },
+ 'flex-end': {
+ 'child1': [10, 0],
+ 'child2': [0, 0],
+ },
+ 'center': {
+ 'child1': [10, 20],
+ 'child2': [0, 35],
+ },
+ 'space-between': {
+ 'child1': [10, 40],
+ 'child2': [0, 70],
+ },
+ 'space-around': {
+ 'child1': [10, 20],
+ 'child2': [0, 35],
+ },
+ },
+ },
+ 'column': {
+ 'ltr': {
+ 'flex-start': {
+ 'child1': [40, 0],
+ 'child2': [70, 0],
+ },
+ 'flex-end': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'center': {
+ 'child1': [20, 0],
+ 'child2': [35, 0],
+ },
+ 'space-between': {
+ 'child1': [40, 0],
+ 'child2': [70, 0],
+ },
+ 'space-around': {
+ 'child1': [20, 0],
+ 'child2': [35, 0],
+ },
+ },
+ 'rtl': {
+ 'flex-start': {
+ 'child1': [40, 10],
+ 'child2': [70, 0],
+ },
+ 'flex-end': {
+ 'child1': [0, 10],
+ 'child2': [0, 0],
+ },
+ 'center': {
+ 'child1': [20, 10],
+ 'child2': [35, 0],
+ },
+ 'space-between': {
+ 'child1': [40, 10],
+ 'child2': [70, 0],
+ },
+ 'space-around': {
+ 'child1': [20, 10],
+ 'child2': [35, 0],
+ },
+ },
+ },
+ 'row-reverse': {
+ 'ltr': {
+ 'flex-start': {
+ 'child1': [10, 40],
+ 'child2': [0, 70],
+ },
+ 'flex-end': {
+ 'child1': [10, 0],
+ 'child2': [0, 0],
+ },
+ 'center': {
+ 'child1': [10, 20],
+ 'child2': [0, 35],
+ },
+ 'space-between': {
+ 'child1': [10, 40],
+ 'child2': [0, 70],
+ },
+ 'space-around': {
+ 'child1': [10, 20],
+ 'child2': [0, 35],
+ },
+ },
+ 'rtl': {
+ 'flex-start': {
+ 'child1': [10, 0],
+ 'child2': [0, 0],
+ },
+ 'flex-end': {
+ 'child1': [10, 40],
+ 'child2': [0, 70],
+ },
+ 'center': {
+ 'child1': [10, 20],
+ 'child2': [0, 35],
+ },
+ 'space-between': {
+ 'child1': [10, 0],
+ 'child2': [0, 0],
+ },
+ 'space-around': {
+ 'child1': [10, 20],
+ 'child2': [0, 35],
+ },
+ },
+ },
+ 'column-reverse': {
+ 'ltr': {
+ 'flex-start': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'flex-end': {
+ 'child1': [40, 0],
+ 'child2': [70, 0],
+ },
+ 'center': {
+ 'child1': [20, 0],
+ 'child2': [35, 0],
+ },
+ 'space-between': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'space-around': {
+ 'child1': [20, 0],
+ 'child2': [35, 0],
+ },
+ },
+ 'rtl': {
+ 'flex-start': {
+ 'child1': [0, 10],
+ 'child2': [0, 0],
+ },
+ 'flex-end': {
+ 'child1': [40, 10],
+ 'child2': [70, 0],
+ },
+ 'center': {
+ 'child1': [20, 10],
+ 'child2': [35, 0],
+ },
+ 'space-between': {
+ 'child1': [0, 10],
+ 'child2': [0, 0],
+ },
+ 'space-around': {
+ 'child1': [20, 10],
+ 'child2': [35, 0],
+ },
+ },
+ },
+ },
+ 'vertical-lr': {
+ 'row': {
+ 'ltr': {
+ 'flex-start': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'flex-end': {
+ 'child1': [0, 40],
+ 'child2': [0, 70],
+ },
+ 'center': {
+ 'child1': [0, 20],
+ 'child2': [0, 35],
+ },
+ 'space-between': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'space-around': {
+ 'child1': [0, 20],
+ 'child2': [0, 35],
+ },
+ },
+ 'rtl': {
+ 'flex-start': {
+ 'child1': [0, 40],
+ 'child2': [0, 70],
+ },
+ 'flex-end': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'center': {
+ 'child1': [0, 20],
+ 'child2': [0, 35],
+ },
+ 'space-between': {
+ 'child1': [0, 40],
+ 'child2': [0, 70],
+ },
+ 'space-around': {
+ 'child1': [0, 20],
+ 'child2': [0, 35],
+ },
+ },
+ },
+ 'column': {
+ 'ltr': {
+ 'flex-start': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'flex-end': {
+ 'child1': [40, 0],
+ 'child2': [70, 0],
+ },
+ 'center': {
+ 'child1': [20, 0],
+ 'child2': [35, 0],
+ },
+ 'space-between': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'space-around': {
+ 'child1': [20, 0],
+ 'child2': [35, 0],
+ },
+ },
+ 'rtl': {
+ 'flex-start': {
+ 'child1': [0, 10],
+ 'child2': [0, 0],
+ },
+ 'flex-end': {
+ 'child1': [40, 10],
+ 'child2': [70, 0],
+ },
+ 'center': {
+ 'child1': [20, 10],
+ 'child2': [35, 0],
+ },
+ 'space-between': {
+ 'child1': [0, 10],
+ 'child2': [0, 0],
+ },
+ 'space-around': {
+ 'child1': [20, 10],
+ 'child2': [35, 0],
+ },
+ },
+ },
+ 'row-reverse': {
+ 'ltr': {
+ 'flex-start': {
+ 'child1': [0, 40],
+ 'child2': [0, 70],
+ },
+ 'flex-end': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'center': {
+ 'child1': [0, 20],
+ 'child2': [0, 35],
+ },
+ 'space-between': {
+ 'child1': [0, 40],
+ 'child2': [0, 70],
+ },
+ 'space-around': {
+ 'child1': [0, 20],
+ 'child2': [0, 35],
+ },
+ },
+ 'rtl': {
+ 'flex-start': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'flex-end': {
+ 'child1': [0, 40],
+ 'child2': [0, 70],
+ },
+ 'center': {
+ 'child1': [0, 20],
+ 'child2': [0, 35],
+ },
+ 'space-between': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'space-around': {
+ 'child1': [0, 20],
+ 'child2': [0, 35],
+ },
+ },
+ },
+ 'column-reverse': {
+ 'ltr': {
+ 'flex-start': {
+ 'child1': [40, 0],
+ 'child2': [70, 0],
+ },
+ 'flex-end': {
+ 'child1': [0, 0],
+ 'child2': [0, 0],
+ },
+ 'center': {
+ 'child1': [20, 0],
+ 'child2': [35, 0],
+ },
+ 'space-between': {
+ 'child1': [40, 0],
+ 'child2': [70, 0],
+ },
+ 'space-around': {
+ 'child1': [20, 0],
+ 'child2': [35, 0],
+ },
+ },
+ 'rtl': {
+ 'flex-start': {
+ 'child1': [40, 10],
+ 'child2': [70, 0],
+ },
+ 'flex-end': {
+ 'child1': [0, 10],
+ 'child2': [0, 0],
+ },
+ 'center': {
+ 'child1': [20, 10],
+ 'child2': [35, 0],
+ },
+ 'space-between': {
+ 'child1': [40, 10],
+ 'child2': [70, 0],
+ },
+ 'space-around': {
+ 'child1': [20, 10],
+ 'child2': [35, 0],
+ },
+ },
+ },
+ },
+};
+
+var writingModes = ['horizontal-tb', 'vertical-rl', 'vertical-lr'];
+var flexDirections = ['row', 'column', 'row-reverse', 'column-reverse'];
+var directions = ['ltr', 'rtl'];
+var justifyContents = ['flex-start', 'flex-end', 'center', 'space-between', 'space-around'];
+
+function mainAxisDirection(writingMode, flexDirection)
+{
+ if ((writingMode.indexOf('horizontal') != -1 && flexDirection.indexOf('row') != -1)
+ || (writingMode.indexOf('vertical') != -1 && flexDirection.indexOf('column') != -1))
+ return 'width';
+ return 'height';
+}
+
+function addChild(flexbox, mainAxis, crossAxis, mainAxisLength, crossAxisLength, expectations)
+{
+ var child = document.createElement('div');
+ child.setAttribute('style', mainAxis + ': ' + mainAxisLength + 'px;'
+ + crossAxis + ': ' + crossAxisLength + 'px; position: absolute;');
+
+ child.setAttribute("data-expected-" + mainAxis, mainAxisLength);
+ child.setAttribute("data-expected-" + crossAxis, crossAxisLength);
+ child.setAttribute("data-offset-x", expectations[0]);
+ child.setAttribute("data-offset-y", expectations[1]);
+
+ flexbox.appendChild(child);
+}
+
+writingModes.forEach(function(writingMode) {
+ flexDirections.forEach(function(flexDirection) {
+ directions.forEach(function(direction) {
+ justifyContents.forEach(function(justifyContent) {
+ var flexboxClassName = writingMode + ' ' + direction + ' ' + flexDirection + ' justify-content-' + justifyContent;
+ var title = document.createElement('div');
+ title.className = 'title';
+ title.innerHTML = flexboxClassName;
+ document.body.appendChild(title);
+
+ var mainAxis = mainAxisDirection(writingMode, flexDirection);
+ var crossAxis = (mainAxis == 'width') ? 'height' : 'width';
+
+ var flexbox = document.createElement('div');
+ flexbox.className = 'flexbox ' + flexboxClassName;
+ flexbox.setAttribute('style', mainAxis + ': 80px;' + crossAxis + ': 20px');
+
+ var baselineMargin = (flexDirection.indexOf('row') != -1) ? 'margin-block-start: 5px' : 'margin-inline-start: 5px';
+
+ var testExpectations = expectations[writingMode][flexDirection][direction][justifyContent];
+ addChild(flexbox, mainAxis, crossAxis, 40, 10, testExpectations['child1']);
+ addChild(flexbox, mainAxis, crossAxis, 10, 20, testExpectations['child2']);
+
+ document.body.appendChild(flexbox);
+ })
+ })
+ })
+})
+
+</script>
+
+</body>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-002.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-002.html
new file mode 100644
index 0000000000..5c1cf08475
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-002.html
@@ -0,0 +1,160 @@
+<!DOCTYPE html>
+<html>
+<title>CSS Test: Absolutely positioned children of flexboxes</title>
+<link href="../support/flexbox.css" rel="stylesheet">
+<link rel="author" title="Google Inc." href="http://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<meta name="flags" content="dom">
+<meta name="assert" content="Checks that we correctly position abspos children
+with different alignments and dynamic changes">
+<style>
+body {
+ margin: 0;
+}
+.flexbox {
+ background-color: green;
+ height: 100px;
+ width: 100px;
+ margin: 10px;
+}
+.flexbox > * {
+ flex: none;
+}
+.relative {
+ position: relative;
+}
+.flexbox > div {
+ width: 20px;
+ height: 20px;
+}
+.absolute {
+ position: absolute;
+}
+#placed-absolute {
+ top: 20px;
+ left: 20px;
+}
+
+.rtl {
+ direction: rtl;
+}
+.ltr {
+ direction: ltr;
+}
+
+.flexbox :nth-child(1) {
+ background-color: blue;
+}
+.flexbox :nth-child(2) {
+ background-color: yellow;
+}
+.flexbox :nth-child(3) {
+ background-color: salmon;
+}
+.flexbox :nth-child(4) {
+ background-color: grey;
+}
+.flexbox :nth-child(5) {
+ background-color: red;
+}
+.flexbox :nth-child(6) {
+ background-color: orange;
+}
+.flexbox :nth-child(7) {
+ background-color: purple;
+}
+</style>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.flexbox')">
+<div id=log></div>
+
+<div class='flexbox relative align-items-center'>
+ <div id='placed-absolute' class='absolute' data-offset-x=20 data-offset-y=20></div>
+</div>
+
+<div class='flexbox relative align-items-center'>
+ <div data-offset-x=0 data-offset-y=40></div>
+ <div class='absolute' data-offset-x=0 data-offset-y=40></div>
+ <div data-offset-x=20 data-offset-y=40></div>
+ <div class="absolute" style="top: 5px; left: 5px" data-offset-x=5 data-offset-y=5></div>
+</div>
+
+<div class="relative">
+<div class='flexbox align-items-center'>
+ <div data-offset-x=10 data-offset-y=40></div>
+ <div class='absolute' data-offset-x=10 data-offset-y=40></div>
+ <div data-offset-x=30 data-offset-y=40></div>
+ <div class="absolute" style="top: 5px; left: 5px" data-offset-x=5 data-offset-y=5></div>
+</div>
+</div>
+
+<div class='flexbox relative column rtl'>
+ <div data-offset-x=80 data-offset-y=0></div>
+ <div class='absolute' data-offset-x=80 data-offset-y=0></div>
+ <div data-offset-x=80 data-offset-y=20></div>
+ <div class="absolute" style="top: 5px; left: 5px" data-offset-x=5 data-offset-y=5></div>
+</div>
+
+<div class="relative">
+<div class='flexbox wrap-reverse'>
+ <div style="width:90px" data-offset-x=10 data-offset-y=80></div>
+ <div class="absolute" data-offset-x=10 data-offset-y=80></div>
+ <div data-offset-x=10 data-offset-y=30></div>
+ <div class="absolute" data-offset-x=10 data-offset-y=80></div>
+ <div data-offset-x=30 data-offset-y=30></div>
+ <div class="absolute" data-offset-x=10 data-offset-y=80></div>
+ <div class="absolute" style="top: 5px; left: 5px" data-offset-x=5 data-offset-y=5></div>
+</div>
+</div>
+
+<div class='flexbox relative'>
+ <div style="margin: auto;" data-offset-x=40 data-offset-y=40></div>
+ <div class="absolute" style="margin: auto;" data-offset-x=0 data-offset-y=0></div>
+ <div class="absolute" style="margin: auto;" data-offset-x=0 data-offset-y=0></div>
+ <div class="absolute" style="margin: auto; top: 5px; left: 5px" data-offset-x=5 data-offset-y=5></div>
+</div>
+
+<div class='flexbox align-items-stretch relative'>
+ <div style="height: auto" data-offset-x=0 data-offset-y=0 data-expected-height=100></div>
+ <div class="absolute" style="height: auto" data-offset-x=0 data-offset-y=0 data-expected-height=0></div>
+ <div class="absolute" style="height: auto; top: 5px; left: 5px" data-offset-x=5 data-offset-y=5 data-expected-height=0></div>
+</div>
+
+<div class="flexbox wrap relative">
+ <div style="width: 100px;" data-offset-x=0 data-offset-y=0></div>
+ <div class="absolute" data-offset-x=0 data-offset-y=0></div>
+ <div style="width: 50px;" data-offset-x=0 data-offset-y=50></div>
+ <div class="absolute" data-offset-x=0 data-offset-y=0></div>
+ <div style="width: 50px;" data-offset-x=50 data-offset-y=50></div>
+ <div class="absolute" data-offset-x=0 data-offset-y=0></div>
+</div>
+
+<div class="flexbox wrap relative align-items-flex-end">
+ <div style="width: 100px;" data-offset-x=0 data-offset-y=30></div>
+ <div class="absolute" data-offset-x=0 data-offset-y=80></div>
+ <div style="width: 50px;" data-offset-x=0 data-offset-y=80></div>
+ <div class="absolute" data-offset-x=0 data-offset-y=80></div>
+ <div style="width: 50px;" data-offset-x=50 data-offset-y=80></div>
+ <div class="absolute" data-offset-x=0 data-offset-y=80></div>
+</div>
+
+
+<script>
+var absolute = document.getElementById('placed-absolute');
+var beforePosition = absolute.getBoundingClientRect();
+document.querySelector('.flexbox').style.height = '101px';
+var afterPosition = absolute.getBoundingClientRect();
+
+// Positioned element should not change position when the height of it's parent flexbox is changed.
+for (key in beforePosition) {
+ test(function() {
+ assert_equals(beforePosition[key], afterPosition[key]);
+ }, 'position of ' + key);
+}
+</script>
+</body>
+</html>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-003.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-003.html
new file mode 100644
index 0000000000..a858bac9fc
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-003.html
@@ -0,0 +1,96 @@
+<!DOCTYPE html>
+<title>CSS Test: Absolutely positioned children of flexboxes</title>
+<link rel="author" title="Google Inc." href="http://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<meta name="flags" content="dom">
+<meta name="assert" content="Checks that we correctly handle border and
+padding in combination with abspos items">
+<style>
+.rect {
+ position: absolute;
+ width: 50px;
+ height: 50px;
+ background-color: green;
+}
+
+.flexbox {
+ position: relative;
+ width: 100px;
+ height: 100px;
+ outline: 3px solid black;
+}
+</style>
+
+<link rel="stylesheet" href="../support/flexbox.css">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<body onload="checkLayout('.rect')">
+<div id=log></div>
+
+<div class="flexbox" style="padding-top: 10px; padding-left: 20px;">
+ <div class="rect" data-offset-x="20" data-offset-y="10"></div>
+</div>
+
+<div class="flexbox column" style="padding-top: 10px; padding-left: 20px;">
+ <div class="rect" data-offset-x="20" data-offset-y="10"></div>
+</div>
+
+<div class="flexbox" style="writing-mode: vertical-lr; padding-top: 10px; padding-left: 20px;">
+ <div class="rect" data-offset-x="20" data-offset-y="10"></div>
+</div>
+
+<div class="flexbox column" style="writing-mode: vertical-lr; padding-top: 10px; padding-left: 20px;">
+ <div class="rect" data-offset-x="20" data-offset-y="10"></div>
+</div>
+
+<div class="flexbox" style="direction: rtl; padding-top: 10px; padding-right: 20px;">
+ <div class="rect" data-offset-x="50" data-offset-y="10"></div>
+</div>
+
+<div class="flexbox column" style="direction: rtl; padding-top: 10px; padding-right: 20px;">
+ <div class="rect" data-offset-x="50" data-offset-y="10"></div>
+</div>
+
+<div class="flexbox" style="direction: rtl; writing-mode: vertical-lr; padding-bottom: 10px; padding-left: 20px;">
+ <div class="rect" data-offset-x="20" data-offset-y="50"></div>
+</div>
+
+<div class="flexbox column" style="direction: rtl; writing-mode: vertical-lr; padding-bottom: 10px; padding-left: 20px;">
+ <div class="rect" data-offset-x="20" data-offset-y="50"></div>
+</div>
+
+<hr>
+<div class="flexbox" style="border-top: 10px solid; border-left: 20px solid;">
+ <div class="rect" data-offset-x="0" data-offset-y="0"></div>
+</div>
+
+<div class="flexbox column" style="border-top: 10px solid; border-left: 20px solid;">
+ <div class="rect" data-offset-x="0" data-offset-y="0"></div>
+</div>
+
+<div class="flexbox" style="writing-mode: vertical-lr; border-top: 10px solid; border-left: 20px solid;">
+ <div class="rect" data-offset-x="0" data-offset-y="0"></div>
+</div>
+
+<div class="flexbox column" style="writing-mode: vertical-lr; border-top: 10px solid; border-left: 20px solid;">
+ <div class="rect" data-offset-x="0" data-offset-y="0"></div>
+</div>
+
+<div class="flexbox" style="direction: rtl; border-top: 10px solid; border-right: 20px solid;">
+ <div class="rect" data-offset-x="50" data-offset-y="0"></div>
+</div>
+
+<div class="flexbox column" style="direction: rtl; border-top: 10px solid; border-right: 20px solid;">
+ <div class="rect" data-offset-x="50" data-offset-y="0"></div>
+</div>
+
+<div class="flexbox" style="direction: rtl; writing-mode: vertical-lr; border-bottom: 10px solid; border-left: 20px solid;">
+ <div class="rect" data-offset-x="0" data-offset-y="50"></div>
+</div>
+
+<div class="flexbox column" style="direction: rtl; writing-mode: vertical-lr; border-bottom: 10px solid; border-left: 20px solid;">
+ <div class="rect" data-offset-x="0" data-offset-y="50"></div>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-004.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-004.html
new file mode 100644
index 0000000000..af8bc6284c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-004.html
@@ -0,0 +1,44 @@
+<!DOCTYPE html>
+<title>CSS Test: Absolutely positioned children of flexboxes</title>
+<link rel="author" title="Google Inc." href="http://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<meta name="flags" content="dom">
+<meta name="assert" content="Checks that we correctly handle when a flex item
+becomes absolutely positioned">
+<style>
+#flex {
+ display: flex;
+ position: relative;
+ background: red;
+ width: 500px;
+ height: 200px;
+}
+
+#item {
+ background: green;
+ left: 0;
+ right: 0;
+ top: 0;
+ bottom: 0;
+}
+</style>
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<script>
+function update() {
+ var item = document.getElementById("item");
+ item.offsetHeight;
+ item.style.position = "absolute";
+ item.offsetHeight;
+ checkLayout("#flex");
+}
+</script>
+
+<body onload="update();">
+
+<div id="flex">
+ <div id="item" data-expected-width="500"></div>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-005-ref.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-005-ref.html
new file mode 100644
index 0000000000..2f7e669c72
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-005-ref.html
@@ -0,0 +1,14 @@
+<!DOCTYPE html>
+<link rel="author" title="Google Inc." href="http://www.google.com/">
+<p>This test should not have a horizontal scrollbar</p>
+
+<div style="width: 400px; height: 100px; overflow-x: hidden; overflow-y: scroll;">
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+<br>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-005.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-005.html
new file mode 100644
index 0000000000..3199dfb9a6
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-005.html
@@ -0,0 +1,66 @@
+<!DOCTYPE html>
+<title>CSS Test: Absolutely positioned children of flexboxes</title>
+<link rel="author" title="Google Inc." href="http://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<link rel="match" href="position-absolute-005-ref.html">
+<meta name="assert" content="Checks that we correctly handle overflow: auto in
+abspos nodes in flexbox">
+
+<style>
+ body {
+ width: 400px;
+ height: 300px;
+ }
+
+ .flexbox {
+ display: flex;
+ }
+
+ .column {
+ flex-direction: column;
+ }
+
+ .flex11a {
+ flex: 1 1 auto;
+ }
+
+ .root {
+ height: 100px;
+ overflow-y: auto;
+ position: relative;
+ }
+
+ #abspos {
+ position: absolute;
+ left: 0;
+ right: 0;
+ top: 0;
+ height: 10px;
+ }
+</style>
+
+
+<p>This test should not have a horizontal scrollbar</p>
+
+<div class="flexbox column">
+ <div class="flexbox">
+ <div class="flex11a">
+ <div class="root">
+ <div>
+ <div>
+ <div id="history"></div>
+ <div id="abspos"></div>
+ </div>
+ </div>
+ </div>
+ </div>
+ </div>
+</div>
+
+<script>
+onload = function() {
+ var historyEl = document.getElementById('history');
+ historyEl.offsetWidth;
+ historyEl.innerText = '\n\n\n\n\n\n\n\n';
+};
+</script>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-006.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-006.html
new file mode 100644
index 0000000000..bc9bc2c0e1
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-006.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<title>abspos items</title>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square.xht">
+<link rel="bookmark" href="https://crbug.com/1066859">
+<meta name="assert" content="Flex sets correct static position for abspos item when containing block is grid." />
+
+<style>
+div {
+ height: 100px;
+ width: 100px;
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: grid; position: relative;">
+ <div style="display: flex; align-items: center; background: red">
+ <div style="position: absolute; background: green">
+ </div>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-007.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-007.html
new file mode 100644
index 0000000000..3f7106c102
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-007.html
@@ -0,0 +1,20 @@
+<!DOCTYPE html>
+<title>abspos items</title>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square.xht">
+<link rel="bookmark" href="https://crbug.com/1066859">
+<meta name="assert" content="Flex sets correct static position for abspos item when containing block is root element." />
+
+<style>
+div {
+ height: 100px;
+ width: 100px;
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: flex; align-items: center; background: red">
+ <div style="position: absolute; background: green">
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-008.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-008.html
new file mode 100644
index 0000000000..7a9f8b6dfe
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-008.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<title>abspos items</title>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square.xht">
+<link rel="bookmark" href="https://crbug.com/1066859">
+<meta name="assert" content="Flex sets correct static position for abspos item when containing block is grid and alignment is flex-end." />
+
+<style>
+div {
+ height: 100px;
+ width: 100px;
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: grid; position: relative;">
+ <div style="display: flex; align-items: flex-end; background: red">
+ <div style="position: absolute; background: green">
+ </div>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-009.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-009.html
new file mode 100644
index 0000000000..5751bea1b9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-009.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<title>abspos items</title>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square.xht">
+<link rel="bookmark" href="https://crbug.com/1066859">
+<meta name="assert" content="Flex sets correct static position for abspos item when containing block is grid and abspos item is also grid." />
+<style>
+div {
+ height: 100px;
+ width: 100px;
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: grid; position: relative;">
+ <div style="display: flex; align-items: center; background: red">
+ <div style="position: absolute; background: green; display: grid">
+ </div>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-010.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-010.html
new file mode 100644
index 0000000000..c59cc7d67d
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-010.html
@@ -0,0 +1,21 @@
+<!DOCTYPE html>
+<title>abspos items</title>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square.xht">
+<link rel="bookmark" href="https://crbug.com/1066859">
+<meta name="assert" content="Flex sets correct static position for grid abspos item when containg block is regular block flow." />
+<style>
+div {
+ height: 100px;
+ width: 100px;
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="position: relative;">
+ <div style="display: flex; align-items: center; background: red">
+ <div style="position: absolute; background: green; display: grid">
+ </div>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-011.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-011.html
new file mode 100644
index 0000000000..142cd4b416
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-011.html
@@ -0,0 +1,22 @@
+<!DOCTYPE html>
+<title>abspos items</title>
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<link rel="match" href="/css/reference/ref-filled-green-100px-square.xht">
+<link rel="bookmark" href="https://crbug.com/1066859">
+<meta name="assert" content="Flex sets correct static position for abspos item when containing block is grid and weird abspos edge is due to justify-content, not alignment." />
+
+<style>
+div {
+ height: 100px;
+ width: 100px;
+}
+</style>
+
+<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
+
+<div style="display: grid; position: relative;">
+ <div style="display: flex; justify-content: flex-end; background: red">
+ <div style="position: absolute; background: green">
+ </div>
+</div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-012.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-012.html
new file mode 100644
index 0000000000..4660674012
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-012.html
@@ -0,0 +1,116 @@
+<!DOCTYPE html>
+<html>
+<title>CSS Test: Absolutely positioned children of flexboxes</title>
+<link rel="author" title="Google Inc." href="http://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<meta name="assert" content="Checks that we correctly position abspos children in a number of writing modes and alignments when containing block is grid.">
+<style>
+
+.abspos {
+ height: 50px;
+ width: 50px;
+ background: lightblue;
+ position: absolute;
+ flex: none;
+}
+
+.grid {
+ display: grid;
+ position: relative;
+}
+
+.title {
+ margin-top: 1em;
+}
+
+.flexbox {
+ display: flex;
+ background-color: #aaa;
+ height: 100px;
+ width: 100px;
+}
+
+.horizontal-tb {
+ writing-mode: horizontal-tb;
+}
+.vertical-rl {
+ writing-mode: vertical-rl;
+}
+.vertical-lr {
+ writing-mode: vertical-lr;
+}
+
+.rtl {
+ direction: rtl;
+}
+.ltr {
+ direction: ltr;
+}
+
+.align-items-flex-start {
+ align-items: flex-start;
+}
+.align-items-flex-end {
+ align-items: flex-end;
+}
+.justify-content-flex-start {
+ justify-content: flex-start;
+}
+.justify-content-flex-end {
+ justify-content: flex-end;
+}
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.flexbox')">
+<div id=log></div>
+<script>
+
+var writingModes = ['horizontal-tb', 'vertical-rl', 'vertical-lr'];
+var directions = ['ltr', 'rtl'];
+var justifyContents = ['flex-start', 'flex-end'];
+var alignItems = ['flex-start', 'flex-end'];
+var flexDirections = ['row', 'column', 'row-reverse', 'column-reverse'];
+
+// These were harvested from Firefox 76.0b4.
+var x = [0, 0, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 50, 50, 0, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50];
+
+var y = [0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 0, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 50, 50, 0, 0, 0, 0, 50, 50, 50, 50, 0, 0];
+
+var test_number = 1;
+
+writingModes.forEach(function(flexWritingMode) {
+ flexDirections.forEach(function(flexDirection) {
+ directions.forEach(function(direction) {
+ justifyContents.forEach(function(justifyContent) {
+ alignItems.forEach(function(alignment) {
+ var flexboxClassName = flexWritingMode + ' ' + direction + ' ' + flexDirection + ' justify-content-' + justifyContent + ' align-items-' + alignment;
+ var title = document.createElement('div');
+ title.className = 'title';
+ title.innerHTML = flexboxClassName + " .flexbox " + (test_number++);
+ document.body.appendChild(title);
+
+ var flexbox = document.createElement('div');
+ flexbox.className = 'flexbox ' + flexboxClassName;
+
+ var child = document.createElement('div');
+ child.setAttribute('class', 'abspos');
+ child.setAttribute("data-offset-x", x.shift());
+ child.setAttribute("data-offset-y", y.shift());
+ flexbox.appendChild(child);
+
+ var relpos = document.createElement('div');
+ relpos.className = 'grid';
+ relpos.appendChild(flexbox);
+
+ document.body.appendChild(relpos);
+ })
+ })
+ })
+ })
+})
+
+</script>
+
+</body>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-013.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-013.html
new file mode 100644
index 0000000000..cdbdfcfbf7
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-013.html
@@ -0,0 +1,154 @@
+<!DOCTYPE html>
+<title>CSS Test: Absolutely positioned children of flexboxes</title>
+<link rel="author" title="Google Inc." href="http://www.google.com/">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<meta name="assert" content="Checks the abspos position of flex children in a number of writing modes, alignments, etc.">
+<style>
+.abspos {
+ height: 50px;
+ width: 50px;
+ background: lightblue;
+ position: absolute;
+ flex: none;
+}
+
+.relpos {
+ position: relative;
+}
+
+.title {
+ margin-top: 1em;
+}
+
+.flexbox {
+ display: flex;
+ background-color: #aaa;
+ height: 100px;
+ width: 100px;
+}
+
+.horizontal-tb {
+ writing-mode: horizontal-tb;
+}
+.vertical-rl {
+ writing-mode: vertical-rl;
+}
+.vertical-lr {
+ writing-mode: vertical-lr;
+}
+
+.rtl {
+ direction: rtl;
+}
+.ltr {
+ direction: ltr;
+}
+
+.align-items-flex-start {
+ align-items: flex-start;
+}
+.align-items-flex-end {
+ align-items: flex-end;
+}
+.align-items-stretch {
+ align-items: stretch;
+}
+.justify-content-flex-start {
+ justify-content: flex-start;
+}
+.justify-content-flex-end {
+ justify-content: flex-end;
+}
+
+.row {
+ flex-direction: row;
+}
+.row-reverse {
+ flex-direction: row-reverse;
+}
+.column {
+ flex-direction: column;
+}
+.column-reverse {
+ flex-direction: column-reverse;
+}
+
+.nowrap {
+ flex-wrap: nowrap;
+}
+.wrap {
+ flex-wrap: wrap;
+}
+.wrap-reverse {
+ flex-wrap: wrap-reverse;
+}
+
+</style>
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+<body onload="checkLayout('.flexbox')">
+<div id=log></div>
+<script>
+
+var writingModes = ['horizontal-tb', 'vertical-rl', 'vertical-lr'];
+var directions = ['ltr', 'rtl'];
+var justifyContents = ['flex-start', 'flex-end'];
+var alignItems = ['flex-start', 'flex-end', 'stretch'];
+var flexDirections = ['row', 'column', 'row-reverse', 'column-reverse'];
+var wraps = ['nowrap', 'wrap', 'wrap-reverse'];
+
+// These expected values were harvested from Chrome 85. Firefox 78b6 agrees
+// except when align-items:stretch and flex-wrap:wrap-reverse are both in
+// effect.
+// Chrome 83 and FF 78b6 agree with these values when the lone flex child is
+// position:static instead of position:absolute. That is evidence that these
+// values are all correct, because the position of a staticpos child is
+// specified to be identical to the abspos position when there are no other
+// children or specified offsets.
+var x = [0,0,0,50,50,50,50,50,50,0,0,0,0,50,0,0,50,0,50,0,50,50,0,50,50,50,50,0,0,0,0,0,0,50,50,50,0,50,0,0,50,0,50,0,50,50,0,50,0,0,0,50,50,50,50,50,50,0,0,0,0,50,0,0,50,0,50,0,50,50,0,50,50,50,50,0,0,0,0,0,0,50,50,50,0,50,0,0,50,0,50,0,50,50,0,50,0,0,0,50,50,50,50,50,50,0,0,0,50,0,50,50,0,50,0,50,0,0,50,0,50,50,50,0,0,0,0,0,0,50,50,50,50,0,50,50,0,50,0,50,0,0,50,0,50,0,50,50,0,50,50,0,50,50,0,50,50,50,50,0,0,0,50,50,50,0,0,0,50,0,50,50,0,50,50,0,50,50,0,50,0,0,0,50,50,50,0,0,0,50,50,50,50,0,50,50,0,50,50,0,50,50,0,50,50,50,50,0,0,0,50,50,50,0,0,0,50,0,50,50,0,50,50,0,50,50,0,50,0,0,0,50,50,50,0,0,0,50,50,50,0,50,0,0,50,0,0,50,0,0,50,0,50,50,50,0,0,0,50,50,50,0,0,0,0,50,0,0,50,0,0,50,0,0,50,0,0,0,0,50,50,50,0,0,0,50,50,50,0,50,0,0,50,0,0,50,0,0,50,0,0,0,0,50,50,50,0,0,0,50,50,50,0,50,0,0,50,0,0,50,0,0,50,0,50,50,50,0,0,0,50,50,50,0,0,0,0,50,0,0,50,0,0,50,0,0,50,0,0,0,0,50,50,50,0,0,0,50,50,50,0,50,0,0,50,0,0,50,0,0,50,0,50,50,50,0,0,0,50,50,50,0,0,0,50,0,50,50,0,50,50,0,50,50,0,50,0,0,0,50,50,50,0,0,0,50,50,50,50,0,50,50,0,50,50,0,50,50,0,50,50,50,50,0,0,0,50,50,50,0,0,0];
+
+var y = [0,50,0,0,50,0,0,50,0,0,50,0,0,0,0,50,50,50,0,0,0,50,50,50,0,50,0,0,50,0,0,50,0,0,50,0,50,50,50,0,0,0,50,50,50,0,0,0,0,50,0,0,50,0,0,50,0,0,50,0,0,0,0,50,50,50,0,0,0,50,50,50,0,50,0,0,50,0,0,50,0,0,50,0,50,50,50,0,0,0,50,50,50,0,0,0,50,0,50,50,0,50,50,0,50,50,0,50,0,0,0,50,50,50,0,0,0,50,50,50,50,0,50,50,0,50,50,0,50,50,0,50,50,50,50,0,0,0,50,50,50,0,0,0,0,0,0,50,50,50,50,50,50,0,0,0,0,50,0,0,50,0,50,0,50,50,0,50,50,50,50,0,0,0,0,0,0,50,50,50,0,50,0,0,50,0,50,0,50,50,0,50,0,0,0,50,50,50,50,50,50,0,0,0,0,50,0,0,50,0,50,0,50,50,0,50,50,50,50,0,0,0,0,0,0,50,50,50,0,50,0,0,50,0,50,0,50,50,0,50,0,0,0,50,50,50,50,50,50,0,0,0,50,0,50,50,0,50,0,50,0,0,50,0,50,50,50,0,0,0,0,0,0,50,50,50,50,0,50,50,0,50,0,50,0,0,50,0,0,0,0,50,50,50,50,50,50,0,0,0,0,50,0,0,50,0,50,0,50,50,0,50,50,50,50,0,0,0,0,0,0,50,50,50,0,50,0,0,50,0,50,0,50,50,0,50,0,0,0,50,50,50,50,50,50,0,0,0,0,50,0,0,50,0,50,0,50,50,0,50,50,50,50,0,0,0,0,0,0,50,50,50,0,50,0,0,50,0,50,0,50,50,0,50,0,0,0,50,50,50,50,50,50,0,0,0,50,0,50,50,0,50,0,50,0,0,50,0,50,50,50,0,0,0,0,0,0,50,50,50,50,0,50,50,0,50,0,50,0,0,50,0];
+
+var test_number = 1;
+
+writingModes.forEach(function(flexWritingMode) {
+ wraps.forEach(function(wrap) {
+ flexDirections.forEach(function(flexDirection) {
+ directions.forEach(function(direction) {
+ justifyContents.forEach(function(justifyContent) {
+ alignItems.forEach(function(alignment) {
+ var flexboxClassName = flexWritingMode + ' ' + direction + ' ' + flexDirection + ' justify-content-' + justifyContent + ' align-items-' + alignment + ' ' + wrap;
+ var title = document.createElement('div');
+ title.className = 'title';
+ title.innerHTML = flexboxClassName + " .flexbox " + (test_number++);
+ document.body.appendChild(title);
+
+ var flexbox = document.createElement('div');
+ flexbox.className = 'flexbox ' + flexboxClassName;
+
+ var child = document.createElement('div');
+ child.setAttribute('class', 'abspos');
+ child.setAttribute("data-offset-x", x.shift());
+ child.setAttribute("data-offset-y", y.shift());
+ flexbox.appendChild(child);
+
+ var relpos = document.createElement('div');
+ relpos.className = 'relpos';
+ relpos.appendChild(flexbox);
+
+ document.body.appendChild(relpos);
+ })
+ })
+ })
+ })
+ })
+})
+
+// Print the x,y offsets for pasting into above x,y arrays.
+absposes = document.querySelectorAll('.abspos')
+lefts = Array.from(absposes).map(x => x.offsetLeft)
+tops = Array.from(absposes).map(x => x.offsetTop)
+
+</script>
+</body>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-014.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-014.html
new file mode 100644
index 0000000000..f02a268007
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-014.html
@@ -0,0 +1,82 @@
+<!doctype html>
+<title>abspos flex children with top margins</title>
+<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.org">
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<link rel="bookmark" href="https://crbug.com/808750">
+<meta name="flags" content="dom">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+
+<style>
+.container {
+ display: flex;
+ background: lightgray;
+ width: 250px;
+ height: 48px;
+
+ /* Add some margin so that overflowing things don't stomp on each other: */
+ margin: 50px 10px;
+ float: left;
+ position: relative;
+}
+
+.contentBox {
+ position: absolute;
+ /* Margin-box is 100px tall (2px of border + 98px of content): */
+ border: 1px solid teal;
+ height: 98px;
+
+ width: 98px;
+ left: 20px;
+}
+.marginBox {
+ position: absolute;
+ /* Margin-box is 100px tall
+ (60px of margin-top + 2px of border + 38px of content): */
+ margin-top: 60px;
+ border: 1px solid orange;
+ height: 38px;
+
+ width: 100px;
+ left: 120px;
+}
+</style>
+<div class="container">
+ <div class="contentBox">
+ aaa
+ </div>
+ <div class="marginBox">
+ bbb
+ </div>
+</div>
+
+<div class="container" style="align-items: flex-end">
+ <div class="contentBox">
+ aaa
+ </div>
+ <div class="marginBox">
+ bbb
+ </div>
+</div>
+
+<div class="container" style="align-items: center">
+ <div class="contentBox">
+ aaa
+ </div>
+ <div class="marginBox">
+ bbb
+ </div>
+</div>
+<div id=log style="clear:both"></div>
+
+<script>
+test(function() {
+ var elements = document.querySelectorAll(".contentBox, .marginBox");
+ for (var i = 0; i < elements.length; i+=2) {
+ assert_equals(elements[i].getBoundingClientRect().bottom,
+ elements[i+1].getBoundingClientRect().bottom);
+ }
+}, "The bottom of each pair of boxes should be the same");
+</script>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-015.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-015.html
new file mode 100644
index 0000000000..1c0f3bc4c2
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-015.html
@@ -0,0 +1,19 @@
+<!doctype html>
+<title>abspos flex children with top margins</title>
+<link rel="author" title="Manuel Rego" href="mailto:rego@igalia.com">
+<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<link rel="bookmark" href="https://crbug.com/886592">
+<meta name="assert" content="Check abspos position of flex children with margins in justify-content: flex-end container.">
+
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script src="/resources/check-layout-th.js"></script>
+
+<div style="display: flex; width: 200px; height: 100px; justify-content: flex-end; border: solid thick; position: relative;">
+ <div style="background: cyan; margin: 20px; position: absolute; width: 30px; height: 40px;" data-offset-x="150" id="abspos"></div>
+</div>
+
+<script>
+checkLayout('#abspos');
+</script>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-containing-block-001-ref.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-containing-block-001-ref.html
new file mode 100644
index 0000000000..5f8bcaf539
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-containing-block-001-ref.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<title>CSS Test Reference</title>
+<meta charset="utf-8">
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<style>
+.parent {
+ position: fixed;
+ top: 0;
+ left: 0;
+ display: block;
+ width: 200px;
+ height: 200px;
+ background: yellow;
+}
+
+.child {
+ position: absolute;
+ left: 50px;
+ top: 50px;
+ width: 100px;
+ height: 100px;
+ background: green;
+}
+</style>
+<div class="parent"><div class="child"></div></div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-containing-block-001.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-containing-block-001.html
new file mode 100644
index 0000000000..1edfdb04ca
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-containing-block-001.html
@@ -0,0 +1,28 @@
+<!doctype html>
+<title>CSS Test: Absolutely positioned children of flex container with CSS align</title>
+<meta charset="utf-8">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1386654">
+<link rel="match" href="position-absolute-containing-block-001-ref.html">
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<style>
+.parent {
+ position: fixed;
+ top: 0;
+ left: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 200px;
+ height: 200px;
+ background: yellow;
+}
+
+.child {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background: green;
+}
+</style>
+<div class="parent"><div class="child"></div></div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-containing-block-002-ref.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-containing-block-002-ref.html
new file mode 100644
index 0000000000..90ee38856c
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-containing-block-002-ref.html
@@ -0,0 +1,25 @@
+<!doctype html>
+<title>CSS Test Reference</title>
+<meta charset="utf-8">
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<style>
+.parent {
+ position: fixed;
+ top: 0;
+ left: 0;
+ display: block;
+ width: 200px;
+ height: 200px;
+ background: yellow;
+}
+
+.child {
+ position: absolute;
+ left: 60px;
+ top: 60px;
+ width: 100px;
+ height: 100px;
+ background: green;
+}
+</style>
+<div class="parent"><div class="child"></div></div>
diff --git a/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-containing-block-002.html b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-containing-block-002.html
new file mode 100644
index 0000000000..aecbf0b4c9
--- /dev/null
+++ b/testing/web-platform/tests/css/css-flexbox/abspos/position-absolute-containing-block-002.html
@@ -0,0 +1,36 @@
+<!doctype html>
+<title>CSS Test: Absolutely positioned children of flex container with CSS align</title>
+<meta charset="utf-8">
+<link rel="help" href="https://drafts.csswg.org/css-flexbox/#abspos-items">
+<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1386654">
+<link rel="match" href="position-absolute-containing-block-002-ref.html">
+<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
+<style>
+.parent {
+ position: fixed;
+ top: 0;
+ left: 0;
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ width: 180px;
+ height: 180px;
+
+ /* Expand the background area to 200px, without touching the content-box,
+ which is what flex absolute children should be aligned relative to. */
+ border-top: 5px solid yellow;
+ padding-top: 15px;
+ border-left: 5px solid yellow;
+ padding-left: 15px;
+
+ background: yellow;
+}
+
+.child {
+ position: absolute;
+ width: 100px;
+ height: 100px;
+ background: green;
+}
+</style>
+<div class="parent"><div class="child"></div></div>