blob: 5c1cf084753f0900095bae060f093a4b3740b1e8 [file] [log] [blame]
<!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>