summaryrefslogtreecommitdiff
path: root/Userland/Libraries/LibWeb/Layout
diff options
context:
space:
mode:
authorAndreas Kling <kling@serenityos.org>2022-09-24 14:41:18 +0200
committerAndreas Kling <kling@serenityos.org>2022-09-24 14:41:18 +0200
commitc04b107e26175033af8a36855f9d3bed9756a734 (patch)
tree93d2bcd901389d46c190e584b5fb4b15bedd791c /Userland/Libraries/LibWeb/Layout
parenta5b72577e618df28684466460535878993839762 (diff)
downloadserenity-c04b107e26175033af8a36855f9d3bed9756a734.zip
LibWeb: Treat replaced % sizes as 0 if containing block is indefinite
Diffstat (limited to 'Userland/Libraries/LibWeb/Layout')
-rw-r--r--Userland/Libraries/LibWeb/Layout/FormattingContext.cpp11
1 files changed, 9 insertions, 2 deletions
diff --git a/Userland/Libraries/LibWeb/Layout/FormattingContext.cpp b/Userland/Libraries/LibWeb/Layout/FormattingContext.cpp
index 094755fbdb..4124d85347 100644
--- a/Userland/Libraries/LibWeb/Layout/FormattingContext.cpp
+++ b/Userland/Libraries/LibWeb/Layout/FormattingContext.cpp
@@ -361,8 +361,11 @@ float FormattingContext::compute_auto_height_for_block_formatting_context_root(L
// 10.3.2 Inline, replaced elements, https://www.w3.org/TR/CSS22/visudet.html#inline-replaced-width
float FormattingContext::tentative_width_for_replaced_element(LayoutState const& state, ReplacedBox const& box, CSS::LengthPercentage const& computed_width)
{
- auto const& containing_block = *box.containing_block();
- auto height_of_containing_block = CSS::Length::make_px(state.get(containing_block).content_height());
+ // Treat percentages of indefinite containing block widths as 0 (the initial width).
+ if (computed_width.is_percentage() && !state.get(*box.containing_block()).has_definite_width())
+ return 0;
+
+ auto height_of_containing_block = CSS::Length::make_px(containing_block_height_for(box, state));
auto computed_height = box.computed_values().height().resolved(box, height_of_containing_block).resolved(box);
float used_width = computed_width.resolved(box, CSS::Length::make_px(containing_block_width_for(box, state))).to_px(box);
@@ -463,6 +466,10 @@ float FormattingContext::compute_width_for_replaced_element(LayoutState const& s
// https://www.w3.org/TR/CSS22/visudet.html#inline-replaced-height
float FormattingContext::tentative_height_for_replaced_element(LayoutState const& state, ReplacedBox const& box, CSS::LengthPercentage const& computed_height)
{
+ // Treat percentages of indefinite containing block heights as 0 (the initial height).
+ if (computed_height.is_percentage() && !state.get(*box.containing_block()).has_definite_height())
+ return 0;
+
auto computed_width = box.computed_values().width();
// If 'height' and 'width' both have computed values of 'auto' and the element also has