Prechádzať zdrojové kódy

LibWeb: Implement step 9.2.3 of the flexbox layout algorithm

When sizing the flex container under a min-content or a max-content
constraint, flex items with a used flex basis of "content" should be
sized under the same constraint.
Andreas Kling 3 rokov pred
rodič
commit
9cae06de09

+ 5 - 5
Userland/Libraries/LibWeb/Layout/FlexFormattingContext.cpp

@@ -599,11 +599,11 @@ void FlexFormattingContext::determine_flex_base_size_and_hypothetical_main_size(
         //    and the flex container is being sized under a min-content or max-content constraint
         //    (e.g. when performing automatic table layout [CSS21]), size the item under that constraint.
         //    The flex base size is the item’s resulting main size.
-        if (used_flex_basis.type == CSS::FlexBasis::Content
-            // FIXME: && sized under min-content or max-content constraints
-            && false) {
-            TODO();
-            // Size child_box under the constraints, flex_base_size is then the resulting main_size.
+        auto flex_container_main_size_constraint = is_row_layout() ? m_flex_container_state.width_constraint : m_flex_container_state.height_constraint;
+        if (used_flex_basis.type == CSS::FlexBasis::Content && flex_container_main_size_constraint != SizeConstraint::None) {
+            if (flex_container_main_size_constraint == SizeConstraint::MinContent)
+                return calculate_min_content_main_size(flex_item);
+            return calculate_max_content_main_size(flex_item);
         }
 
         // D. Otherwise, if the used flex basis is content or depends on its available space,