Commit Graph
51 Commits
Author SHA1 Message Date
SGavrl b630b14fb6 Keep min-height-contained floats at block start 2026-07-31 04:07:59 +00:00
SGavrl f62ce2604e Contain definite floats through clearfix bands 2026-07-31 04:04:44 +00:00
SGavrl 8b52adf4d8 Keep clearfix pseudos around simple float bands 2026-07-31 04:01:14 +00:00
SGavrl d55e48a10f Preserve percentage bases in simple float bands 2026-07-31 03:52:21 +00:00
SGavrl 0acf4e1b06 Use page font metrics and indent first lines 2026-07-31 03:31:12 +00:00
SGavrl 6f22961465 Resolve percentage padding from final geometry 2026-07-31 03:16:01 +00:00
SGavrl 5c9f34fb34 Parse auto span grid shorthands 2026-07-31 03:05:33 +00:00
SGavrl e7656d9d9c Repair intrinsic flex heights with negative margins 2026-07-31 02:55:22 +00:00
SGavrl 72860049b8 Defer cyclic flex percentage sizing 2026-07-31 02:45:30 +00:00
SGavrl 6f71c302c5 Honor inherited heading font weights 2026-07-31 01:33:15 +00:00
SGavrl 393bac9895 Preserve contained grid row stretch 2026-07-31 00:53:32 +00:00
SGavrl ef4be1b5d9 Separate contained grid contributions from stretch 2026-07-31 00:34:56 +00:00
SGavrl 8385f496ca Use native floats for cleared bands 2026-07-31 00:17:49 +00:00
SGavrl fd746c13e9 Shape inherited letter spacing 2026-07-30 22:36:28 +00:00
SGavrl 92b228059e Compress percentage-constrained images 2026-07-30 22:14:35 +00:00
SGavrl 839f1c2338 Preserve collapsed margins in intrinsic sizing 2026-07-30 21:33:49 +00:00
SGavrl 90c64b2c31 Support safe column subgrid propagation 2026-07-30 21:15:28 +00:00
SGavrl 661212e6aa Fix framework layout and image transforms 2026-07-30 20:58:05 +00:00
SGavrl a5555d78c8 Fix replaced element aspect ratios 2026-07-30 20:41:58 +00:00
SGavrl 277753d31d Support responsive images and atomic multicol 2026-07-30 20:38:33 +00:00
SGavrl 10b8492116 Improve modern layout and viewport rendering 2026-07-30 20:24:57 +00:00
SGavrl 20be62bca9 render: preserve numeric font weights 2026-07-26 20:48:24 +00:00
SGavrl d6be828d17 render: constrain shrink-wrapped grid items 2026-07-26 20:26:42 +00:00
SGavrl ca551a996b render: resolve contextual positioned lengths 2026-07-26 14:09:49 +00:00
SGavrl d9f9202737 render: resolve modern responsive geometry 2026-07-26 13:47:09 +00:00
SGavrl 6eafb7d6cc render: size and color inline SVG from CSS 2026-07-26 12:18:07 +00:00
SGavrl 5a89ebd0a3 render: preserve framework inline control rows 2026-07-26 12:06:26 +00:00
SGavrl 228a5723ce render: support modern framework content and geometry 2026-07-26 10:50:31 +00:00
SGavrl e90ea7eacc test: gate BFC float continuation 2026-07-23 19:56:32 +00:00
SGavrl 3ea5ea0b2b test: gate constrained replaced geometry 2026-07-23 19:23:31 +00:00
SGavrl 436b69f50f test: gate right-float navigation geometry 2026-07-23 19:01:54 +00:00
SGavrl 567ba48649 test: gate list and mixed float geometry 2026-07-23 18:42:21 +00:00
SGavrl 3863833ca4 test: gate legacy center geometry 2026-07-23 18:06:03 +00:00
SGavrl 20d31938a1 test: gate absolute static position 2026-07-23 17:30:49 +00:00
SGavrl fb87e87849 test: gate content alignment 2026-07-23 16:57:28 +00:00
SGavrl 4887e95f52 test: gate container item alignment 2026-07-23 16:49:27 +00:00
SGavrl 1387e7ffe4 test: gate item self alignment 2026-07-23 16:42:31 +00:00
SGavrl c333619703 test: gate inline block flex geometry 2026-07-23 16:24:17 +00:00
SGavrl 5b602259c6 test: gate flex text alignment geometry 2026-07-23 15:58:37 +00:00
SGavrl ea3ff7ca4f test: gate replaced wrapper geometry 2026-07-23 15:35:02 +00:00
SGavrl bbdb779de9 test: gate opposing float geometry 2026-07-23 15:04:03 +00:00
SGavrl c7438370db test: gate replaced grid geometry 2026-07-23 14:48:36 +00:00
SGavrl 944db4b104 test: gate float flow geometry 2026-07-23 14:10:02 +00:00
SGavrl 1f85dfce6b test: gate flex item geometry 2026-07-23 13:34:19 +00:00
SGavrl 7827a6a788 render: honor modern containing-block triggers
Track transform, filter, backdrop-filter, perspective, containment,
will-change, and content-visibility triggers independently. Use the combined
state for absolute and fixed containing-block ancestry.
2026-07-23 12:02:55 +00:00
SGavrl bbeceb97ad render: honor transform containing blocks
Track every non-none transform as a containing-block trigger, including
unsupported visual transforms. Keep separate nearest-ancestor maps so
positioned boxes capture absolute descendants while only transforms capture
fixed descendants.
2026-07-23 11:47:00 +00:00
SGavrl 6ea1739121 render: position inset boxes against CSS containers
Reparent inset-positioned absolute boxes to the nearest non-static ancestor
and fixed boxes to the initial containing block. Keep auto-axis boxes on the
existing static-position path, distinguish fixed from absolute, and blockify
positioned inline boxes and floats.
2026-07-23 11:34:23 +00:00
SGavrl 23594b1f96 render: percentage padding, box-shadow, external-sprite svg, gradient text
percentage padding/margin: top/bottom percentages resolve against the
containing-block width (the responsive aspect-ratio-box trick, e.g.
padding-top:56.25%), resolved to px in the top-down layout pass so card
media boxes reserve space instead of collapsing.
box-shadow: parse and paint an outset shadow (rounded, offset, spread,
soft-edge approximation) so cards/buttons/menus have depth.
external-sprite svg: resolve <use href="url#id"> to an external sprite
file, inject the referenced symbol so inline-svg icon systems rasterize.
background-clip:text: paint transparent-with-gradient text (the common
gradient hero/button label) instead of leaving it invisible.
2026-07-11 21:02:57 +00:00
SGavrl 2652ee64a4 render: real-world CSS rendering parity
Colors: oklch()/oklab() and color-mix(); linear-gradient backgrounds.
Grid: named-line placement, repeat() expansion, drop whitespace-only
grid items; upgrade taffy 0.7 -> 0.12 so aspect-ratio images in
auto-height rows no longer collapse to slivers.
CSS: @layer, nesting, @property, :is()/:where(), clamp(), @media not all;
source/track/param/area and svg desc/metadata as display:none.
Images: webp + intrinsic sizing, srcset/picture, browser UA + Accept for
CDN fetches, grey placeholder on failure; width/height HTML attributes
rank below author CSS with aspect-ratio preserved for auto axes.
2026-07-11 19:52:36 +00:00
SGavrl 88313178b2 Split text nodes into per-word layout leaves so text actually wraps
A whole DOM text node was one indivisible taffy leaf. Flex-wrap only
  breaks between items, never inside one, so a long run of plain text
  with no inline element breaking it up (an ordinary sentence with no
  link in it) either fit on one line or ran straight past the
  container's edge instead of wrapping. Short runs interrupted by links
  every few words (extremely common in Wikipedia's markup) happened to
  be narrow enough to wrap on their own, which is why paragraphs looked
  fine but any long plain-text stretch overflowed straight over the
  infobox and the History-section image.

  Text nodes now split into one taffy leaf per word, flattened into the
  same child list as sibling elements so words from different text nodes
  and inline elements interleave and wrap together like real inline
  flow. This changes the geometry data model: a text node's content is
  now a list of (box, word) pairs (DomLayout::text_runs) instead of a
  single box, since it can span several lines. Updated painting to draw
  each word at its own position, and fixed a bold-text measurement
  mismatch (layout width and drawn width disagreed by 1px/char, invisible
  before as one blob, visible as gaps between every word once each word
  is independently positioned).

  Added a regression test that fails against the old single-leaf
  behavior.
2026-07-03 12:59:40 +00:00