diff options
author | bptato <nincsnevem662@gmail.com> | 2024-12-30 22:06:52 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2024-12-30 22:10:10 +0100 |
commit | 5b51ce3501f87e52a49babdf4cb81b6ca2ce364e (patch) | |
tree | e426d02f788a214a707cadce82907aed44bd6c93 /src | |
parent | cd069a76e7c6be45c1f44e47310cc2ec378456ec (diff) | |
download | chawan-5b51ce3501f87e52a49babdf4cb81b6ca2ce364e.tar.gz |
cascade: prevent blockification for non-inline absolute boxes
The standard says we should blockify. Alas, the standard is lying.
Diffstat (limited to 'src')
-rw-r--r-- | src/css/cascade.nim | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/css/cascade.nim b/src/css/cascade.nim index d98949a1..453b65f8 100644 --- a/src/css/cascade.nim +++ b/src/css/cascade.nim @@ -272,11 +272,15 @@ func buildComputedValues(rules: CSSValueEntryMap; parent: CSSValues; for t in CSSPropertyType: if not inited[t]: result.initialOrInheritFrom(parent, t) - if result{"float"} != FloatNone: + # Quirk: it seems others aren't implementing what the spec says about + # blockification. + # Well, neither will I, because the spec breaks on actual websites. + # Curse CSS. + if result{"position"} in {PositionAbsolute, PositionFixed}: + if result{"display"} == DisplayInline: + result{"display"} = DisplayInlineBlock + elif result{"float"} != FloatNone: result{"display"} = result{"display"}.blockify() - elif result{"position"} in {PositionAbsolute, PositionFixed} and - result{"display"} == DisplayInline: - result{"display"} = DisplayInlineBlock if (result{"overflow-x"} in {OverflowVisible, OverflowClip}) != (result{"overflow-y"} in {OverflowVisible, OverflowClip}): result{"overflow-x"} = result{"overflow-x"}.bfcify() |