mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-09-20 16:28:54 +00:00
LibWeb: Correctly calculate grid item size while accommodating fr track
Implements text from grid layout specification. Improves layout on https://cal.com/
This commit is contained in:
parent
6d954b73f1
commit
e3aa3016bf
Notes:
github-actions[bot]
2025-08-06 20:43:08 +00:00
Author: https://github.com/kalenikaliaksandr
Commit: e3aa3016bf
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/5745
3 changed files with 40 additions and 2 deletions
|
@ -1038,6 +1038,7 @@ void GridFormattingContext::increase_sizes_to_accommodate_spanning_items_crossin
|
|||
void GridFormattingContext::increase_sizes_to_accommodate_spanning_items_crossing_flexible_tracks(GridDimension dimension)
|
||||
{
|
||||
auto& tracks = dimension == GridDimension::Column ? m_grid_columns : m_grid_rows;
|
||||
auto const& available_size = dimension == GridDimension::Column ? m_available_space->width : m_available_space->height;
|
||||
for (auto& item : m_grid_items) {
|
||||
Vector<GridTrack&> spanned_tracks;
|
||||
for_each_spanned_track_by_item(item, dimension, [&](GridTrack& track) {
|
||||
|
@ -1052,9 +1053,15 @@ void GridFormattingContext::increase_sizes_to_accommodate_spanning_items_crossin
|
|||
|
||||
// 1. For intrinsic minimums: First increase the base size of tracks with an intrinsic min track sizing
|
||||
// function by distributing extra space as needed to accommodate these items’ minimum contributions.
|
||||
auto item_minimum_contribution = calculate_minimum_contribution(item, dimension);
|
||||
auto item_size_contribution = [&] {
|
||||
// If the grid container is being sized under a min- or max-content constraint, use the items’ limited
|
||||
// min-content contributions in place of their minimum contributions here.
|
||||
if (available_size.is_intrinsic_sizing_constraint())
|
||||
return calculate_limited_min_content_contribution(item, dimension);
|
||||
return calculate_minimum_contribution(item, dimension);
|
||||
}();
|
||||
distribute_extra_space_across_spanned_tracks_base_size(dimension,
|
||||
item_minimum_contribution, SpaceDistributionPhase::AccommodateMinimumContribution, spanned_tracks, [&](GridTrack const& track) {
|
||||
item_size_contribution, SpaceDistributionPhase::AccommodateMinimumContribution, spanned_tracks, [&](GridTrack const& track) {
|
||||
return track.max_track_sizing_function.is_flexible_length();
|
||||
});
|
||||
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
Viewport <#document> at (0,0) content-size 800x600 children: not-inline
|
||||
BlockContainer <html> at (0,0) content-size 800x116 [BFC] children: not-inline
|
||||
Box <body> at (8,8) content-size 200x100 [GFC] children: not-inline
|
||||
BlockContainer <div.grid-item> at (8,8) content-size 200x100 [BFC] children: not-inline
|
||||
BlockContainer <div.orange-thing> at (8,8) content-size 100x100 children: not-inline
|
||||
|
||||
ViewportPaintable (Viewport<#document>) [0,0 800x600]
|
||||
PaintableWithLines (BlockContainer<HTML>) [0,0 800x116]
|
||||
PaintableBox (Box<BODY>) [8,8 200x100]
|
||||
PaintableWithLines (BlockContainer<DIV>.grid-item) [8,8 200x100]
|
||||
PaintableWithLines (BlockContainer<DIV>.orange-thing) [8,8 100x100]
|
||||
|
||||
SC for Viewport<#document> [0,0 800x600] [children: 1] (z-index: auto)
|
||||
SC for BlockContainer<HTML> [0,0 800x116] [children: 0] (z-index: auto)
|
|
@ -0,0 +1,17 @@
|
|||
<!doctype html><style>
|
||||
* { outline: 1px solid black; }
|
||||
html { background: white; }
|
||||
body {
|
||||
display: grid;
|
||||
grid-template-rows: minmax(0px, 1fr);
|
||||
width: 200px;
|
||||
height: min-content;
|
||||
background: pink;
|
||||
}
|
||||
.orange-thing {
|
||||
background: orange;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
</style>
|
||||
<body><div class="grid-item"><div class="orange-thing"></div></div>
|
Loading…
Add table
Add a link
Reference in a new issue