LibWeb: Stop zero-area children from causing scrollable overflow

This commit is contained in:
Psychpsyo 2024-11-23 12:41:29 +01:00 committed by Andreas Kling
parent efcaf991e6
commit 1d44df74f7
Notes: github-actions[bot] 2024-11-24 10:11:48 +00:00
37 changed files with 67 additions and 53 deletions

View file

@ -109,6 +109,10 @@ static CSSPixelRect measure_scrollable_overflow(Box const& box)
auto child_border_box = child.paintable_box()->absolute_border_box_rect();
// Border boxes with zero area do not affect the scrollable overflow area.
if (child_border_box.is_empty())
return TraversalDecision::Continue;
// NOTE: Here we check that the child is not wholly in the negative scrollable overflow region.
if (child_border_box.bottom() < 0 || child_border_box.right() < 0)
return TraversalDecision::Continue;

View file

@ -11,7 +11,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x150]
PaintableWithLines (BlockContainer<BODY>) [0,0 200x0] overflow: [0,0 200x150]
PaintableWithLines (BlockContainer<BODY>) [0,0 200x0] overflow: [0,100 150x50]
PaintableWithLines (BlockContainer<UL>) [0,0 200x0]
PaintableWithLines (BlockContainer<DIV>.red) [0,0 150x50]
PaintableWithLines (BlockContainer<DIV>.green) [0,50 150x50]

View file

@ -16,7 +16,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,25 784x229] overflow: [8,25 784x254]
PaintableWithLines (BlockContainer<BODY>) [8,25 784x229]
PaintableWithLines (BlockContainer<DIV>#foo) [33,25 102x102]
TextPaintable (TextNode<#text>)
PaintableWithLines (BlockContainer(anonymous)) [8,152 784x0]

View file

@ -35,7 +35,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x152] overflow: [8,8 784x168]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x152]
PaintableWithLines (BlockContainer(anonymous)) [8,8 784x17]
PaintableWithLines (InlineNode<SPAN>)
TextPaintable (TextNode<#text>)

View file

@ -88,7 +88,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,16 784x314] overflow: [8,16 784x330]
PaintableWithLines (BlockContainer<BODY>) [8,16 784x314]
PaintableWithLines (BlockContainer<DIV>) [8,16 784x149]
PaintableWithLines (BlockContainer<P>) [8,16 784x17]
PaintableWithLines (InlineNode(anonymous))

View file

@ -13,7 +13,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,20 784x22] overflow: [8,20 784x42]
PaintableWithLines (BlockContainer<BODY>) [8,20 784x22]
PaintableWithLines (BlockContainer<P>) [8,20 784x22]
PaintableWithLines (InlineNode<A>)
TextPaintable (TextNode<#text>)

View file

@ -13,7 +13,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,20 784x22] overflow: [8,20 784x42]
PaintableWithLines (BlockContainer<BODY>) [8,20 784x22]
PaintableWithLines (BlockContainer<P>) [8,20 784x22]
PaintableWithLines (InlineNode<A>)
TextPaintable (TextNode<#text>)

View file

@ -10,7 +10,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,16 784x17] overflow: [8,16 784x33]
PaintableWithLines (BlockContainer<BODY>) [8,16 784x17]
PaintableWithLines (BlockContainer<P>) [8,16 784x17]
TextPaintable (TextNode<#text>)
PaintableWithLines (BlockContainer(anonymous)) [8,49 784x0]

View file

@ -7,8 +7,8 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
TextNode <#text>
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 0x0] overflow: [8,8 120x300]
PaintableWithLines (BlockContainer<BODY>) [8,8 0x0] overflow: [8,8 120x300]
PaintableWithLines (BlockContainer<DIV>.min) [8,8 80x0] overflow: [8,8 120x300]
PaintableWithLines (BlockContainer<HTML>) [0,0 0x0]
PaintableWithLines (BlockContainer<BODY>) [8,8 0x0]
PaintableWithLines (BlockContainer<DIV>.min) [8,8 80x0]
PaintableWithLines (BlockContainer<DIV>.max) [8,8 100x0] overflow: [8,8 120x300]
PaintableWithLines (BlockContainer<DIV>.clamp) [8,8 120x300]

