LibWeb: Fix width calculation for floating replaced elements
The path for floating, replaced elements must not fall through to the path taken for floating, non-replaced elements. The former works like inline replaced elements, while the latter uses a completely different algorithm which doesn't account for intrinsic ratio. Falling through overrides the correct value computed by the former. Fixes #19061.
This commit is contained in:
parent
7cc20f4cb5
commit
1e526af430
Notes:
sideshowbarker
2024-07-17 18:46:30 +09:00
Author: https://github.com/axgallo Commit: https://github.com/SerenityOS/serenity/commit/1e526af430 Pull-request: https://github.com/SerenityOS/serenity/pull/19062 Issue: https://github.com/SerenityOS/serenity/issues/19061 Reviewed-by: https://github.com/kalenikaliaksandr
3 changed files with 11 additions and 5 deletions
|
@ -8,10 +8,10 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
|
|||
BlockContainer <div.foo> at (8,16) content-size 1280x800 children: not-inline
|
||||
BlockContainer <(anonymous)> at (8,16) content-size 1280x0 children: inline
|
||||
TextNode <#text>
|
||||
BlockContainer <div> at (8,16) content-size 1280x600 children: not-inline
|
||||
BlockContainer <div> at (8,16) content-size 1280x400 children: not-inline
|
||||
BlockContainer <(anonymous)> at (8,16) content-size 1280x0 children: inline
|
||||
TextNode <#text>
|
||||
ImageBox <img> at (88,16) content-size 1200x600 floating children: not-inline
|
||||
ImageBox <img> at (488,16) content-size 800x400 floating children: not-inline
|
||||
TextNode <#text>
|
||||
BlockContainer <p> at (8,16) content-size 1280x17.46875 children: inline
|
||||
line 0 width: 37.21875, height: 17.46875, bottom: 17.46875, baseline: 13.53125
|
||||
|
@ -20,7 +20,7 @@ Viewport <#document> at (0,0) content-size 800x600 children: not-inline
|
|||
TextNode <#text>
|
||||
BlockContainer <(anonymous)> at (8,49.46875) content-size 1280x0 children: inline
|
||||
TextNode <#text>
|
||||
BlockContainer <(anonymous)> at (8,616) content-size 1280x0 children: inline
|
||||
BlockContainer <(anonymous)> at (8,416) content-size 1280x0 children: inline
|
||||
TextNode <#text>
|
||||
BlockContainer <(anonymous)> at (8,816) content-size 784x0 children: inline
|
||||
TextNode <#text>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
}
|
||||
|
||||
.foo div {
|
||||
height: 600px;
|
||||
height: 400px;
|
||||
}
|
||||
|
||||
.foo div img {
|
||||
|
|
|
@ -137,10 +137,16 @@ void BlockFormattingContext::compute_width(Box const& box, AvailableSpace const&
|
|||
// FIXME: This const_cast is gross.
|
||||
const_cast<ReplacedBox&>(replaced).prepare_for_replaced_layout();
|
||||
compute_width_for_block_level_replaced_element_in_normal_flow(replaced, remaining_available_space);
|
||||
// NOTE: We don't return here.
|
||||
if (box.is_floating()) {
|
||||
// 10.3.6 Floating, replaced elements:
|
||||
// https://www.w3.org/TR/CSS22/visudet.html#float-replaced-width
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (box.is_floating()) {
|
||||
// 10.3.5 Floating, non-replaced elements:
|
||||
// https://www.w3.org/TR/CSS22/visudet.html#float-width
|
||||
compute_width_for_floating_box(box, available_space);
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue