about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorbptato <nincsnevem662@gmail.com>2024-12-30 22:06:52 +0100
committerbptato <nincsnevem662@gmail.com>2024-12-30 22:10:10 +0100
commit5b51ce3501f87e52a49babdf4cb81b6ca2ce364e (patch)
treee426d02f788a214a707cadce82907aed44bd6c93 /src
parentcd069a76e7c6be45c1f44e47310cc2ec378456ec (diff)
downloadchawan-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.nim12
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()