Parcourir la source

LibWeb: Try to compute height for abspos elements before inside layout

This can resolve height early in some cases, notably this kind of setup:

    position: absolute;
    top: 0px;
    bottom: 0px;

By resolving height before inside layout, descendants of the abspos
element can resolve automatic and relative vertical lengths against it.

This makes the Discord UI occupy the whole window instead of looking
"shrink-to-fit".
Andreas Kling il y a 2 ans
Parent
commit
8a87f4fa20
1 fichiers modifiés avec 6 ajouts et 0 suppressions
  1. 6 0
      Userland/Libraries/LibWeb/Layout/FormattingContext.cpp

+ 6 - 0
Userland/Libraries/LibWeb/Layout/FormattingContext.cpp

@@ -936,6 +936,12 @@ void FormattingContext::layout_absolutely_positioned_element(Box const& box, Ava
     auto specified_width = box.computed_values().width().resolved(box, width_of_containing_block_as_length).resolved(box);
     auto specified_width = box.computed_values().width().resolved(box, width_of_containing_block_as_length).resolved(box);
 
 
     compute_width_for_absolutely_positioned_element(box, available_space);
     compute_width_for_absolutely_positioned_element(box, available_space);
+
+    // NOTE: We compute height before *and* after doing inside layout.
+    //       This is done so that inside layout can resolve percentage heights.
+    //       In a situation like
+    compute_height_for_absolutely_positioned_element(box, available_space);
+
     auto independent_formatting_context = layout_inside(box, LayoutMode::Normal, box_state.available_inner_space_or_constraints_from(available_space));
     auto independent_formatting_context = layout_inside(box, LayoutMode::Normal, box_state.available_inner_space_or_constraints_from(available_space));
     compute_height_for_absolutely_positioned_element(box, available_space);
     compute_height_for_absolutely_positioned_element(box, available_space);