| <!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=""> |
| <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> |