LibWeb: Align to padding edge only auto positioned abspos grid items

Containing block for abspos grid items depends on their grid placement:
- if element has definite grid position, then corresponding grid area
  should be used as a containing block
- if element does not have definite grid position, then padding edge of
  grid container should be used as a containing block

So offset should be adjusted for paddings only for boxes without
definite grid position.
This commit is contained in:
Aliaksandr Kalenik 2024-09-21 19:31:27 +02:00 committed by Andreas Kling
commit 19afc5b11b
Notes: github-actions[bot] 2024-09-21 18:11:49 +00:00
3 changed files with 61 additions and 3 deletions

View file

@ -0,0 +1,21 @@
Viewport <#document> at (0,0) content-size 800x600 children: not-inline
BlockContainer <html> at (1,1) content-size 798x220 [BFC] children: not-inline
BlockContainer <body> at (10,10) content-size 780x202 children: not-inline
Box <div.grid> at (11,111) content-size 200x100 positioned [GFC] children: not-inline
BlockContainer <div.abspos-item-with-grid-area> at (12,112) content-size 50x50 positioned [BFC] children: inline
frag 0 from TextNode start: 0, length: 1, rect: [12,112 14.265625x17] baseline: 13.296875
"A"
TextNode <#text>
BlockContainer <div.abspos-item-with-auto-placement> at (12,12) content-size 50x50 positioned [BFC] children: inline
frag 0 from TextNode start: 0, length: 1, rect: [12,12 9.34375x17] baseline: 13.296875
"B"
TextNode <#text>
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x222]
PaintableWithLines (BlockContainer<BODY>) [9,9 782x204]
PaintableBox (Box<DIV>.grid) [10,10 202x202]
PaintableWithLines (BlockContainer<DIV>.abspos-item-with-grid-area) [11,111 52x52]
TextPaintable (TextNode<#text>)
PaintableWithLines (BlockContainer<DIV>.abspos-item-with-auto-placement) [11,11 52x52]
TextPaintable (TextNode<#text>)

View file

@ -0,0 +1,32 @@
<!DOCTYPE html><style>
* {
border: 1px solid black;
}
.grid {
display: grid;
grid-template-columns: 100px 100px;
grid-template-areas: "a b";
position: relative;
width: 200px;
height: 100px;
padding-top: 100px;
}
.abspos-item-with-grid-area {
position: absolute;
top: 0;
left: 0;
width: 50px;
height: 50px;
grid-area: a;
}
.abspos-item-with-auto-placement {
position: absolute;
top: 0;
left: 0;
width: 50px;
height: 50px;
}
</style><div class="grid"><div class="abspos-item-with-grid-area">A</div><div class="abspos-item-with-auto-placement">B</div></div>