mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
layout: Fix block SizeConstraint for replaced elements (#37758)
#37433 didn't handle intrinsic contributions. This patch computes the correct SizeConstraint to be used as the ConstraintSpace's block size when computing intrinsic inline sizes. Testing: Adding new test Fixes: #37478 Signed-off-by: Oriol Brufau <obrufau@igalia.com>
This commit is contained in:
parent
f23e3e25b8
commit
4cd7c5196b
7 changed files with 168 additions and 33 deletions
|
@ -2214,12 +2214,30 @@ impl FlexItemBox {
|
|||
.map(|v| Au::zero().max(v - pbm_auto_is_zero.cross)),
|
||||
};
|
||||
|
||||
// <https://drafts.csswg.org/css-flexbox/#definite-sizes>
|
||||
// > If a single-line flex container has a definite cross size, the automatic preferred
|
||||
// > outer cross size of any stretched flex items is the flex container’s inner cross size
|
||||
// > (clamped to the flex item’s min and max cross size) and is considered definite.
|
||||
let (preferred_cross_size, min_cross_size, max_cross_size) = content_cross_sizes
|
||||
.resolve_each_extrinsic(Size::FitContent, Au::zero(), stretch_size.cross);
|
||||
let is_table = self.is_table();
|
||||
let tentative_cross_content_size = if cross_axis_is_item_block_axis {
|
||||
self.independent_formatting_context
|
||||
.tentative_block_content_size(preferred_aspect_ratio)
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let (preferred_cross_size, min_cross_size, max_cross_size) =
|
||||
if let Some(cross_content_size) = tentative_cross_content_size {
|
||||
let (preferred, min, max) = content_cross_sizes.resolve_each(
|
||||
Size::FitContent,
|
||||
Au::zero,
|
||||
stretch_size.cross,
|
||||
|| cross_content_size,
|
||||
is_table,
|
||||
);
|
||||
(Some(preferred), min, max)
|
||||
} else {
|
||||
content_cross_sizes.resolve_each_extrinsic(
|
||||
Size::FitContent,
|
||||
Au::zero(),
|
||||
stretch_size.cross,
|
||||
)
|
||||
};
|
||||
let cross_size = SizeConstraint::new(preferred_cross_size, min_cross_size, max_cross_size);
|
||||
|
||||
// <https://drafts.csswg.org/css-flexbox/#transferred-size-suggestion>
|
||||
|
@ -2344,7 +2362,7 @@ impl FlexItemBox {
|
|||
get_automatic_minimum_size,
|
||||
stretch_size.main,
|
||||
&main_content_sizes,
|
||||
self.is_table(),
|
||||
is_table,
|
||||
);
|
||||
|
||||
FlexItem {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue