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