From 5b51ce3501f87e52a49babdf4cb81b6ca2ce364e Mon Sep 17 00:00:00 2001 From: bptato Date: Mon, 30 Dec 2024 22:06:52 +0100 Subject: cascade: prevent blockification for non-inline absolute boxes The standard says we should blockify. Alas, the standard is lying. --- src/css/cascade.nim | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) (limited to 'src') 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() -- cgit 1.4.1-2-gfad0