mirror of
https://github.com/servo/servo.git
synced 2025-08-02 12:10:29 +01:00
layout: Restrict stretch alignment to flex items with computed auto size (#36288)
We were allowing `align-self: stretch` to stretch flex items whose cross size behaves as `auto`, including cyclic percentages. However, https://github.com/w3c/csswg-drafts/issues/4525 resolved that stretching should only happen when the cross size computes to `auto`. So this patch exposes this information in `ContentBoxSizesAndPBM`, and refactors the flexbox stretching logic. Fixes: #36285 Testing: - `/css/css-flexbox/quirks-auto-block-size-with-percentage-item.html` - `/css/css-flexbox/stretch-requires-computed-auto-size.html` Signed-off-by: Oriol Brufau <obrufau@igalia.com>
This commit is contained in:
parent
c19c7b2ed8
commit
202cac900d
7 changed files with 94 additions and 67 deletions
|
@ -130,6 +130,7 @@ pub(crate) fn outer_inline(
|
|||
content_box_sizes,
|
||||
pbm,
|
||||
mut depends_on_block_constraints,
|
||||
preferred_size_computes_to_auto,
|
||||
} = layout_style.content_box_sizes_and_padding_border_margin(containing_block);
|
||||
let margin = pbm.margin.map(|v| v.auto_is(Au::zero));
|
||||
let pbm_sums = LogicalVec2 {
|
||||
|
@ -143,7 +144,7 @@ pub(crate) fn outer_inline(
|
|||
.size
|
||||
.block
|
||||
.map(|v| Au::zero().max(v - pbm_sums.block));
|
||||
let automatic_size = if content_box_sizes.block.preferred.is_initial() &&
|
||||
let automatic_size = if preferred_size_computes_to_auto.block &&
|
||||
auto_block_size_stretches_to_containing_block
|
||||
{
|
||||
depends_on_block_constraints = true;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue