зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1561198 [wpt PR 17432] - LayoutNG: Fix sizing and position of abspos tables, a=testonly
Automatic update from web-platform-tests LayoutNG: Fix sizing and position of abspos tables LayoutBox::ContainingBlockLogicalHeightForPercentageResolution was adding padding but only for tables. NG already supplies padding so don't do this table exception if the containing block is NG. ng_absolute_utils relied on specified table width/height being the final say, but tables use those as another min size. This patch makes ng_absolute_utils treat table height/width as Auto for main sizing and uses it as another min-height/width. ResolveInlineLengthInternal assumes that anything with inline size Auto will expand to fill the available space, but tables do not. The 4-argument version of ComputeMinAndMaxContentContribution makes a similar assumption to ng_absolute_utils -- if a node has a width set, that's the final width. The 3-argument version of ComputeMinAndMaxContentContribution is aware of this so bypasses the 4-argument version for tables and instead uses legacy preferred width calculations, so I made ComputeMinAndMaxContentSizeForOutOfFlow do the same. The tests all at least partially failed in NG before this patch. After this patch, NG matches legacy everywhere, except for the first 2 cases of -002.html, which were broken in legacy and NG before this patch. It is now correct in NG. We partially fail 003 and 005, but identically to legacy layout. I added more checks to fast/table/absolute-table-percent-lengths.html and moved it to the wpt repository as css/css-tables/absolute-tables-001.html . Bug: 973390 Change-Id: I8cea275b2ca19492a501b84cd86456ed6745a4b8 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1671851 Commit-Queue: David Grogan <dgrogan@chromium.org> Reviewed-by: Morten Stenshorne <mstensho@chromium.org> Reviewed-by: Aleks Totic <atotic@chromium.org> Cr-Commit-Position: refs/heads/master@{#675142} -- wpt-commits: 8e3db7f3a765d1783f7e8c068c8bf90de61b1f66 wpt-pr: 17432
This commit is contained in:
Родитель
9e9ef7fbe3
Коммит
2c4e77d64d
|
@ -0,0 +1,90 @@
|
|||
<!doctype html>
|
||||
<script src='/resources/testharness.js'></script>
|
||||
<script src='/resources/testharnessreport.js'></script>
|
||||
<script src='/resources/check-layout-th.js'></script>
|
||||
<link rel="author" title="Anders Ruud" href="mailto:andruud@chromium.org">
|
||||
<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/CSS22/visudet.html#the-width-property" title="See Note in <percentage>">
|
||||
<meta name="flags" content="" />
|
||||
<meta name="assert" content="percent lengths of an abspos table are resolved against the padding box of the parent" />
|
||||
<style>
|
||||
main div {
|
||||
position: relative;
|
||||
border: 5px solid black;
|
||||
height: 60px;
|
||||
width: 60px;
|
||||
padding: 5px 7px 11px 13px;
|
||||
margin: 10px;
|
||||
}
|
||||
|
||||
.tbl {
|
||||
display: table;
|
||||
background-color: skyblue;
|
||||
position: absolute;
|
||||
width: 50%;
|
||||
height: 50%;
|
||||
}
|
||||
|
||||
.cell {
|
||||
display: table-cell;
|
||||
outline: 1px dashed blue;
|
||||
}
|
||||
|
||||
.topleft { left: 0; top: 0; }
|
||||
.topright { right: 0; top: 0; }
|
||||
.bottomright { right: 0; bottom: 0; }
|
||||
.bottomleft { left: 0; bottom: 0; }
|
||||
|
||||
.vertical { writing-mode: vertical-lr; }
|
||||
|
||||
</style>
|
||||
<p>Tests that percent lengths of an absolutely positioned table is resolved
|
||||
against the <em>padding box</em> of the parent.
|
||||
<hr>
|
||||
<output id="log"></output>
|
||||
<main>
|
||||
<div>
|
||||
<span class="tbl topleft" data-expected-client-width=40 data-expected-client-height=38 data-offset-x=0 data-offset-y=0>
|
||||
<span class="cell" data-expected-client-width=40 data-expected-client-height=38>abc</span>
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="tbl topright" data-expected-client-width=40 data-expected-client-height=38 data-offset-x=40 data-offset-y=0>
|
||||
<span class="cell" data-expected-client-width=40 data-expected-client-height=38>abc</span>
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="tbl bottomright" data-expected-client-width=40 data-expected-client-height=38 data-offset-x=40 data-offset-y=38>
|
||||
<span class="cell" data-expected-client-width=40 data-expected-client-height=38>abc</span>
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="tbl bottomleft" data-expected-client-width=40 data-expected-client-height=38 data-offset-x=0 data-offset-y=38>
|
||||
<span class="cell" data-expected-client-width=40 data-expected-client-height=38>abc</span>
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div class="vertical">
|
||||
<span class="tbl topleft" data-expected-client-width=40 data-expected-client-height=38 data-offset-x=0 data-offset-y=0>
|
||||
<span class="cell" data-expected-client-width=40 data-expected-client-height=38>abc</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="vertical">
|
||||
<span class="tbl topright" data-expected-client-width=40 data-expected-client-height=38 data-offset-x=40 data-offset-y=0>
|
||||
<span class="cell" data-expected-client-width=40 data-expected-client-height=38>abc</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="vertical">
|
||||
<span class="tbl bottomright" data-expected-client-width=40 data-expected-client-height=38 data-offset-x=40 data-offset-y=38>
|
||||
<span class="cell" data-expected-client-width=40 data-expected-client-height=38>abc</span>
|
||||
</span>
|
||||
</div>
|
||||
<div class="vertical">
|
||||
<span class="tbl bottomleft" data-expected-client-width=40 data-expected-client-height=38 data-offset-x=0 data-offset-y=38>
|
||||
<span class="cell" data-expected-client-width=40 data-expected-client-height=38>abc</span>
|
||||
</span>
|
||||
</div>
|
||||
</main>
|
||||
<script>
|
||||
checkLayout(".tbl");
|
||||
</script>
|
|
@ -0,0 +1,79 @@
|
|||
<!doctype html>
|
||||
<script src='/resources/testharness.js'></script>
|
||||
<script src='/resources/testharnessreport.js'></script>
|
||||
<script src='/resources/check-layout-th.js'></script>
|
||||
<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-tables-3/#used-width-of-table">
|
||||
<meta name="flags" content="" />
|
||||
<meta name="assert" content="When sizing and positioning abspos tables, the intrinsic width is obeyed when the intrinsic width is larger than specified width" />
|
||||
<style>
|
||||
.cb {
|
||||
position: relative;
|
||||
height: 200px;
|
||||
width: 200px;
|
||||
outline: 2px dashed lightblue;
|
||||
}
|
||||
|
||||
.table {
|
||||
background-color: orange;
|
||||
position: absolute;
|
||||
width: 50px;
|
||||
right: 0px;
|
||||
}
|
||||
|
||||
.cell {
|
||||
border: 1px solid green;
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.cell > div {
|
||||
width: 200px;
|
||||
}
|
||||
|
||||
.vertical { writing-mode: vertical-lr; }
|
||||
.horizontal { writing-mode: horizontal-tb; }
|
||||
</style>
|
||||
|
||||
<output id="log"></output>
|
||||
|
||||
<main>
|
||||
<div class="cb">
|
||||
<table class="table" data-expected-width=208 data-offset-x="-8">
|
||||
<tr>
|
||||
<td class="cell">
|
||||
<div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="cb vertical">
|
||||
<table class="table horizontal" data-expected-width=208 data-offset-x="-8">
|
||||
<tr>
|
||||
<td class="cell">
|
||||
<div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="cb">
|
||||
<table class="table vertical" data-expected-width=208 data-offset-x="-8">
|
||||
<tr>
|
||||
<td class="cell">
|
||||
<div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="cb vertical">
|
||||
<table class="table vertical" data-expected-width=208 data-offset-x="-8">
|
||||
<tr>
|
||||
<td class="cell">
|
||||
<div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</main>
|
||||
<script>
|
||||
checkLayout(".table");
|
||||
</script>
|
|
@ -0,0 +1,79 @@
|
|||
<!doctype html>
|
||||
<script src='/resources/testharness.js'></script>
|
||||
<script src='/resources/testharnessreport.js'></script>
|
||||
<script src='/resources/check-layout-th.js'></script>
|
||||
<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-tables-3/#used-width-of-table">
|
||||
<meta name="flags" content="" />
|
||||
<meta name="assert" content="When sizing and positioning abspos tables, the specified width is obeyed when the intrinsic width is smaller" />
|
||||
<style>
|
||||
.cb {
|
||||
position: relative;
|
||||
height: 200px;
|
||||
width: 200px;
|
||||
outline: 2px dashed lightblue;
|
||||
}
|
||||
|
||||
.table {
|
||||
background-color: orange;
|
||||
position: absolute;
|
||||
width: 50px;
|
||||
right: 0px;
|
||||
}
|
||||
|
||||
.cell {
|
||||
border: 1px solid green;
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.cell > div {
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
.vertical { writing-mode: vertical-lr; }
|
||||
.horizontal { writing-mode: horizontal-tb; }
|
||||
</style>
|
||||
|
||||
<output id="log"></output>
|
||||
|
||||
<main>
|
||||
<div class="cb">
|
||||
<table class="table" data-expected-width=50 data-offset-x="150">
|
||||
<tr>
|
||||
<td class="cell" data-expected-width=46>
|
||||
<div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="cb vertical">
|
||||
<table class="table horizontal" data-expected-width=50 data-offset-x="150">
|
||||
<tr>
|
||||
<td class="cell" data-expected-width=46>
|
||||
<div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="cb">
|
||||
<table class="table vertical" data-expected-width=50 data-offset-x="150">
|
||||
<tr>
|
||||
<td class="cell" data-expected-width=46>
|
||||
<div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="cb vertical">
|
||||
<table class="table vertical" data-expected-width=50 data-offset-x="150">
|
||||
<tr>
|
||||
<td class="cell" data-expected-width=46>
|
||||
<div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</main>
|
||||
<script>
|
||||
checkLayout(".table");
|
||||
</script>
|
|
@ -0,0 +1,79 @@
|
|||
<!doctype html>
|
||||
<script src='/resources/testharness.js'></script>
|
||||
<script src='/resources/testharnessreport.js'></script>
|
||||
<script src='/resources/check-layout-th.js'></script>
|
||||
<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-tables-3/#computing-the-table-height">
|
||||
<meta name="flags" content="" />
|
||||
<meta name="assert" content="When sizing and positioning abspos tables, the intrinsic height is obeyed when the intrinsic height is larger than specified height" />
|
||||
<style>
|
||||
.cb {
|
||||
position: relative;
|
||||
height: 200px;
|
||||
width: 200px;
|
||||
outline: 2px dashed lightblue;
|
||||
}
|
||||
|
||||
.table {
|
||||
background-color: orange;
|
||||
position: absolute;
|
||||
height: 50px;
|
||||
right: 0px;
|
||||
}
|
||||
|
||||
.cell {
|
||||
border: 1px solid green;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.cell > div {
|
||||
height: 200px;
|
||||
}
|
||||
|
||||
.vertical { writing-mode: vertical-lr; }
|
||||
.horizontal { writing-mode: horizontal-tb; }
|
||||
</style>
|
||||
|
||||
<output id="log"></output>
|
||||
|
||||
<main>
|
||||
<div class="cb">
|
||||
<table class="table" data-expected-width=8 data-expected-height=208 data-offset-x="192">
|
||||
<tr>
|
||||
<td class="cell">
|
||||
<div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="cb vertical">
|
||||
<table class="table horizontal" data-expected-width=8 data-expected-height=208 data-offset-x="192">
|
||||
<tr>
|
||||
<td class="cell">
|
||||
<div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="cb">
|
||||
<table class="table vertical" data-expected-width=8 data-expected-height=208 data-offset-x="192">
|
||||
<tr>
|
||||
<td class="cell">
|
||||
<div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="cb vertical">
|
||||
<table class="table vertical" data-expected-width=8 data-expected-height=208 data-offset-x="192">
|
||||
<tr>
|
||||
<td class="cell">
|
||||
<div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</main>
|
||||
<script>
|
||||
checkLayout(".table");
|
||||
</script>
|
|
@ -0,0 +1,79 @@
|
|||
<!doctype html>
|
||||
<script src='/resources/testharness.js'></script>
|
||||
<script src='/resources/testharnessreport.js'></script>
|
||||
<script src='/resources/check-layout-th.js'></script>
|
||||
<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
|
||||
<link rel="help" href="https://www.w3.org/TR/css-tables-3/#computing-the-table-height">
|
||||
<meta name="flags" content="" />
|
||||
<meta name="assert" content="When sizing and positioning abspos tables, the specified height is obeyed when the intrinsic height is smaller" />
|
||||
<style>
|
||||
.cb {
|
||||
position: relative;
|
||||
height: 200px;
|
||||
width: 200px;
|
||||
outline: 2px dashed lightblue;
|
||||
}
|
||||
|
||||
.table {
|
||||
background-color: orange;
|
||||
position: absolute;
|
||||
height: 50px;
|
||||
right: 0px;
|
||||
}
|
||||
|
||||
.cell {
|
||||
border: 1px solid green;
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
.cell > div {
|
||||
height: 20px;
|
||||
}
|
||||
|
||||
.vertical { writing-mode: vertical-lr; }
|
||||
.horizontal { writing-mode: horizontal-tb; }
|
||||
</style>
|
||||
|
||||
<output id="log"></output>
|
||||
|
||||
<main>
|
||||
<div class="cb">
|
||||
<table class="table" data-expected-width=8 data-expected-height=108 data-offset-x="192">
|
||||
<tr>
|
||||
<td class="cell">
|
||||
<div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="cb vertical">
|
||||
<table class="table horizontal" data-expected-width=8 data-expected-height=108 data-offset-x="192">
|
||||
<tr>
|
||||
<td class="cell">
|
||||
<div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="cb">
|
||||
<table class="table vertical" data-expected-width=8 data-expected-height=108 data-offset-x="192">
|
||||
<tr>
|
||||
<td class="cell">
|
||||
<div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div class="cb vertical">
|
||||
<table class="table vertical" data-expected-width=8 data-expected-height=108 data-offset-x="192">
|
||||
<tr>
|
||||
<td class="cell">
|
||||
<div></div>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</main>
|
||||
<script>
|
||||
checkLayout(".table");
|
||||
</script>
|
Загрузка…
Ссылка в новой задаче