mirror of
https://github.com/servo/servo.git
synced 2025-06-28 19:13:41 +01:00
160 lines
5.2 KiB
HTML
160 lines
5.2 KiB
HTML
<!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>
|