mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2025-07-30 04:39:06 +00:00
LibWeb: Resolve not auto height before child box layout in BFC
It's possible to resolve box's height without doing inner layout, when computed value is not auto. Doing that fixes height resolution, when box with percentage height has containing block with percentage height. Before: - resolve used width - layout box's content - resolve height After: - resolve used width - resolve height if treated as not auto - layout box's content - resolve height if treated as auto
This commit is contained in:
parent
fdcece2e88
commit
9098e39a43
Notes:
github-actions[bot]
2024-09-27 18:26:33 +00:00
Author: https://github.com/kalenikaliaksandr
Commit: 9098e39a43
Pull-request: https://github.com/LadybirdBrowser/ladybird/pull/1553
5 changed files with 74 additions and 25 deletions
|
@ -177,16 +177,18 @@ void InlineFormattingContext::dimension_box_on_line(Box const& box, LayoutMode l
|
|||
|
||||
box_state.set_content_width(width);
|
||||
|
||||
parent().resolve_used_height_if_not_treated_as_auto(box, AvailableSpace(AvailableSize::make_definite(width), AvailableSize::make_indefinite()));
|
||||
|
||||
// NOTE: Flex containers with `auto` height are treated as `max-content`, so we can compute their height early.
|
||||
if (box_state.has_definite_height() || box.display().is_flex_inside())
|
||||
parent().compute_height(box, AvailableSpace(AvailableSize::make_definite(width), AvailableSize::make_indefinite()));
|
||||
parent().resolve_used_height_if_treated_as_auto(box, AvailableSpace(AvailableSize::make_definite(width), AvailableSize::make_indefinite()));
|
||||
|
||||
auto independent_formatting_context = layout_inside(box, layout_mode, box_state.available_inner_space_or_constraints_from(*m_available_space));
|
||||
|
||||
auto const& height_value = box.computed_values().height();
|
||||
if (should_treat_height_as_auto(box, *m_available_space)) {
|
||||
// FIXME: (10.6.6) If 'height' is 'auto', the height depends on the element's descendants per 10.6.7.
|
||||
parent().compute_height(box, AvailableSpace(AvailableSize::make_indefinite(), AvailableSize::make_indefinite()));
|
||||
parent().resolve_used_height_if_treated_as_auto(box, AvailableSpace(AvailableSize::make_indefinite(), AvailableSize::make_indefinite()));
|
||||
} else {
|
||||
auto inner_height = calculate_inner_height(box, AvailableSize::make_definite(m_containing_block_used_values.content_height()), height_value);
|
||||
box_state.set_content_height(inner_height);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue