Skip to content

Commit 70b5496

Browse files
kalenikaliaksandrawesomekling
authored andcommitted
LibWeb: Account for box-sizing in max-content contribution [GFC]
Use `calculate_inner_height()` and `calculate_inner_width()`, which account for box-sizing, to resolve the item's size in max-content contribution calculations.
1 parent e3cdead commit 70b5496

File tree

3 files changed

+41
-2
lines changed

3 files changed

+41
-2
lines changed

Libraries/LibWeb/Layout/GridFormattingContext.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2508,8 +2508,17 @@ CSSPixels GridFormattingContext::calculate_max_content_contribution(GridItem con
25082508
return min(result, maximum_size);
25092509
}
25102510

2511-
auto containing_block_size = containing_block_size_for_item(item, dimension);
2512-
auto result = item.add_margin_box_sizes(preferred_size.to_px(grid_container(), containing_block_size), dimension);
2511+
auto resolve_size = [&] {
2512+
auto available_width = AvailableSize::make_definite(containing_block_size_for_item(item, GridDimension::Column));
2513+
if (dimension == GridDimension::Row) {
2514+
auto available_height = AvailableSize::make_definite(containing_block_size_for_item(item, GridDimension::Row));
2515+
AvailableSpace item_available_space { available_width, available_height };
2516+
return calculate_inner_height(item.box, item_available_space, preferred_size);
2517+
}
2518+
return calculate_inner_width(item.box, available_width, preferred_size);
2519+
};
2520+
2521+
auto result = item.add_margin_box_sizes(resolve_size(), dimension);
25132522
return min(result, maximum_size);
25142523
}
25152524

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
Viewport <#document> at [0,0] [0+0+0 800 0+0+0] [0+0+0 600 0+0+0] children: not-inline
2+
BlockContainer <html> at [0,0] [0+0+0 800 0+0+0] [0+0+0 66 0+0+0] [BFC] children: not-inline
3+
BlockContainer <body> at [8,8] [8+0+0 784 0+0+8] [8+0+0 50 0+0+8] children: not-inline
4+
Box <div.container> at [8,8] [0+0+0 784 0+0+0] [0+0+0 50 0+0+0] [GFC] children: not-inline
5+
BlockContainer <div.item> at [18,18] [0+0+10 764 10+0+0] [0+0+10 30 10+0+0] [BFC] children: inline
6+
frag 0 from TextNode start: 0, length: 31, rect: [18,18 255.71875x18] baseline: 13.796875
7+
"There should be no red visible."
8+
TextNode <#text> (not painted)
9+
10+
ViewportPaintable (Viewport<#document>) [0,0 800x600]
11+
PaintableWithLines (BlockContainer<HTML>) [0,0 800x66]
12+
PaintableWithLines (BlockContainer<BODY>) [8,8 784x50]
13+
PaintableBox (Box<DIV>.container) [8,8 784x50]
14+
PaintableWithLines (BlockContainer<DIV>.item) [8,8 784x50]
15+
TextPaintable (TextNode<#text>)
16+
17+
SC for Viewport<#document> [0,0 800x600] [children: 1] (z-index: auto)
18+
SC for BlockContainer<HTML> [0,0 800x66] [children: 0] (z-index: auto)
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!doctype html><style>
2+
.container {
3+
display: grid;
4+
background: red;
5+
}
6+
.item {
7+
box-sizing: border-box;
8+
height: 50px;
9+
padding: 10px;
10+
background: lime;
11+
}
12+
</style><div class="container"><div class="item">There should be no red visible.</div></div>

0 commit comments

Comments
 (0)