View file

@ -9,10 +9,10 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
TextNode <#text>
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 0x0] overflow: [8,8 160x0]
PaintableWithLines (BlockContainer<BODY>) [8,8 0x0] overflow: [8,8 160x0]
PaintableWithLines (BlockContainer<DIV>.pow) [8,8 80x0] overflow: [8,8 160x0]
PaintableWithLines (BlockContainer<DIV>.sqrt) [8,8 100x0] overflow: [8,8 160x0]
PaintableWithLines (BlockContainer<DIV>.hypot) [8,8 120x0] overflow: [8,8 160x0]
PaintableWithLines (BlockContainer<DIV>.log) [8,8 140x0] overflow: [8,8 160x0]
PaintableWithLines (BlockContainer<HTML>) [0,0 0x0]
PaintableWithLines (BlockContainer<BODY>) [8,8 0x0]
PaintableWithLines (BlockContainer<DIV>.pow) [8,8 80x0]
PaintableWithLines (BlockContainer<DIV>.sqrt) [8,8 100x0]
PaintableWithLines (BlockContainer<DIV>.hypot) [8,8 120x0]
PaintableWithLines (BlockContainer<DIV>.log) [8,8 140x0]
PaintableWithLines (BlockContainer<DIV>.exp) [8,8 160x0]

View file

@ -6,7 +6,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
TextNode <#text>
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 0x0] overflow: [8,8 100x0]
PaintableWithLines (BlockContainer<BODY>) [8,8 0x0] overflow: [8,8 100x0]
PaintableWithLines (BlockContainer<DIV>.pi) [8,8 80x0] overflow: [8,8 100x0]
PaintableWithLines (BlockContainer<HTML>) [0,0 0x0]
PaintableWithLines (BlockContainer<BODY>) [8,8 0x0]
PaintableWithLines (BlockContainer<DIV>.pi) [8,8 80x0]
PaintableWithLines (BlockContainer<DIV>.e) [8,8 100x0]

View file

@ -7,6 +7,6 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x0] overflow: [8,16 784x0]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x0]
PaintableWithLines (BlockContainer<DIV>) [8,8 784x0]
PaintableWithLines (BlockContainer(anonymous)) [8,16 784x0]

View file

@ -6,7 +6,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
TextNode <#text>
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 0x0] overflow: [8,8 100x0]
PaintableWithLines (BlockContainer<BODY>) [8,8 0x0] overflow: [8,8 100x0]
PaintableWithLines (BlockContainer<DIV>.abs) [8,8 80x0] overflow: [8,8 100x0]
PaintableWithLines (BlockContainer<HTML>) [0,0 0x0]
PaintableWithLines (BlockContainer<BODY>) [8,8 0x0]
PaintableWithLines (BlockContainer<DIV>.abs) [8,8 80x0]
PaintableWithLines (BlockContainer<DIV>.sign) [8,8 100x0]

View file

@ -7,8 +7,8 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
TextNode <#text>
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 0x0] overflow: [8,8 120x0]
PaintableWithLines (BlockContainer<BODY>) [8,8 0x0] overflow: [8,8 120x0]
PaintableWithLines (BlockContainer<DIV>.round) [8,8 80x0] overflow: [8,8 120x0]
PaintableWithLines (BlockContainer<DIV>.mod) [8,8 100x0] overflow: [8,8 120x0]
PaintableWithLines (BlockContainer<HTML>) [0,0 0x0]
PaintableWithLines (BlockContainer<BODY>) [8,8 0x0]
PaintableWithLines (BlockContainer<DIV>.round) [8,8 80x0]
PaintableWithLines (BlockContainer<DIV>.mod) [8,8 100x0]
PaintableWithLines (BlockContainer<DIV>.rem) [8,8 120x0]

View file

