haikuwebkit/LayoutTests/fast/css-grid-layout/positioned-grid-items-sizin...

65 lines
2.3 KiB
HTML
Raw Permalink Normal View History

[css-grid] Fix behavior of positioned items without specific dimensions https://bugs.webkit.org/show_bug.cgi?id=172117 Reviewed by Sergio Villar Senin. Source/WebCore: Currently positioned items that doesn't have specific dimensions are not properly sized. This patch fixes the issues with them. The patch removes the extraInline|BlockOffsets from RenderBox, so now RenderGrid is responsible of setting the location of the positioned item. This will be useful to add alignment support for positioned items later. It also removes grid specific logic from RenderBox. RenderBox::computeInlineStaticDistance() was modified too. The problem here was that the containing block of the positioned gird items is the grid area (and not the grid container). The method didn't know anything about grid, so it was using the grid container causing wrong values when resolving "auto" in both left and right offset properties. Note that after this patch we match Chrome and Firefox behavior on these cases. Test: fast/css-grid-layout/positioned-grid-items-sizing.html * rendering/RenderBox.cpp: (WebCore::RenderBox::willBeDestroyed): (WebCore::computeInlineStaticDistance): (WebCore::RenderBox::computePositionedLogicalWidth): (WebCore::RenderBox::computePositionedLogicalHeight): * rendering/RenderBox.h: * rendering/RenderGrid.cpp: (WebCore::RenderGrid::layoutPositionedObject): (WebCore::RenderGrid::offsetAndBreadthForPositionedChild): LayoutTests: * fast/css-grid-layout/positioned-grid-items-sizing-expected.html: Added. * fast/css-grid-layout/positioned-grid-items-sizing.html: Added. Canonical link: https://commits.webkit.org/189477@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@217411 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-05-25 10:06:45 +00:00
<!DOCTYPE html>
<link href="resources/grid.css" rel="stylesheet">
<style>
.grid {
grid: 25px 50px / 100px 60px;
margin: 1px 2px 3px 4px;
padding: 6px 3px 9px 12px;
border: solid;
border-width: 8px 2px 4px 6px;
font: 10px/1 Ahem;
float: left;
inline-size: 200px;
block-size: 100px;
justify-items: start;
align-items: start;
}
</style>
<p>This test checks that the sizing of positioned grid items without specific dimensions or offsets is equivalent to the size of regular items.</p>
<p>The test passes if it has the same output than the reference.</p>
<div class="grid">
<div class="onlyFirstRowOnlyFirstColumn">XXX XX X XX XXX</div>
<div class="onlyFirstRowOnlySecondColumn">XXX XX X XX XXX</div>
<div class="onlySecondRowOnlyFirstColumn">XXX XX X XX XXX</div>
<div class="onlySecondRowOnlySecondColumn">XXX XX X XX XXX</div>
</div>
<div class="grid directionRTL">
<div class="onlyFirstRowOnlyFirstColumn">XXX XX X XX XXX</div>
<div class="onlyFirstRowOnlySecondColumn">XXX XX X XX XXX</div>
<div class="onlySecondRowOnlyFirstColumn">XXX XX X XX XXX</div>
<div class="onlySecondRowOnlySecondColumn">XXX XX X XX XXX</div>
</div>
<div class="grid verticalLR">
<div class="onlyFirstRowOnlyFirstColumn">XXX XX X XX XXX</div>
<div class="onlyFirstRowOnlySecondColumn">XXX XX X XX XXX</div>
<div class="onlySecondRowOnlyFirstColumn">XXX XX X XX XXX</div>
<div class="onlySecondRowOnlySecondColumn">XXX XX X XX XXX</div>
</div>
<div class="grid verticalLR directionRTL">
<div class="onlyFirstRowOnlyFirstColumn">XXX XX X XX XXX</div>
<div class="onlyFirstRowOnlySecondColumn">XXX XX X XX XXX</div>
<div class="onlySecondRowOnlyFirstColumn">XXX XX X XX XXX</div>
<div class="onlySecondRowOnlySecondColumn">XXX XX X XX XXX</div>
</div>
<div class="grid verticalRL">
<div class="onlyFirstRowOnlyFirstColumn">XXX XX X XX XXX</div>
<div class="onlyFirstRowOnlySecondColumn">XXX XX X XX XXX</div>
<div class="onlySecondRowOnlyFirstColumn">XXX XX X XX XXX</div>
<div class="onlySecondRowOnlySecondColumn">XXX XX X XX XXX</div>
</div>
<div class="grid verticalRL directionRTL">
<div class="onlyFirstRowOnlyFirstColumn">XXX XX X XX XXX</div>
<div class="onlyFirstRowOnlySecondColumn">XXX XX X XX XXX</div>
<div class="onlySecondRowOnlyFirstColumn">XXX XX X XX XXX</div>
<div class="onlySecondRowOnlySecondColumn">XXX XX X XX XXX</div>
</div>