Layout 2020: Properly handle negative block margins in floats

If a float has negative block margins, it should be pushed upward, but
shouldn't affect the positioning of any floats that came before it. It
should lower the ceiling though when it still has some non-negative
block contribution. In order to implement this behavior, we should only
place the float considering its non-negative block length contribution. If
the float is pushed up completely past it's "natural" position, it
should be placed like a float with zero block size.
This commit is contained in:
Martin Robinson 2023-06-08 11:55:20 +02:00
parent fc512cef42
commit bc58bb080f
4 changed files with 49 additions and 4 deletions

View file

@ -60647,6 +60647,19 @@
{}
]
],
"negative-block-margin-pushing-float-out-of-block-formatting-context.html": [
"0ebe54c1904e0c2487ebe15c4d60e9e93672d859",
[
null,
[
[
"/css/CSS2/floats/negative-block-margin-pushing-float-out-of-block-formatting-context-ref.html",
"=="
]
],
{}
]
],
"negative-margin-float-positioning.html": [
"8b4aef22f71f8695ebbc5b6dc83ad5639945618d",
[
@ -359477,6 +359490,10 @@
"68139cdbe2d7c998b6d948f5ecca0ed7ce367694",
[]
],
"negative-block-margin-pushing-float-out-of-block-formatting-context-ref.html": [
"09a0ed094f8eb82f9fa25c4f09bb3f8a1f79c4c9",
[]
],
"overflow-scroll-float-paint-order-ref.html": [
"0fb53d4ecd3cd77e6588be0b271a2ee47950bd29",
[]

View file

@ -0,0 +1,8 @@
<!DOCTYPE html>
<link rel="author" title="Martin Robinson" href="mailto:mrobinson@igalia.com" />
<meta name="assert" content="When a floating box has a negative margin negative enough that it pushes the float past the top of the block formatting context, it should render properly."/>
<body>
<div style="width: 50px; height: 50px; background: green;"></div>
</body>

View file

@ -0,0 +1,13 @@
<!DOCTYPE html>
<link rel="author" title="Martin Robinson" href="mailto:mrobinson@igalia.com" />
<link rel="help" href="https://drafts.csswg.org/css2/#float-position"/>
<meta name="assert" content="When a floating box has a negative margin negative enough that it pushes the float past the top of the block formatting context, it should render properly."/>
<link rel="match" href="negative-block-margin-pushing-float-out-of-block-formatting-context-ref.html"/>
<body>
<div style="height: 100px;"></div>
<div style="position: absolute;">
<div style="float: left; width: 50px; height: 50px; margin-top: -100px; background: green;"></div>
</div>
</body>