@ -86,7 +86,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600] overflow: [0,0 800x636]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x636]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x608] overflow: [8,8 784.484375x628]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x608] overflow: [8,8 784.484375x608]
PaintableWithLines (BlockContainer<DIV>) [8,8 784x137]
PaintableWithLines (BlockContainer(anonymous)) [8,8 784x17]
TextPaintable (TextNode<#text>)

View file

@ -22,7 +22,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,16 784x83] overflow: [8,16 784x99]
PaintableWithLines (BlockContainer<BODY>) [8,16 784x83]
PaintableWithLines (BlockContainer<P>) [8,16 784x17]
TextPaintable (TextNode<#text>)
PaintableWithLines (BlockContainer(anonymous)) [8,49 784x0]

View file

@ -5,8 +5,8 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
BlockContainer <div.green> at (8,-42) content-size 100x200 children: inline
TextNode <#text>
ViewportPaintable (Viewport<#document>) [0,0 800x600] overflow: [0,-42 800x642]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x16] overflow: [0,-42 800x200]
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x16]
PaintableBox (Box<BODY>) [8,8 784x0] overflow: [8,-42 100x200]
PaintableWithLines (BlockContainer<DIV>.abspos) [8,-42 100x100] overflow: [8,-42 100x200]
PaintableWithLines (BlockContainer<DIV>.green) [8,-42 100x200]

View file

@ -7,6 +7,6 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x0] overflow: [8,16 784x0]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x0]
PaintableWithLines (BlockContainer<DIV>) [8,8 784x0]
PaintableWithLines (BlockContainer(anonymous)) [8,16 784x0]

View file

@ -7,6 +7,6 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x0] overflow: [8,16 784x0]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x0]
PaintableWithLines (BlockContainer<DIV>) [8,8 784x0]
PaintableWithLines (BlockContainer(anonymous)) [8,16 784x0]

View file

@ -7,6 +7,6 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x0] overflow: [8,16 784x0]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x0]
PaintableWithLines (BlockContainer<DIV>) [8,8 784x0]
PaintableWithLines (BlockContainer(anonymous)) [8,16 784x0]

View file

@ -24,7 +24,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x537]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x521] overflow: [8,8 784x524]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x521]
PaintableBox (Box<DIV>.grid) [12,8 559x521]
PaintableWithLines (BlockContainer<DIV>) [18,117 200x150]
TextPaintable (TextNode<#text>)

View file

@ -102,7 +102,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x288]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x260] overflow: [8,8 784x280]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x260]
PaintableBox (Box<DIV>.grid.justify-start) [8,8 784x20]
PaintableWithLines (BlockContainer<DIV>) [8,8 60x20]
PaintableWithLines (BlockContainer<DIV>) [84,8 60x20]

View file

@ -7,6 +7,6 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x0] overflow: [8,16 784x0]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x0]
PaintableWithLines (BlockContainer<DIV>) [8,8 784x0]
PaintableWithLines (BlockContainer(anonymous)) [8,16 784x0]

View file

@ -7,6 +7,6 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x0] overflow: [8,16 784x0]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x0]
PaintableWithLines (BlockContainer<DIV>) [8,8 784x0]
PaintableWithLines (BlockContainer(anonymous)) [8,16 784x0]

View file

@ -24,9 +24,9 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
BlockContainer <(anonymous)> at (8,1048) content-size 784x0 children: inline
TextNode <#text>
ViewportPaintable (Viewport<#document>) [0,0 800x600] overflow: [0,0 800x1048]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x986] overflow: [0,0 800x1048]
PaintableWithLines (BlockContainer<BODY>) [8,70 784x908] overflow: [8,70 784x978]
ViewportPaintable (Viewport<#document>) [0,0 800x600] overflow: [0,0 800x986]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x986]
PaintableWithLines (BlockContainer<BODY>) [8,70 784x908]
PaintableWithLines (BlockContainer<P>.min-inline-test) [8,70 784x200]
TextPaintable (TextNode<#text>)
PaintableWithLines (BlockContainer(anonymous)) [8,340 784x76]

View file

@ -27,7 +27,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x259] overflow: [8,8 784x275]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x259]
PaintableWithLines (BlockContainer<FORM>) [8,8 784x259]
ImagePaintable (ImageBox<INPUT>) [8,216 48x48]
PaintableWithLines (BlockContainer(anonymous)) [8,8 784x0]

View file

@ -22,7 +22,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,16 784x83] overflow: [8,16 784x99]
PaintableWithLines (BlockContainer<BODY>) [8,16 784x83]
PaintableWithLines (BlockContainer<P>) [8,16 784x17]
TextPaintable (TextNode<#text>)
PaintableWithLines (BlockContainer(anonymous)) [8,49 784x0]

View file

@ -63,7 +63,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,16 784x135] overflow: [8,16 784x151]
PaintableWithLines (BlockContainer<BODY>) [8,16 784x135]
PaintableWithLines (BlockContainer<OL>) [8,16 784x51]
PaintableWithLines (BlockContainer(anonymous)) [48,16 744x0]
PaintableWithLines (ListItemBox<LI>) [48,16 744x17]

View file

@ -11,8 +11,8 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
TextNode <#text>
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x158] overflow: [0,0 800x175]
PaintableWithLines (BlockContainer<BODY>) [8,25 784x125] overflow: [8,25 784x150]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x158]
PaintableWithLines (BlockContainer<BODY>) [8,25 784x125]
PaintableWithLines (BlockContainer<DIV>.empty_content) [33,25 50x50]
PaintableWithLines (BlockContainer(anonymous)) [33,25 50x50]
PaintableWithLines (BlockContainer<DIV>.content_with_space) [33,100 50x50]

View file

@ -17,7 +17,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x600]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x34] overflow: [8,8 784x50]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x34]
PaintableWithLines (BlockContainer<FORM>#form) [8,8 784x34]
PaintableWithLines (BlockContainer<TEXTAREA>#textarea) [8,8 200x34]
PaintableWithLines (BlockContainer<DIV>) [11,11 194x17]

View file

@ -11,8 +11,8 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
TextNode <#text>
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x41] overflow: [0,0 800x49]
PaintableWithLines (BlockContainer<BODY>) [8,16 784x17] overflow: [8,16 784x33]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x41]
PaintableWithLines (BlockContainer<BODY>) [8,16 784x17]
PaintableWithLines (BlockContainer(anonymous)) [8,16 784x0]
PaintableWithLines (BlockContainer<P>) [8,16 784x17]
TextPaintable (TextNode<#text>)

View file

@ -6,7 +6,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
SVGSVGBox <svg> at (8,8) content-size 100x100 [SVG] children: not-inline
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x16] overflow: [0,0 800x108]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x0] overflow: [8,8 100x100]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x16]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x0]
PaintableWithLines (BlockContainer<DIV>) [8,8 10x0] overflow: [8,8 100x100]
SVGSVGPaintable (SVGSVGBox<svg>) [8,8 100x100]

View file

@ -7,7 +7,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
TextNode <#text>
ViewportPaintable (Viewport<#document>) [0,0 800x600]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x16] overflow: [0,0 800x108]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x0] overflow: [8,8 100x100]
PaintableWithLines (BlockContainer<HTML>) [0,0 800x16]
PaintableWithLines (BlockContainer<BODY>) [8,8 784x0]
PaintableWithLines (BlockContainer<DIV>) [8,8 0x0] overflow: [8,8 100x100]
SVGSVGPaintable (SVGSVGBox<svg>) [8,8 100x100]

View file

@ -0,0 +1 @@
<!-- This page is intentionally left blank. -->

View file

@ -0,0 +1,9 @@
<!DOCTYPE html>
<link rel="match" href="../expected/zero-area-child-creating-scrollable-overflow.html" />
<style>
div {
position: absolute;
top: 150vh;
}
</style>
<div></div>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 430 KiB

After

Width:  |  Height:  |  Size: 305 KiB