servo/components/layout_2020
bors-servo a1dfadc4fa
Auto merge of #29951 - Loirooriol:margin-collapse-use-computed, r=mrobinson
Check computed (min-)block-size when determining margin collapse

To collapse margins through, CSS2 requires "zero or auto computed height" and "zero computed min-height" (the latter should also also include auto, which was introduced in CSS3 as the new initial value).

Similarly, "auto computed height" is required to collapse the bottom margin with the bottom margin of the contents.

Therefore this patch stops collapsing when the used height is clamped to zero by max-height, but the computed value is not zero. Same for non-zero percentages that are indefinite or that resolve to 0px.

Note that 0% and calc(0% + 0px) are still considered to be zero (so they allow margin collapse), this may a bit inconsistent but matches Firefox (for the collapsing through case).

This also matches the heuristics in find_block_margin_collapsing_with_parent(). We could change the heuristics instead, but then they would have to track block sizes in order to be able to resolve percentages.

The change makes margin-collapse-through-percentage-height-block.html fail, that test is only passing on Blink, which did a different interpretation of the spec. To be fair, various places of CSS2 loosely consider that indefinite percentages compute to auto, and even Firefox does so when determining whether to collapse the top margin with the contents.

Since the spec isn't particularly clear and interoperability is lacking, I filed https://github.com/w3c/csswg-drafts/issues/8919.

<!-- Please describe your changes on the following line: -->

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `___` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix #29907
- [X] There are tests for these changes (1 test fails, see above)

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->
2023-07-01 19:38:30 +02:00
..
display_list Correct rendering of floated root 2023-06-20 17:46:45 +02:00
flexbox Layout 2020: implement clearance as Option<Length> 2023-06-29 11:00:45 +02:00
flow Auto merge of #29951 - Loirooriol:margin-collapse-use-computed, r=mrobinson 2023-07-01 19:38:30 +02:00
fragment_tree Layout 2020: implement clearance as Option<Length> 2023-06-29 11:00:45 +02:00
tests Correct rendering of floated root 2023-06-20 17:46:45 +02:00
Cargo.toml Start the transition to workspace dependencies 2023-05-17 11:59:35 +02:00
cell.rs Implement Default for ArcRefCell 2020-03-17 11:15:17 -07:00
context.rs Combine DOM-related concepts in Layout 2020 into dom.rs 2023-05-13 11:52:59 +02:00
dom.rs Combine DOM-related concepts in Layout 2020 into dom.rs 2023-05-13 11:52:59 +02:00
dom_traversal.rs Further changes required by Servo 2023-05-16 12:54:55 +02:00
formatting_contexts.rs Simplify layout of absolutes with static insets 2023-06-20 11:44:25 +02:00
geom.rs Place floats in layout 2020, but don't flow text around the floats yet. 2023-06-03 06:09:21 +02:00
layout_debug.rs Layout 2020: Move all Fragment code to the fragment_tree directory 2023-06-04 18:12:11 +02:00
lib.rs Layout 2020: Move all Fragment code to the fragment_tree directory 2023-06-04 18:12:11 +02:00
lists.rs Combine DOM-related concepts in Layout 2020 into dom.rs 2023-05-13 11:52:59 +02:00
positioned.rs Layout 2020: implement clearance as Option<Length> 2023-06-29 11:00:45 +02:00
query.rs Layout 2020: Move all Fragment code to the fragment_tree directory 2023-06-04 18:12:11 +02:00
replaced.rs Layout 2020: Move all Fragment code to the fragment_tree directory 2023-06-04 18:12:11 +02:00
sizing.rs Handle floats in BlockContainer::inline_content_sizes 2023-06-19 16:02:35 +02:00
style_ext.rs layout_2020: Add 'establishes_block_formatting_context' method to 'ComputedValuesExt' 2023-05-31 21:51:52 +08:00
traversal.rs Combine DOM-related concepts in Layout 2020 into dom.rs 2023-05-13 11:52:59 +02:00