Skip to content

Baseline-align in-flow atomic inlines via Parley's InlineBox::baseline - #750

Open
nicoburns wants to merge 10 commits into
mainfrom
devin/1787089158-inline-box-baseline-721
Open

Baseline-align in-flow atomic inlines via Parley's InlineBox::baseline#750
nicoburns wants to merge 10 commits into
mainfrom
devin/1787089158-inline-box-baseline-721

Conversation

@nicoburns

@nicoburns nicoburns commented Aug 18, 2026

Copy link
Copy Markdown
Member

Summary

Wires Taffy's baseline output through to Parley's InlineBox::baseline so in-flow atomic inlines are baseline-aligned per CSS instead of bottom-edge aligned, and bumps Parley to DioxusLabs/parley#7 (rev 95a9ff1, which includes DioxusLabs/parley#10) for line-metrics fixes plus vertical-align: top/bottom support.

In compute_inline_layout, when updating each in-flow inline box from its Taffy layout output:

let baseline = match display {
    // Inline flex/grid containers use their *first* baseline (css-align)
    Display::Flex | Display::Grid => output.baselines.first,
    // Inline-blocks use the baseline of their *last* in-flow line box (CSS2)
    _ => output.baselines.last,
};
ibox.baseline = if is_scroll_container {
    None // Parley bottom-edge fallback = bottom margin edge, per CSS2
} else {
    // Rounded to physical pixels so content inside the box (pixel-snapped
    // relative to the box's top edge) stays pixel-aligned after the box is
    // shifted to sit on the (pixel-snapped) line baseline.
    baseline.map(|b| ((margin.top + b) * scale).round())
};

Taffy baselines are measured from the top border edge; Parley expects the baseline relative to the top of the inline box (which here is the margin box, since ibox.width/height include margins), hence margin.top + b. The baselines.last values are populated by the Taffy last-baseline work (#721), whose commits are included in this PR now that it targets main.

Two adjustments to existing negative-vertical-margin handling now that boxes can carry a baseline:

  • The reserved line space (ibox.height) is only clamped to >= 0 for bottom-aligned boxes (no baseline); with an explicit baseline the ascent/descent contributions may legitimately be negative (e.g. margin-top: -20em on an inline-flex).
  • Positioning: for a baseline-aligned box, ibox.y is the margin-box top (Parley places it at line_baseline - baseline), so the border box goes at ibox.y + margin.top (unclamped); bottom-aligned boxes keep the previous margin.top.max(0.0) bottom-anchoring.

Parley bump to 95a9ff1 (DioxusLabs/parley#7, on top of #10) brings:

  • Fix for clamping of negative half-leading in line extents (this is what fixes the 32 line-height-* tests below).
  • Opt-in CSS2 § 10.8 line-box strut support, now enabled via builder.set_compute_strut(true).
  • InlineBox::vertical_align (InlineBoxVerticalAlign::{Baseline, Top, Bottom}). Blitz maps the computed baseline-shift longhand (the stylo longhand behind vertical-align: top/bottom) to it:
fn inline_box_vertical_align(baseline_shift: Option<BaselineShift>) -> InlineBoxVerticalAlign {
    match baseline_shift {
        Some(BaselineShift::Keyword(BaselineShiftKeyword::Top)) => InlineBoxVerticalAlign::Top,
        Some(BaselineShift::Keyword(BaselineShiftKeyword::Bottom)) => InlineBoxVerticalAlign::Bottom,
        _ => InlineBoxVerticalAlign::Baseline,
    }
}

With vertical-align: top/bottom supported, the strut no longer regresses the ~200 tests whose references use vertical-align: top images (spot-checked width-006.xht, inline-replaced-width-001.xht, float-003.xht, width-percentage-001.xht, background-size-025.html: all pass locally with strut + vertical-align).

  • Its append_inline_box_to_line signature changed; out-of-flow floated boxes now pass alignment: None.

WPT results

CI's full-suite run vs main reports 142 newly passing / 50 newly failing (net +92) (full diff in the generated section below). All 50 were re-verified locally (each passes on main at 10606cc and failed on this branch before the latest commits) and triaged. 8 of the 50 are fixed by the latest commits; the remainder cluster as follows.

Fixed in this PR (8)

  • contain-layout-baseline-001/005, contain-layout-flexbox-001, contain-layout-grid-001: layout containment must suppress the box's baseline (css-contain §3 "no baseline"). Blitz now checks the computed contain value for layout (also covered by strict/content) and passes baseline: None for such atomic inlines.
  • baseline-of-scrollable-1a: a scrollable inline flex/grid container still takes its baseline from its content (as if not scrolled), clamped to the border box (css-align §9.1 / Not clamping baseline position when scrollable overflow gives weird results w3c/csswg-drafts#7660) — only inline-block scroll containers synthesize from the bottom margin edge. Blitz now clamps output.baselines.first to [0, height] for flex/grid scroll containers instead of dropping it.
  • floats-141.xht (fixed in an earlier commit): 1px glyph shift from a fractional inline-box baseline; ibox.baseline is now rounded to physical pixels.
  • flexbox-baseline-multi-line-horiz-004.html, grid-baseline-001.html: fixed by bumping Taffy to pick up Flexbox: fix container baseline for column-reverse containers taffy#1127 (wrap-reverse container baseline from the visually startmost line) and Grid: exclude items with auto block-axis margins from baseline alignment taffy#1125 (items with auto block-axis margins don't participate in grid baseline alignment).

Upstream Taffy baseline gaps (3 remaining)

Three Taffy fixes landed upstream (DioxusLabs/taffy#1125, #1127, #1126) and this PR's Taffy pin was bumped to a merge of taffy main into the last-baseline branch (8c49a27f), which fixed flexbox-baseline-multi-line-horiz-004 and grid-baseline-001 (see above). Still failing:

  • baseline-block-with-overflow-001.html, baseline-of-scrollable-1b.html: taffy#1126 added block scroll-container baseline clamping/synthesis, but these still fail because Blitz's inline layout doesn't feed Taffy block-child baselines into inline-block vertical alignment for these structures (the tests wrap the scrollable boxes so the relevant baseline propagation is only partially exercised).
  • flexbox-baseline-multi-line-vert-002.html: the vertical-writing-mode variant additionally depends on the CSS2 strut interaction (see next section).

Spurious base passes exposed by parley#10's nbsp fix (5)

  • inline-block-zorder-002/004/005.xht, inline-table-zorder-001.xht, inline-table-width-002b.xht: on main, any element whose text content is only &nbsp; renders completely blank (even its background), so these tests compared blank-vs-blank and "passed". Parley update to sync with master branch of Dioxus #10 fixes nbsp handling, so this PR actually renders them, exposing pre-existing issues: the zorder tests fail on paint order (a later sibling block's background, pulled up via negative margin, is painted over earlier inline-block/inline-table content, contra CSS2 Appendix E); inline-table-width-002b additionally involves an unrendered inline-table, with test/ref differing only in line spacing around the invisible box.

CSS2 line-box strut interactions (12) — pass again with set_compute_strut(false)

list-style(-image/-type)-applies-to-012/014.xht (6 tests), contain-size-flexbox-002.html, font-colorization.html, intrinsic-percent-replaced-008.html, intrinsic-percent-replaced-dynamic-005.html, abs-pos-with-replaced-child.html, and (combined with the baseline wiring) flexbox-baseline-multi-line-vert-002.html.

The strut itself is spec-correct (CSS2 §10.8) and is what fixes the much larger set of vertical-align: top reference mismatches; these failures are cases where the strut interacts with other Blitz gaps rather than the strut being wrong. E.g. the lists tests wrap a zero-height list-item inside an inline-block: the strut now reserves a full line for the otherwise-empty line box containing the zero-height inline box, pushing the outside marker one line below where the (strut-less) reference paints it — proper handling needs marker boxes to participate in the line like browsers do. The intrinsic-percent-replaced / abs-pos-with-replaced-child refs contain text next to replaced elements whose heights now differ by the strut's leading. Individual fixes here are follow-up work in Blitz's marker/replaced-element line handling, not in this PR's wiring.

Parley 0.11.1 → git-main upgrade behavior changes (27) — fail regardless of strut/baseline wiring

These remain failing with the strut disabled and the baseline wiring neutralized, so they come from the Parley upgrade itself (new CSS2 per-side line metrics from linebender/parley#639, nbsp now rendering, changed trailing-whitespace/hanging behavior), or from pre-existing Blitz issues newly exposed by it:

  • Ruby (6): css-ruby/br-clear-all-000, empty-ruby-base-container, empty-ruby-text-container-abs/-float, ruby-base-container-abs/-float — empty ruby structures now contribute line height where they previously collapsed.
  • Trailing/hanging whitespace (5): trailing-ideographic-space-013/014, hanging-whitespace-002.tentative, full-width-leading-spaces-004, hanging-punctuation-first-002 — parley main changed trailing-space hang/measurement behavior (nearby siblings of these tests start passing, so it's a behavior trade within the same feature).
  • Font/shaping (4): font-family-applies-to-005, font-feature-settings-tibetan, small-caps-letter-spacing-002, font-colorization — shaping/metrics changes in parley main (several other shaping tests start passing).
  • floats-149.xht: the green block collapses to zero height — its only in-flow content is an empty inline whose children are floats; a line box containing only an empty inline + floats no longer contributes height under the new line-metrics model (CSS2 §9.4.2 empty-inline handling needed).
  • empty-span-size-002.html: empty spans' contribution to line height changed with the new per-side line metrics.
  • Misc (6): t41-html4-keywords-a, contain-animation-001, custom-highlight-painting-inheritance-001/002, text-decoration-skip-spaces-001, css-break/ruby-003 — small text-position shifts from the new line metrics cause these paint-comparison tests to mismatch.
  • Grid (2): grid-layout-auto-tracks, column-subgrid-grid-gap-008 — content-sized track sizing shifted by the changed text-line heights.

Note: flexbox-baseline-multi-item-horiz-001a.html-style tests still fail, but for orthogonal reasons (synthesized baselines of empty/no-text flex items), not the inline-box wiring.

WPT results

142 newly passing, 43 newly failing (net +99).

Full diff (185 changed tests)
+ Fail => Pass css/CSS2/abspos/between-float-and-text.html
+ Fail => Pass css/CSS2/backgrounds/background-position-applies-to-007.xht
+ Fail => Pass css/CSS2/backgrounds/background-position-applies-to-009.xht
+ Fail => Pass css/CSS2/backgrounds/background-position-applies-to-012.xht
+ Fail => Pass css/CSS2/backgrounds/background-position-applies-to-013.xht
+ Fail => Pass css/CSS2/backgrounds/background-position-applies-to-014.xht
+ Fail => Pass css/CSS2/bidi-text/bidi-001.xht
+ Fail => Pass css/CSS2/box-display/containing-block-030.xht
+ Fail => Pass css/CSS2/css1/c414-flt-fit-004.xht
+ Fail => Pass css/CSS2/css1/c534-bgre-000.xht
+ Fail => Pass css/CSS2/css1/c534-bgre-001.xht
+ Fail => Pass css/CSS2/css1/c534-bgreps-001.xht
+ Fail => Pass css/CSS2/css1/c534-bgreps-002.xht
+ Fail => Pass css/CSS2/css1/c534-bgreps-003.xht
+ Fail => Pass css/CSS2/css1/c534-bgreps-004.xht
+ Fail => Pass css/CSS2/css1/c534-bgreps-005.xht
+ Fail => Pass css/CSS2/css1/c536-bgpos-000.xht
+ Fail => Pass css/CSS2/css1/c536-bgpos-001.xht
+ Fail => Pass css/CSS2/css1/c547-indent-000.xht
+ Fail => Pass css/CSS2/css1/c5502-mrgn-r-000.xht
+ Fail => Pass css/CSS2/css1/c5504-mrgn-l-000.xht
+ Fail => Pass css/CSS2/css1/c5505-mrgn-000.xht
+ Fail => Pass css/CSS2/css1/c5511-brdr-tw-001.xht
+ Fail => Pass css/CSS2/css1/c5513-brdr-bw-001.xht
+ Fail => Pass css/CSS2/css1/c5515-brdr-w-001.xht
+ Fail => Pass css/CSS2/css1/c5525-fltwidth-003.xht
+ Fail => Pass css/CSS2/css1/c61-rel-len-000.xht
+ Fail => Pass css/CSS2/floats-clear/clear-003.xht
+ Fail => Pass css/CSS2/floats-clear/clear-inline-001.xht
+ Fail => Pass css/CSS2/floats-clear/floats-007.xht
+ Fail => Pass css/CSS2/floats-clear/floats-031.xht
+ Fail => Pass css/CSS2/floats-clear/floats-038.xht
+ Fail => Pass css/CSS2/floats-clear/floats-040.xht
- Pass => Fail css/CSS2/floats-clear/floats-149.xht
+ Fail => Pass css/CSS2/floats-clear/margin-collapse-clear-014.xht
- Pass => Fail css/CSS2/fonts/font-family-applies-to-005.xht
+ Fail => Pass css/CSS2/fonts/font-size-124.xht
- Pass => Fail css/CSS2/linebox/baseline-block-with-overflow-001.html
+ Fail => Pass css/CSS2/linebox/line-height-127.xht
+ Fail => Pass css/CSS2/linebox/line-height-applies-to-001.xht
+ Fail => Pass css/CSS2/linebox/line-height-applies-to-002.xht
+ Fail => Pass css/CSS2/linebox/line-height-applies-to-003.xht
+ Fail => Pass css/CSS2/linebox/line-height-applies-to-004.xht
+ Fail => Pass css/CSS2/linebox/line-height-applies-to-007.xht
+ Fail => Pass css/CSS2/linebox/line-height-applies-to-008.xht
+ Fail => Pass css/CSS2/linebox/line-height-applies-to-009.xht
+ Fail => Pass css/CSS2/linebox/line-height-applies-to-012.xht
+ Fail => Pass css/CSS2/linebox/line-height-applies-to-013.xht
+ Fail => Pass css/CSS2/linebox/line-height-applies-to-014.xht
- Pass => Fail css/CSS2/lists/list-style-applies-to-012.xht
- Pass => Fail css/CSS2/lists/list-style-applies-to-014.xht
- Pass => Fail css/CSS2/lists/list-style-image-applies-to-012.xht
- Pass => Fail css/CSS2/lists/list-style-image-applies-to-014.xht
- Pass => Fail css/CSS2/lists/list-style-type-applies-to-012.xht
- Pass => Fail css/CSS2/lists/list-style-type-applies-to-014.xht
- Pass => Fail css/CSS2/normal-flow/inline-block-zorder-002.xht
- Pass => Fail css/CSS2/normal-flow/inline-block-zorder-004.xht
- Pass => Fail css/CSS2/normal-flow/inline-block-zorder-005.xht
+ Fail => Pass css/CSS2/normal-flow/inline-table-valign-001.xht
- Pass => Fail css/CSS2/normal-flow/inline-table-width-002b.xht
- Pass => Fail css/CSS2/normal-flow/inline-table-zorder-001.xht
+ Fail => Pass css/CSS2/normal-flow/max-height-036.xht
+ Fail => Pass css/CSS2/normal-flow/max-height-047.xht
+ Fail => Pass css/CSS2/normal-flow/min-height-036.xht
+ Fail => Pass css/CSS2/normal-flow/min-height-047.xht
+ Fail => Pass css/CSS2/positioning/absolute-non-replaced-max-height-009.xht
+ Fail => Pass css/CSS2/positioning/abspos-011.xht
+ Fail => Pass css/CSS2/positioning/abspos-012.xht
+ Fail => Pass css/CSS2/text/text-indent-011.xht
+ Fail => Pass css/CSS2/text/white-space-007.xht
+ Fail => Pass css/CSS2/text/white-space-normal-003.xht
+ Fail => Pass css/CSS2/values/units-003.xht
+ Fail => Pass css/CSS2/visudet/content-height-001.html
+ Fail => Pass css/CSS2/visudet/content-height-002.html
+ Fail => Pass css/CSS2/visudet/content-height-003.html
- Pass => Fail css/css-align/baseline-of-scrollable-1b.html
+ Fail => Pass css/css-align/baseline-rules/synthesized-baseline-flexbox-001.html
+ Fail => Pass css/css-align/baseline-rules/synthesized-baseline-grid-001.html
+ Fail => Pass css/css-align/baseline-rules/synthesized-baseline-inline-block-001.html
+ Fail => Pass css/css-backgrounds/box-shadow-outset-without-border-radius-001.html
- Pass => Fail css/css-break/ruby-003.html
- Pass => Fail css/css-color/t41-html4-keywords-a.xht
- Pass => Fail css/css-contain/contain-animation-001.html
+ Fail => Pass css/css-contain/contain-layout-ink-overflow-013.html
+ Fail => Pass css/css-contain/contain-layout-ink-overflow-015.html
+ Fail => Pass css/css-contain/contain-paint-022.html
+ Fail => Pass css/css-contain/contain-paint-023.html
- Pass => Fail css/css-contain/contain-size-flexbox-002.html
+ Fail => Pass css/css-flexbox/alignment/flex-align-baseline-flex-003.html
+ Fail => Pass css/css-flexbox/alignment/flex-align-baseline-overflow-001.html
+ Fail => Pass css/css-flexbox/flexbox-align-self-baseline-horiz-007.xhtml
+ Fail => Pass css/css-flexbox/flexbox-align-self-horiz-001-block.xhtml
+ Fail => Pass css/css-flexbox/flexbox-baseline-align-self-baseline-vert-001.html
+ Fail => Pass css/css-flexbox/flexbox-baseline-multi-item-vert-001a.html
+ Fail => Pass css/css-flexbox/flexbox-baseline-multi-item-vert-001b.html
+ Fail => Pass css/css-flexbox/flexbox-baseline-multi-line-horiz-001.html
+ Fail => Pass css/css-flexbox/flexbox-baseline-multi-line-horiz-002.html
- Pass => Fail css/css-flexbox/flexbox-baseline-multi-line-vert-002.html
+ Fail => Pass css/css-flexbox/flexbox-basic-canvas-vert-001.xhtml
+ Fail => Pass css/css-flexbox/flexbox-basic-canvas-vert-001v.xhtml
+ Fail => Pass css/css-flexbox/flexbox-basic-iframe-vert-001.xhtml
+ Fail => Pass css/css-flexbox/flexbox-basic-img-vert-001.xhtml
+ Fail => Pass css/css-flexbox/flexbox-basic-textarea-vert-001.xhtml
+ Fail => Pass css/css-flexbox/flexbox-basic-video-vert-001.xhtml
+ Fail => Pass css/css-flexbox/flexbox-justify-content-horiz-002.xhtml
+ Fail => Pass css/css-flexbox/flexbox-justify-content-horiz-004.xhtml
+ Fail => Pass css/css-flexbox/flexible-box-float.html
- Pass => Fail css/css-fonts/font-colorization.html
- Pass => Fail css/css-fonts/font-feature-settings-tibetan.html
- Pass => Fail css/css-fonts/small-caps-letter-spacing-002.html
+ Fail => Pass css/css-fonts/variations/font-weight-metrics.html
+ Fail => Pass css/css-grid/alignment/grid-align-baseline-004.html
+ Fail => Pass css/css-grid/alignment/grid-align-baseline-flex-003.html
+ Fail => Pass css/css-grid/alignment/grid-align-baseline-overflow-001.html
+ Fail => Pass css/css-grid/alignment/grid-baseline-004.html
+ Fail => Pass css/css-grid/alignment/grid-self-alignment-baseline-with-grid-001.html
+ Fail => Pass css/css-grid/alignment/grid-self-alignment-baseline-with-grid-002.html
+ Fail => Pass css/css-grid/alignment/grid-self-alignment-baseline-with-grid-003.html
+ Fail => Pass css/css-grid/alignment/grid-self-alignment-baseline-with-grid-004.html
+ Fail => Pass css/css-grid/alignment/self-baseline/grid-self-baseline-008.html
+ Fail => Pass css/css-grid/alignment/self-baseline/grid-self-baseline-horiz-001.html
+ Fail => Pass css/css-grid/alignment/self-baseline/grid-self-baseline-horiz-003.html
+ Fail => Pass css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-lr-001.html
+ Fail => Pass css/css-grid/alignment/self-baseline/grid-self-baseline-vertical-rl-001.html
- Pass => Fail css/css-grid/grid-definition/grid-layout-auto-tracks.html
+ Fail => Pass css/css-grid/grid-items/grid-layout-z-order-a.html
+ Fail => Pass css/css-grid/grid-items/grid-layout-z-order-b.html
- Pass => Fail css/css-grid/grid-lanes/subgrid/grid-subgridded-to-grid-lanes/gap/column-subgrid-grid-gap-008.html
+ Fail => Pass css/css-grid/subgrid/subgrid-baseline-011.html
- Pass => Fail css/css-highlight-api/painting/custom-highlight-painting-inheritance-001.html
- Pass => Fail css/css-highlight-api/painting/custom-highlight-painting-inheritance-002.html
+ Fail => Pass css/css-images/image-orientation/image-orientation-none-cross-origin.html
+ Fail => Pass css/css-inline/baseline-source/baseline-source-last-textarea-001.tentative.html
- Pass => Fail css/css-inline/empty-span-size-002.html
+ Fail => Pass css/css-multicol/multicol-width-negative-001.xht
+ Fail => Pass css/css-page/monolithic-overflow-014-print.html
- Pass => Fail css/css-ruby/br-clear-all-000.html
- Pass => Fail css/css-ruby/empty-ruby-base-container.html
- Pass => Fail css/css-ruby/empty-ruby-text-container-abs.html
- Pass => Fail css/css-ruby/empty-ruby-text-container-float.html
- Pass => Fail css/css-ruby/ruby-base-container-abs.html
- Pass => Fail css/css-ruby/ruby-base-container-float.html
- Pass => Fail css/css-sizing/intrinsic-percent-replaced-008.html
- Pass => Fail css/css-sizing/intrinsic-percent-replaced-dynamic-005.html
- Pass => Fail css/css-text-decor/text-decoration-skip-spaces-001.html
- Pass => Fail css/css-text/hanging-punctuation/hanging-punctuation-first-002.html
+ Fail => Pass css/css-text/line-breaking/line-breaking-atomic-002.html
+ Fail => Pass css/css-text/line-breaking/line-breaking-atomic-009.html
+ Fail => Pass css/css-text/line-breaking/line-breaking-replaced-004.html
+ Fail => Pass css/css-text/overflow-wrap/overflow-wrap-min-content-size-002.html
+ Fail => Pass css/css-text/shaping/shaping-002.html
+ Fail => Pass css/css-text/shaping/shaping-003.html
+ Fail => Pass css/css-text/shaping/shaping-008.html
+ Fail => Pass css/css-text/shaping/shaping-017.html
+ Fail => Pass css/css-text/shaping/shaping-018.html
+ Fail => Pass css/css-text/shaping/shaping-021.html
+ Fail => Pass css/css-text/shaping/shaping-024.html
+ Fail => Pass css/css-text/text-align/text-align-match-parent-05.html
+ Fail => Pass css/css-text/text-encoding/shaping-tatweel-003.html
+ Fail => Pass css/css-text/white-space/control-chars-00B.html
+ Fail => Pass css/css-text/white-space/control-chars-085.html
+ Fail => Pass css/css-text/white-space/full-width-leading-spaces-002.html
+ Fail => Pass css/css-text/white-space/full-width-leading-spaces-003.html
- Pass => Fail css/css-text/white-space/full-width-leading-spaces-004.html
+ Fail => Pass css/css-text/white-space/full-width-leading-spaces-005.html
- Pass => Fail css/css-text/white-space/hanging-whitespace-002.tentative.html
+ Fail => Pass css/css-text/white-space/trailing-ideographic-space-006.html
+ Fail => Pass css/css-text/white-space/trailing-ideographic-space-007.html
+ Fail => Pass css/css-text/white-space/trailing-ideographic-space-009.html
+ Fail => Pass css/css-text/white-space/trailing-ideographic-space-012.html
- Pass => Fail css/css-text/white-space/trailing-ideographic-space-013.html
- Pass => Fail css/css-text/white-space/trailing-ideographic-space-014.html
+ Fail => Pass css/css-text/white-space/trailing-ideographic-space-017.html
+ Fail => Pass css/css-text/white-space/trailing-ideographic-space-019.html
+ Fail => Pass css/css-text/white-space/trailing-ideographic-space-020.html
+ Fail => Pass css/css-text/white-space/trailing-ideographic-space-022.html
+ Fail => Pass css/css-text/white-space/trailing-ideographic-space-023.html
+ Fail => Pass css/css-text/white-space/trailing-ideographic-space-025.html
+ Fail => Pass css/css-text/word-break/word-break-break-all-008.html
+ Fail => Pass css/css-values/ch-unit-001.html
+ Fail => Pass css/css-values/lh-unit-001.html
+ Fail => Pass css/css-values/lh-unit-002.html
- Pass => Fail css/css-writing-modes/abs-pos-with-replaced-child.html
+ Fail => Pass css/css-writing-modes/text-combine-upright-shadow.html
+ Fail => Pass css/filter-effects/effect-reference-after-001.html

Generated by the WPT workflow.

Link to Devin session: https://dioxus.staging.devinenterprise.com/sessions/3817a3c1194f47afbc30e587ba79678f
Requested by: @nicoburns

@staging-devin-ai-integration

Copy link
Copy Markdown
Contributor

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR that start with 'DevinAI' or '@devin'.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment, CI, and merge conflict monitoring

@staging-devin-ai-integration
staging-devin-ai-integration Bot changed the base branch from devin/1786754807-taffy-last-baseline to main August 18, 2026 23:32
@staging-devin-ai-integration
staging-devin-ai-integration Bot force-pushed the devin/1787089158-inline-box-baseline-721 branch from 9a874e1 to 54cabab Compare August 19, 2026 00:33
…tive-leading fixes

- Inline-block uses its last in-flow line box baseline, but inline
  flex/grid containers use their first baseline per css-align.
- Bump parley to DioxusLabs/parley#10 which fixes clamping of negative
  half-leading in line extents and adds opt-in CSS2 \u00a7 10.8 line-box strut
  support; enable the strut in Blitz's inline layout.
- With an explicit baseline, an inline box's line-height contribution may
  legitimately be negative, so only clamp reserved space for bottom-aligned
  boxes, and position baseline-aligned boxes from the top of their margin
  box.
Enabling the strut regressed ~200 WPT tests whose references use
vertical-align: top images to suppress the descender gap below
baseline-aligned images, which Blitz cannot yet honor.
@staging-devin-ai-integration
staging-devin-ai-integration Bot force-pushed the devin/1787089158-inline-box-baseline-721 branch from 54cabab to 45b4b4b Compare August 19, 2026 11:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant