| <!DOCTYPE html> |
| <title>CSS Position Absolute: table width/height</title> |
| <link rel="author" href="mailto:atotic@google.com"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <link rel="help" href="https://www.w3.org/TR/css-position-3/#abs-non-replaced-width"> |
| <meta name="assert" content="Table css width/height are different. Make sure absolute position respects the differences."> |
| <style> |
| |
| .container { |
| margin-bottom: 8px; |
| position: relative; |
| width: 300px; |
| height: 220px; |
| background: gray; |
| } |
| table { |
| position: absolute; |
| border: 10px solid green; |
| width: 100px; |
| height: 100px; |
| background: yellow; |
| right: 0; |
| bottom: 0; |
| padding: 10px; |
| border-spacing: 0 0; |
| } |
| .contentbox { |
| box-sizing: content-box; |
| width: 60px; |
| height: 60px; |
| } |
| td { |
| padding: 0; |
| } |
| |
| </style> |
| <p>Table css width/height are interpreted differently: they are the minimum width. Absolute positioning code should respect this.</p> |
| <div class="container"> |
| <table id="one"> |
| <td>t1</td> |
| </table> |
| </div> |
| <div class="container"> |
| <table id="two"> |
| <td><div style="width:160px;height:160px;background:orange">div makes cell larger.</div></td> |
| </table> |
| </div> |
| <div class="container"> |
| <table id="one-border" style="box-sizing: border-box"> |
| <td>t1</td> |
| </table> |
| </div> |
| <div class="container"> |
| <table id="two-border" style="box-sizing: border-box"> |
| <td><div style="width:160px;height:160px;background:orange">div makes cell larger.</div></td> |
| </table> |
| </div> |
| <div class="container"> |
| <table id="one-content" class="contentbox"> |
| <td>t1</td> |
| </table> |
| </div> |
| <div class="container"> |
| <table id="two-content" class="contentbox"> |
| <td><div style="width:160px;height:160px;background:orange">div makes cell larger.</div></td> |
| </table> |
| </div> |
| <script> |
| test(() => { |
| let t = document.getElementById("one"); |
| assert_equals(t.offsetWidth, 100); |
| assert_equals(t.offsetHeight, 100); |
| assert_equals(t.parentNode.offsetHeight, t.offsetTop + t.offsetHeight, "bottom position is 0"); |
| assert_equals(t.parentNode.offsetWidth, t.offsetLeft + t.offsetWidth, "right position is 0"); |
| }, 'table size is interpreted as border-box width by default'); |
| test(() => { |
| let t = document.getElementById("two"); |
| assert_equals(t.offsetWidth, 200); |
| assert_equals(t.offsetHeight, 200); |
| assert_equals(t.parentNode.offsetWidth, t.offsetLeft + t.offsetWidth, "right position is 0"); |
| assert_equals(t.parentNode.offsetHeight, t.offsetTop + t.offsetHeight, "bottom position is 0"); |
| }, 'table size is interpreted as minimum width'); |
| test(() => { |
| let t = document.getElementById("one-border"); |
| assert_equals(t.offsetWidth, 100); |
| assert_equals(t.offsetHeight, 100); |
| assert_equals(t.parentNode.offsetHeight, t.offsetTop + t.offsetHeight, "bottom position is 0"); |
| assert_equals(t.parentNode.offsetWidth, t.offsetLeft + t.offsetWidth, "right position is 0"); |
| }, 'table size border-box'); |
| test(() => { |
| let t = document.getElementById("two-border"); |
| assert_equals(t.offsetWidth, 200); |
| assert_equals(t.offsetHeight, 200); |
| assert_equals(t.parentNode.offsetWidth, t.offsetLeft + t.offsetWidth, "right position is 0"); |
| assert_equals(t.parentNode.offsetHeight, t.offsetTop + t.offsetHeight, "bottom position is 0"); |
| }, 'table size border-box interpreted as minimum width'); |
| test(() => { |
| let t = document.getElementById("one-content"); |
| assert_equals(t.offsetWidth, 100); |
| assert_equals(t.offsetHeight, 100); |
| assert_equals(t.parentNode.offsetHeight, t.offsetTop + t.offsetHeight, "bottom position is 0"); |
| assert_equals(t.parentNode.offsetWidth, t.offsetLeft + t.offsetWidth, "right position is 0"); |
| }, 'table size content-box'); |
| test(() => { |
| let t = document.getElementById("two-content"); |
| assert_equals(t.offsetWidth, 200); |
| assert_equals(t.offsetHeight, 200); |
| assert_equals(t.parentNode.offsetWidth, t.offsetLeft + t.offsetWidth, "right position is 0"); |
| assert_equals(t.parentNode.offsetHeight, t.offsetTop + t.offsetHeight, "bottom position is 0"); |
| }, 'table size content-box interpreted as minimum width'); |
| </script> |