Ver Fonte

LibWeb: Mark percentage heights as initially definite when appropriate

Percentage heights are now considered definite when their containing
block has a definite height. This makes profile pictures have geometry
on Twitter. (We still don't load the images themselves though.)
Andreas Kling há 2 anos atrás
pai
commit
13792e572c
1 ficheiros alterados com 8 adições e 6 exclusões
  1. 8 6
      Userland/Libraries/LibWeb/Layout/LayoutState.cpp

+ 8 - 6
Userland/Libraries/LibWeb/Layout/LayoutState.cpp

@@ -220,14 +220,16 @@ void LayoutState::UsedValues::set_node(NodeWithStyleAndBoxModelMetrics& node, Us
         }
 
         if (size.is_length() && size.length().is_calculated()) {
-            if (width && size.length().calculated_style_value()->contains_percentage() && containing_block_has_definite_size) {
+            if (size.length().calculated_style_value()->contains_percentage()) {
+                if (!containing_block_has_definite_size)
+                    return false;
                 auto& calc_value = *size.length().calculated_style_value();
-                auto containing_block_width_as_length = CSS::Length::make_px(containing_block_used_values->content_width());
-                resolved_definite_size = calc_value.resolve_length_percentage(node, containing_block_width_as_length).value_or(CSS::Length::make_auto()).to_px(node);
-                return false;
+                auto containing_block_size_as_length = width
+                    ? CSS::Length::make_px(containing_block_used_values->content_width())
+                    : CSS::Length::make_px(containing_block_used_values->content_height());
+                resolved_definite_size = calc_value.resolve_length_percentage(node, containing_block_size_as_length).value_or(CSS::Length::make_auto()).to_px(node);
+                return true;
             }
-            if (size.length().calculated_style_value()->contains_percentage())
-                return false;
             resolved_definite_size = size.length().to_px(node);
             return true;
         }