Run the rails past the footer, and stop stacking two rules at one height - #8
Merged
Merged
Conversation
Two visible defects, both reported from a screenshot. **The vertical lines stopped dead above the footer.** `row-span-full` compiles to `grid-row: 1 / -1`, and `-1` counts back from the last line of the *explicit* grid. The layout declared `grid-cols` and nothing else, so every row was implicit, `-1` resolved to line 1, and the span collapsed to a single row: both gutters and both container rails ended where `<main>` ended and the footer stood beside nothing. Declaring `grid-rows-[1fr_auto]` makes `-1` mean what it reads like, and the `1fr` also pins the footer to the bottom on short pages, which `min-h-dvh` alone never did. **The gutter printed 08 and 09 on top of each other.** Five places had one block closing with a rule and the next opening with one. Two rules at the same y draw a single hairline and consume two ordinals, so the numbers collided — on the homepage at the join between the hero screenshot and the spec table, and four more times elsewhere. A boundary is one rule, and it belongs to whatever closes; the opening rules are gone from spec-strip, objection-row, download-rail, pricing's billing toggle and Download's system-requirements line. Both are held by tests now. The rule test was verified by reintroducing the spec-strip rule and watching it fail with "Rules 8/9 render at the same height" — the exact pair in the screenshot. It treats only `<section>` and unstyled `<div>` as transparent, since anything that can carry height genuinely separates two rules, and `scroll-mt-*` is excluded because it is scroll-margin and adds no layout height — which is precisely what fooled my first attempt at finding these by hand.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Both of these were reported from a screenshot, and both are mine.
The vertical lines stopped dead above the footer
row-span-fullcompiles togrid-row: 1 / -1, and-1counts back from thelast line of the explicit grid. The layout declared
grid-colsand nothingelse, so every row was implicit,
-1resolved to line 1, and the span collapsedto a single row. Both gutters and both container rails ended exactly where
<main>ended, and the footer stood beside nothing.grid-rows-[1fr_auto]makes-1mean what it reads like. The1fralso pinsthe footer to the bottom on short pages, which
min-h-dvhalone never did.PR #3 moved the rails out of
<main>specifically so they would "carry on pastthe content and down the side of the footer" — the markup was right and the
grid silently refused to honour it.
The gutter printed 08 and 09 on top of each other
Five places had one block closing with a rule and the next opening with one. Two
rules at the same y draw a single hairline but consume two ordinals, so the
numbers collided. On the homepage that was the join between the hero screenshot
and the spec table — the exact "08/09" in the screenshot — plus four more.
A boundary is one rule and it belongs to whatever closes. The redundant opening
rules are gone from
spec-strip,objection-row,download-rail, pricing'sbilling toggle and Download's system-requirements line. 125 rules become 120,
and nothing changes visually: the line was always being drawn by the block above.
Both are held by tests
The rule test was proved by reintroducing the spec-strip rule and watching it
fail with "Rules 8/9 render at the same height" — the exact pair in the
screenshot — then pass again on revert.
It treats only
<section>and unstyled<div>as transparent, because anythingthat can carry height genuinely separates two rules.
scroll-mt-*isspecifically excluded: it is scroll-margin and adds no layout height, and
mistaking it for margin is what made my first two attempts at finding these by
hand come back clean.
Verification
typecheck, build and pint clean. 107 tests / 1852 assertions with
REQUIRE_SSR=1. All nine page types re-rendered and scanned: zero coincidentrules anywhere, footer inside the grid on every one.