From 75025aee4c7fea5b70d96b284f6f06861d58c9a1 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Fri, 7 Aug 2026 16:41:01 +0200 Subject: [PATCH 1/4] LibWeb: Resolve relative-position insets before placing the box MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Block-level boxes and grid items had their relative-position insets resolved by compute_inset() immediately after place_child(), so the inset fields of an already-placed box kept changing after placement. Every other caller (floats, flex items, inline-level boxes) already resolves insets before its boxes are placed, and nothing reads the insets between the two points, so the late resolution was invisible — but it blocks the placement-seal invariant where a placed box's committed metrics are final. Hoist the compute_inset() call above the placement in layout_block_level_box() and in the grid item placement loop. The call's inputs (style insets, the containing block's content sizes, the definiteness walk for percentage insets) are untouched by the statements it crosses in both functions, so committed geometry is unchanged, in measurement passes as well as committing ones. --- .../src/layout/block_formatting_context.rs | 19 ++++++++++--------- .../src/layout/grid_formatting_context.rs | 4 +++- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/Libraries/LibWeb/Rust/src/layout/block_formatting_context.rs b/Libraries/LibWeb/Rust/src/layout/block_formatting_context.rs index e7cf2fb4c8b47..25bed44e579fd 100644 --- a/Libraries/LibWeb/Rust/src/layout/block_formatting_context.rs +++ b/Libraries/LibWeb/Rust/src/layout/block_formatting_context.rs @@ -1864,6 +1864,16 @@ impl<'pass> BlockFormattingContext<'pass> { ); } + let block_container_used = self.used(block_container); + self.compute_inset( + run, + node, + LogicalSize { + inline_size: block_container_used.content_inline_size.get(), + block_size: block_container_used.content_block_size.get(), + }, + ); + if let Some(position) = pending_position { self.place_child(node, position); } @@ -1887,15 +1897,6 @@ impl<'pass> BlockFormattingContext<'pass> { .add_margin(self.used(node).margin_bottom.get()); self.margin_state.borrow_mut().update_open_top_margin_group(); - let block_container_used = self.used(block_container); - self.compute_inset( - run, - node, - LogicalSize { - inline_size: block_container_used.content_inline_size.get(), - block_size: block_container_used.content_block_size.get(), - }, - ); let used = self.used(node); *bottom_of_lowest_margin_box = (*bottom_of_lowest_margin_box) .max(used.content_offset.get().y + used.content_block_size.get() + used.margin_box_bottom(false)); diff --git a/Libraries/LibWeb/Rust/src/layout/grid_formatting_context.rs b/Libraries/LibWeb/Rust/src/layout/grid_formatting_context.rs index 6dbd18ddeecfe..7a4f83fe45f27 100644 --- a/Libraries/LibWeb/Rust/src/layout/grid_formatting_context.rs +++ b/Libraries/LibWeb/Rust/src/layout/grid_formatting_context.rs @@ -3448,7 +3448,8 @@ impl<'pass> GridFormattingContext<'pass> { x: area.offset.inline_offset + self.item_margin_box_start(item, Axis::Column), y: area.offset.block_offset + self.item_margin_box_start(item, Axis::Row), }; - crate::layout::place_child(self.state, &self.callbacks, item.box_, offset); + // Resolve relative-position insets before placement seals the + // item's committed metrics. crate::layout::compute_inset_native( self.state, self.callbacks, @@ -3458,6 +3459,7 @@ impl<'pass> GridFormattingContext<'pass> { self.grid_container, run.treat_block_axis_percentage_insets_as_auto_beyond_root, ); + crate::layout::place_child(self.state, &self.callbacks, item.box_, offset); } self.derived_baselines_of_root_box = crate::layout::derive_baselines(self.state, &self.callbacks, self.grid_container, false); From 24bd079efedff2dd2d59f7b83ec5ddbc9d3fc9a5 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Fri, 7 Aug 2026 16:45:30 +0200 Subject: [PATCH 2/4] LibWeb: Record a block-in-inline's line coordinate before placing it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A block-level box that interrupts an inline formatting context gets a line box of its own, and append_block_level_box() recorded that containing-line-box coordinate on the box after its placement, so the coordinate settled after the box was already placed. Commit is the only reader, so the late write was invisible today — but it blocks the placement-seal invariant where a placed box's committed metrics are final. The box's used values do not exist yet when the interrupting-block wrapper starts, so the writes cannot simply move there. Instead the wrapper reserves the line index up front (the freshly begun line the box will occupy), threads the full coordinate into layout_block_level_box(), which records it right before place_child(), and passes the same index into append_block_level_box(), which now asserts it matches the line it appends to instead of re-deriving and writing it. The reserved index always equals the previously derived one: the last line always exists and is fragment-empty at the wrapper's entry, and nothing during the block's own layout can mutate the outer containing block's line boxes. --- .../src/layout/block_formatting_context.rs | 27 ++++++++++++++++--- .../LibWeb/Rust/src/layout/line_builder.rs | 23 ++++++++++------ 2 files changed, 38 insertions(+), 12 deletions(-) diff --git a/Libraries/LibWeb/Rust/src/layout/block_formatting_context.rs b/Libraries/LibWeb/Rust/src/layout/block_formatting_context.rs index 25bed44e579fd..1d1c3473e9839 100644 --- a/Libraries/LibWeb/Rust/src/layout/block_formatting_context.rs +++ b/Libraries/LibWeb/Rust/src/layout/block_formatting_context.rs @@ -1518,6 +1518,7 @@ impl<'pass> BlockFormattingContext<'pass> { block_container: Node, bottom_of_lowest_margin_box: &mut CssPixels, input: LayoutInput, + containing_line_box_fragment: Option, ) { let available_space = input.available_space; let facts = self.facts(node); @@ -1875,6 +1876,11 @@ impl<'pass> BlockFormattingContext<'pass> { ); if let Some(position) = pending_position { + if let Some(coordinate) = containing_line_box_fragment { + let used = self.used_mut(node); + used.has_containing_line_box_fragment.set(true); + used.containing_line_box_fragment.set(coordinate); + } self.place_child(node, position); } @@ -1927,6 +1933,7 @@ impl<'pass> BlockFormattingContext<'pass> { block_container, &mut bottom_of_lowest_margin_box, child_input, + None, ); } self.block_offset_of_current_block_container.set(saved); @@ -1963,7 +1970,7 @@ impl<'pass> BlockFormattingContext<'pass> { } else { caption_input }; - self.layout_block_level_box(run, child, wrapper, &mut bottom_of_lowest_margin_box, child_input); + self.layout_block_level_box(run, child, wrapper, &mut bottom_of_lowest_margin_box, child_input, None); } self.block_offset_of_current_block_container.set(saved); self.finish_block_level_children_layout(wrapper, input, available_space_for_children, bottom_of_lowest_margin_box); @@ -2027,7 +2034,7 @@ impl<'pass> BlockFormattingContext<'pass> { .block_offset_of_current_block_container .replace(Some(CssPixels::default())); let mut dummy_bottom = CssPixels::default(); - self.layout_block_level_box(run, legend, fieldset, &mut dummy_bottom, child_input); + self.layout_block_level_box(run, legend, fieldset, &mut dummy_bottom, child_input, None); self.block_offset_of_current_block_container.set(saved); } @@ -2059,7 +2066,7 @@ impl<'pass> BlockFormattingContext<'pass> { let saved = self.block_offset_of_current_block_container.replace(Some(extra_top)); for child in self.children(fieldset) { if child != legend { - self.layout_block_level_box(run, child, fieldset, &mut bottom_of_lowest_margin_box, child_input); + self.layout_block_level_box(run, child, fieldset, &mut bottom_of_lowest_margin_box, child_input, None); } } self.block_offset_of_current_block_container.set(saved); @@ -2269,12 +2276,23 @@ impl<'pass> BlockFormattingContext<'pass> { input: LayoutInput, line_builder: &mut LineBuilder<'_, '_, '_>, ) { + let line_index = line_builder.line_index_for_block_level_box(); let current_block_offset = line_builder.current_block_offset(); let saved = self .block_offset_of_current_block_container .replace(Some(current_block_offset)); let mut dummy_bottom = CssPixels::default(); - self.layout_block_level_box(run, node, containing_block, &mut dummy_bottom, input); + self.layout_block_level_box( + run, + node, + containing_block, + &mut dummy_bottom, + input, + Some(LineBoxFragmentCoordinate { + line_box_index: line_index, + fragment_index: 0, + }), + ); // SAFETY: The builder remains live and no reference escaped. let block_bottom = self .block_offset_of_current_block_container @@ -2283,6 +2301,7 @@ impl<'pass> BlockFormattingContext<'pass> { self.block_offset_of_current_block_container.set(saved); line_builder.append_block_level_box( node, + line_index, block_bottom, self.margin_state.borrow().current_collapsed_margin(), ); diff --git a/Libraries/LibWeb/Rust/src/layout/line_builder.rs b/Libraries/LibWeb/Rust/src/layout/line_builder.rs index 3ce36b510f8b6..b6a617d4c025e 100644 --- a/Libraries/LibWeb/Rust/src/layout/line_builder.rs +++ b/Libraries/LibWeb/Rust/src/layout/line_builder.rs @@ -339,7 +339,19 @@ impl<'builder, 'context, 'pass> LineBuilder<'builder, 'context, 'pass> { self.begin_new_line(true, true, ForcedBreak::No); } - pub(crate) fn append_block_level_box(&mut self, node: Node, block_end: CssPixels, block_end_margin: CssPixels) { + pub(crate) fn line_index_for_block_level_box(&mut self) -> usize { + let line_index = self.ensure_last_line_index(); + assert!(self.line(line_index).fragments.is_empty()); + line_index + } + + pub(crate) fn append_block_level_box( + &mut self, + node: Node, + line_index: usize, + block_end: CssPixels, + block_end_margin: CssPixels, + ) { let used = self.context().used(node); assert!(used.has_content_offset.get()); let (inline_offset, block_offset) = to_logical( @@ -359,7 +371,8 @@ impl<'builder, 'context, 'pass> LineBuilder<'builder, 'context, 'pass> { used.margin_box_block_size(false), ) .0; - let line_index = self.ensure_last_line_index(); + let ensured_line_index = self.ensure_last_line_index(); + assert_eq!(line_index, ensured_line_index); assert!(self.line(line_index).fragments.is_empty()); let fragment = LineBoxFragmentData::new( node, @@ -391,12 +404,6 @@ impl<'builder, 'context, 'pass> LineBuilder<'builder, 'context, 'pass> { marker.block_offset += current_block_offset; } } - let used = self.context().used_mut(node); - used.has_containing_line_box_fragment.set(true); - used.containing_line_box_fragment.set(LineBoxFragmentCoordinate { - line_box_index: line_index, - fragment_index: 0, - }); self.pending_margin_follows_block_level_box = true; self.current_block_offset = block_end; self.max_block_size_on_current_line = CssPixels::default(); From 2b1dd1cfece826c5db10a807db3ca07500ca49f0 Mon Sep 17 00:00:00 2001 From: Aliaksandr Kalenik Date: Fri, 7 Aug 2026 17:20:02 +0200 Subject: [PATCH 3/4] LibWeb: Stop attributing a run's trailing collapsed margin to a child MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A BFC run whose margin state ended nonzero used to overwrite the committed margin_bottom of its last real in-flow child with the run's trailing collapsed margin: an aggregate folding in the margins of every trailing collapse-through sibling and, through nested runs, of descendants' trailing margins. The aggregate only exists at run end, so the overwrite mutated a box that was already placed — the one committed metric that settled after placement — and the root's baselines had to be re-derived afterwards because the write moved that child's margin box. The trailing collapsed margin is now run output, stored on the formatting context together with the child it hangs below, and consumed only by the root's automatic block size, which still extends to the same bottom margin edge as before, so geometry is unchanged everywhere. Committed metrics and baseline derivation read the box's own margins, and the run-tail baseline re-derivation is gone. Observably, the last child of such a run now reports its own used margin-bottom, matching other engines, instead of the aggregate: 46 test expectations change, every one only in a box's reported margin-bottom (45 layout dumps and one getComputedStyle listing); no offset, size, or reference test changes. --- .../src/layout/block_formatting_context.rs | 24 ++++++++++++++----- ...-containing-block-first-last-line-rule.txt | 2 +- .../box-with-clearance-and-margin-top.txt | 2 +- ...-clear-by-line-break-followed-by-block.txt | 2 +- ...oat-vertical-offset-by-preceding-float.txt | 2 +- ...ed-break-stops-non-whitespace-sequence.txt | 2 +- .../intrinsic-sizing-stress-test.txt | 2 +- .../list-markers-intruded-by-float.txt | 2 +- .../block-and-inline/margin-collapse-1.txt | 2 +- .../relpos-inline-element-js-offsets.txt | 2 +- Tests/LibWeb/Layout/expected/block-size.txt | 2 +- .../Layout/expected/css-counters/basic.txt | 2 +- .../expected/css-counters/hidden-elements.txt | 2 +- .../expected/css-namespace-rule-matches.txt | 2 +- .../expected/css-namespace-rule-no-match.txt | 2 +- .../expected/css-text-transform-math-auto.txt | 2 +- .../css/content-for-marker-in-list.txt | 2 +- Tests/LibWeb/Layout/expected/div_align.txt | 2 +- .../document-write-incomplete-tag.txt | 2 +- .../Layout/expected/empty-list-items.txt | 2 +- .../expected/fieldset-legend-variations.txt | 2 +- .../flex/list-container-display-contents.txt | 2 +- .../expected/grid/justify-content-cols.txt | 2 +- .../expected/import-after-namespace.txt | 2 +- ...flex-baseline-with-wrapped-hidden-text.txt | 2 +- Tests/LibWeb/Layout/expected/inline-size.txt | 2 +- .../inside-list-item-content-offset.txt | 2 +- .../inline-element-position-change.txt | 2 +- .../transform-longhands-clear.txt | 2 +- .../Layout/expected/leading-metrics.txt | 2 +- .../list-item-marker-content-height.txt | 2 +- .../Layout/expected/list-marker-rtl.txt | 2 +- .../misc/invalid-slotted-selector.txt | 2 +- .../expected/multi-code-point-graphemes.txt | 2 +- .../ol-render-deep-hybrid-list-item-list.txt | 2 +- .../Layout/expected/ol-render-item-values.txt | 2 +- .../expected/ol-render-style-list-item.txt | 2 +- Tests/LibWeb/Layout/expected/ordered-list.txt | 2 +- Tests/LibWeb/Layout/expected/pdf-viewer.txt | 2 +- .../position-empty-pseudo-elements.txt | 2 +- .../quirks/input-in-pre-quirks-mode.txt | 2 +- .../expected/set-margin-of-floating-box.txt | 2 +- .../expected/table-caption-auto-height.txt | 2 +- .../table/table-align-center-with-margin.txt | 2 +- Tests/LibWeb/Layout/expected/ul-render.txt | 2 +- ...-be-xhtml-file-should-decode-correctly.txt | 2 +- .../css/getComputedStyle-print-all.txt | 4 ++-- 47 files changed, 65 insertions(+), 53 deletions(-) diff --git a/Libraries/LibWeb/Rust/src/layout/block_formatting_context.rs b/Libraries/LibWeb/Rust/src/layout/block_formatting_context.rs index 1d1c3473e9839..eda113a5009e5 100644 --- a/Libraries/LibWeb/Rust/src/layout/block_formatting_context.rs +++ b/Libraries/LibWeb/Rust/src/layout/block_formatting_context.rs @@ -195,6 +195,7 @@ pub(crate) struct BlockFormattingContext<'pass> { lowest_right_margin_edge: Cell, lowest_floating_descendant_bottom_margin_edge: Cell>, derived_baselines_of_root_box: Cell, + trailing_collapsed_margin: Cell>, } impl<'pass> BlockFormattingContext<'pass> { @@ -213,6 +214,7 @@ impl<'pass> BlockFormattingContext<'pass> { lowest_right_margin_edge: Cell::new(CssPixels::default()), lowest_floating_descendant_bottom_margin_edge: Cell::new(None), derived_baselines_of_root_box: Cell::new(DerivedBaselines::default()), + trailing_collapsed_margin: Cell::new(None), } } @@ -2204,7 +2206,10 @@ impl<'pass> BlockFormattingContext<'pass> { return; } - // Assign collapsed margin left after children layout of formatting context to the last child box + // The run's trailing collapsed margin hangs below the last real in-flow child, but it + // aggregates margins of trailing collapse-through siblings laid out after that child was + // placed. It is run output, not a property of that child: the child keeps its own placed + // margin_bottom, and only the root's automatic block size consumes the aggregate. let collapsed_margin = self.margin_state.borrow().current_collapsed_margin(); if collapsed_margin != CssPixels::default() { let flow_children_bottom_up = if root_facts.is_table_wrapper() { @@ -2220,12 +2225,9 @@ impl<'pass> BlockFormattingContext<'pass> { if self.margins_collapse_through(child) { continue; } - self.used_mut(child).margin_bottom.set(collapsed_margin); + self.trailing_collapsed_margin.set(Some((child, collapsed_margin))); break; } - // The margin reassignment above changed a child's margin box, which the root's baselines may - // have been derived from (a scroll container child exports its bottom margin edge), so re-derive them. - self.compute_and_store_baselines(self.root); } if root_facts.is_list_item_box() { @@ -2842,6 +2844,7 @@ impl<'pass> BlockFormattingContext<'pass> { self.callbacks, self.root, self.lowest_floating_descendant_bottom_margin_edge.get(), + self.trailing_collapsed_margin.get(), ) } } @@ -2890,6 +2893,7 @@ pub(crate) fn automatic_block_size_for_bfc_root( callbacks: FfiLayoutFcCallbacks, root: Node, lowest_floating_descendant_bottom_margin_edge: Option, + trailing_collapsed_margin: Option<(Node, CssPixels)>, ) -> CssPixels { let facts = state.node_facts(&callbacks, root); // https://drafts.csswg.org/css-contain-2/#containment-size @@ -2938,9 +2942,17 @@ pub(crate) fn automatic_block_size_for_bfc_root( let child_used = state.try_used_values(&callbacks, child); // Children that have not been laid out yet contribute nothing to the automatic block size. if let Some(child_used) = child_used { + // Margins cannot collapse out of a BFC root: below the last real in-flow + // child, the run's trailing collapsed margin (which folds in any trailing + // collapse-through siblings) replaces that child's own bottom margin. + let margin_bottom = match trailing_collapsed_margin { + Some((last_real_child, aggregate)) if last_real_child == child => aggregate, + _ => child_used.margin_bottom.get(), + }; let child_bottom = child_used.content_offset.get().y + child_used.content_block_size.get() - + child_used.margin_box_bottom(false); + + child_used.border_box_bottom(false) + + margin_bottom; bottom = Some(bottom.map_or(child_bottom, |value: CssPixels| value.max(child_bottom))); } } diff --git a/Tests/LibWeb/Layout/expected/abspos-inline-containing-block-first-last-line-rule.txt b/Tests/LibWeb/Layout/expected/abspos-inline-containing-block-first-last-line-rule.txt index 665ce5a916ce4..9425614414ec5 100644 --- a/Tests/LibWeb/Layout/expected/abspos-inline-containing-block-first-last-line-rule.txt +++ b/Tests/LibWeb/Layout/expected/abspos-inline-containing-block-first-last-line-rule.txt @@ -1,6 +1,6 @@ Viewport <#document> at [0,0] [0+0+0 800 0+0+0] [0+0+0 600 0+0+0] [BFC] children: not-inline BlockContainer at [0,0] [0+0+0 800 0+0+0] [0+0+0 409 0+0+0] [BFC] children: not-inline - BlockContainer at [0,8] [0+0+0 800 0+0+0] [0+0+0 393 0+0+8] children: not-inline + BlockContainer at [0,8] [0+0+0 800 0+0+0] [0+0+0 393 0+0+0] children: not-inline BlockContainer at [8,8] [8+0+0 130 0+0+662] [8+0+0 60 0+0+8] children: inline TextNode <#text> (not painted) InlineNode at [8,10] [0+0+0 126.28125 0+0+0] [0+0+0 56 0+0+0] diff --git a/Tests/LibWeb/Layout/expected/block-and-inline/box-with-clearance-and-margin-top.txt b/Tests/LibWeb/Layout/expected/block-and-inline/box-with-clearance-and-margin-top.txt index 9c8987ac6c52f..a9d3fe33aac80 100644 --- a/Tests/LibWeb/Layout/expected/block-and-inline/box-with-clearance-and-margin-top.txt +++ b/Tests/LibWeb/Layout/expected/block-and-inline/box-with-clearance-and-margin-top.txt @@ -1,6 +1,6 @@ Viewport <#document> at [0,0] [0+0+0 800 0+0+0] [0+0+0 600 0+0+0] [BFC] children: not-inline BlockContainer at [0,0] [0+0+0 800 0+0+0] [0+0+0 267 0+0+0] [BFC] children: not-inline - BlockContainer at [8,8] [8+0+0 784 0+0+8] [8+0+0 110 0+0+100] children: not-inline + BlockContainer at [8,8] [8+0+0 784 0+0+8] [8+0+0 110 0+0+8] children: not-inline BlockContainer
at [8,8] [0+0+0 784 0+0+0] [0+0+0 110 0+0+0] children: not-inline BlockContainer at [8,8] floating [0+0+0 100 0+0+0] [0+0+0 100 0+0+0] [BFC] children: not-inline BlockContainer at [8,108] [0+0+0 10 0+0+774] [9999+0+0 10 0+0+100] children: not-inline diff --git a/Tests/LibWeb/Layout/expected/block-and-inline/float-clear-by-line-break-followed-by-block.txt b/Tests/LibWeb/Layout/expected/block-and-inline/float-clear-by-line-break-followed-by-block.txt index 398d94f3987a9..3f154cdf50d3f 100644 --- a/Tests/LibWeb/Layout/expected/block-and-inline/float-clear-by-line-break-followed-by-block.txt +++ b/Tests/LibWeb/Layout/expected/block-and-inline/float-clear-by-line-break-followed-by-block.txt @@ -1,6 +1,6 @@ Viewport <#document> at [0,0] [0+0+0 800 0+0+0] [0+0+0 600 0+0+0] [BFC] children: not-inline BlockContainer at [0,0] [0+0+0 800 0+0+0] [0+0+0 156 0+0+0] [BFC] children: not-inline - BlockContainer at [8,8] [8+0+0 784 0+0+8] [8+0+0 132 0+0+16] children: not-inline + BlockContainer at [8,8] [8+0+0 784 0+0+8] [8+0+0 132 0+0+8] children: not-inline BlockContainer <(anonymous)> at [8,8] [0+0+0 784 0+0+0] [0+0+0 100 0+0+0] children: inline BlockContainer at [8,8] floating [0+0+0 100 0+0+0] [0+0+0 100 0+0+0] [BFC] children: not-inline TextNode <#text> (not painted) diff --git a/Tests/LibWeb/Layout/expected/block-and-inline/float-vertical-offset-by-preceding-float.txt b/Tests/LibWeb/Layout/expected/block-and-inline/float-vertical-offset-by-preceding-float.txt index 4ece20b6af5f7..201b930f2d3af 100644 --- a/Tests/LibWeb/Layout/expected/block-and-inline/float-vertical-offset-by-preceding-float.txt +++ b/Tests/LibWeb/Layout/expected/block-and-inline/float-vertical-offset-by-preceding-float.txt @@ -1,6 +1,6 @@ Viewport <#document> at [0,0] [0+0+0 800 0+0+0] [0+0+0 600 0+0+0] [BFC] children: not-inline BlockContainer at [0,0] [0+0+0 800 0+0+0] [0+0+0 130 0+0+0] [BFC] children: not-inline - BlockContainer at [8,16] [8+0+0 784 0+0+8] [8+0+0 48 0+0+16] children: not-inline + BlockContainer at [8,16] [8+0+0 784 0+0+8] [8+0+0 48 0+0+8] children: not-inline BlockContainer <(anonymous)> at [8,16] [0+0+0 784 0+0+0] [0+0+0 0 0+0+0] children: inline BlockContainer
at [8,16] floating [0+0+0 50 0+0+0] [0+0+0 50 0+0+0] [BFC] children: not-inline TextNode <#text> (not painted) diff --git a/Tests/LibWeb/Layout/expected/block-and-inline/forced-break-stops-non-whitespace-sequence.txt b/Tests/LibWeb/Layout/expected/block-and-inline/forced-break-stops-non-whitespace-sequence.txt index 06a12518b002d..391ffc6bd4869 100644 --- a/Tests/LibWeb/Layout/expected/block-and-inline/forced-break-stops-non-whitespace-sequence.txt +++ b/Tests/LibWeb/Layout/expected/block-and-inline/forced-break-stops-non-whitespace-sequence.txt @@ -1,6 +1,6 @@ Viewport <#document> at [0,0] [0+0+0 800 0+0+0] [0+0+0 600 0+0+0] [BFC] children: not-inline BlockContainer at [0,0] [0+0+0 800 0+0+0] [0+0+0 41 0+0+0] [BFC] children: not-inline - BlockContainer at [8,13] [8+0+0 784 0+0+8] [8+0+0 15 0+0+13] children: not-inline + BlockContainer at [8,13] [8+0+0 784 0+0+8] [8+0+0 15 0+0+8] children: not-inline BlockContainer
 at [9,14] [0+1+0 782 0+1+0] [13+1+0 13 0+1+13] children: inline
         InlineNode  at [9,14] [0+0+0 6.5 0+0+0] [0+0+0 13 0+0+0]
           frag 0 from TextNode start: 0, length: 1, rect: [9,14 6.5x13] baseline: 10.390625
diff --git a/Tests/LibWeb/Layout/expected/block-and-inline/intrinsic-sizing-stress-test.txt b/Tests/LibWeb/Layout/expected/block-and-inline/intrinsic-sizing-stress-test.txt
index 8bba9ca663bec..8da5efaf072ef 100644
--- a/Tests/LibWeb/Layout/expected/block-and-inline/intrinsic-sizing-stress-test.txt
+++ b/Tests/LibWeb/Layout/expected/block-and-inline/intrinsic-sizing-stress-test.txt
@@ -2,7 +2,7 @@ Viewport <#document> at [0,0] [0+0+0 800 0+0+0] [0+0+0 600 0+0+0] [BFC] children
   BlockContainer  at [0,0] [0+0+0 800 0+0+0] [0+0+0 1760.375 0+0+0] [BFC] children: not-inline
     BlockContainer <(anonymous)> at [0,0] [0+0+0 800 0+0+0] [0+0+0 0 0+0+0] children: inline
       TextNode <#text> (not painted)
-    BlockContainer  at [0,10] [0+0+0 831.75 0+0+-31.75] [0+0+0 1740.375 0+0+10] children: not-inline
+    BlockContainer  at [0,10] [0+0+0 831.75 0+0+-31.75] [0+0+0 1740.375 0+0+0] children: not-inline
       BlockContainer <(anonymous)> at [0,10] [0+0+0 831.75 0+0+0] [0+0+0 0 0+0+0] children: inline
         TextNode <#text> (not painted)
         TextNode <#text> (not painted)
diff --git a/Tests/LibWeb/Layout/expected/block-and-inline/list-markers-intruded-by-float.txt b/Tests/LibWeb/Layout/expected/block-and-inline/list-markers-intruded-by-float.txt
index b55bcce4980e4..9722aa2f6edb1 100644
--- a/Tests/LibWeb/Layout/expected/block-and-inline/list-markers-intruded-by-float.txt
+++ b/Tests/LibWeb/Layout/expected/block-and-inline/list-markers-intruded-by-float.txt
@@ -1,6 +1,6 @@
 Viewport <#document> at [0,0] [0+0+0 800 0+0+0] [0+0+0 600 0+0+0] [BFC] children: not-inline
   BlockContainer  at [0,0] [0+0+0 800 0+0+0] [0+0+0 136 0+0+0] [BFC] children: not-inline
-    BlockContainer  at [8,16] [8+0+0 784 0+0+8] [8+0+0 96 0+0+16] children: not-inline
+    BlockContainer  at [8,16] [8+0+0 784 0+0+8] [8+0+0 96 0+0+8] children: not-inline
       BlockContainer  at [18,26] floating [0+10+0 200 0+10+100] [0+10+0 100 0+10+0] [BFC] children: not-inline
       BlockContainer