Build1 distinct publisher3 min readUpdated
Chromium 129 shipped interpolate-size, which resolves auto to a real number before a transition starts. The guessed ceiling and the scrollHeight bookkeeping are both deletable.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
Chromium 129 shipped `interpolate-size`, a property that tells the engine it may treat intrinsic keywords such as `auto`, `max-content` and `fit-content` as values it can animate toward instead of refusing on principle [9]. That reclassifies every `max-height` ceiling in your accordions and drawers: it is no longer a number to re-tune when content grows, it is a few lines to remove [2][11].
The reason the hack existed is worth being precise about, because it was not a skill issue. A CSS transition takes a start value and an end value and asks the engine to compute the frames in between, which only works if both ends are actual numbers; `auto` was never a number, it was an instruction to run layout and use whatever height comes out [7]. The engine could not interpolate toward an instruction it had not resolved yet, so its only options were to snap to the computed height or to decline the transition on that property [8]. Every workaround in your codebase exists to hand it a real number.
Both workarounds have a failure mode you have probably already paid for. The `max-height: 0` to `max-height: 500px` pattern passes review and then breaks quietly: when the real content reaches 640px, the panel clips the last two lines with no scrollbar and no error [2][3], which is 140px of content silently gone [14]. Bumping the ceiling to 9999px moves the cost somewhere less visible. An 80px panel now animates from 0 toward 9999 and merely arrives at its real height early, producing a pause you can see if you watch for it [4]. Assuming linear interpolation, that panel is done in about 0.8 percent of a 300ms transition, roughly 2.4ms, leaving about 297.6ms in which nothing on screen changes [15]. The JavaScript version is honest about reality, reading `scrollHeight` and writing it back as a pixel height [5], but it forces a layout read on every toggle, and a cached `scrollHeight` goes stale the moment an image loads or a thread grows inside an open panel, so you add a `ResizeObserver` to keep the number truthful [6]. A right number with its own maintenance schedule is still maintenance.
The replacement is `interpolate-size: allow-keywords` set once on `:root`, after which `height: 0` transitioning to `height: auto` behaves like a transition to `320px`, because the browser resolves the real computed height before the animation starts [10][11]. The default is `numeric-only`, the old behaviour, so adding the declaration does not change anything until you opt a page in [10]. If you need an intermediate stop rather than a flat open and close, `calc-size()` does arithmetic on an intrinsic keyword, with `size` standing in for the basis: `calc-size(auto, size * 0.7)` is 70 percent of the content's natural height [12].
Two things to watch. The source names only Chromium 129 and does not state support in other engines [16], so grep for round `max-height` numbers now but gate the deletion on your own support matrix rather than on the demo. And the author's own read is that almost nobody is using this yet [13], which means the pattern in your codebase is still the one every new hire will copy from the last panel they opened.
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
The source article names only Chromium 129 as having shipped interpolate-size and does not state support status in other browser engines.
For over a decade CSS could not transition to height: auto; it genuinely does not work.
The common workaround is .panel { max-height: 0; overflow: hidden; transition: max-height 300ms ease } with .panel.open { max-height: 500px }, where 500px is a guess assumed to be bigger than the content will ever be.
When real content in such a panel reaches 640px, the panel clips the last two lines with no scrollbar and no error, silently losing content.
Raising the ceiling to 9999px makes every short panel, including ones that are 80px tall, take the same visible beat to open, because the browser animates from 0 to 9999 and happens to arrive at the real content height early; the pause is visible if you watch closely.
The JavaScript alternative sets panel.style.height to panel.scrollHeight + 'px' when opening and '0px' when closing, reading the real height instead of guessing.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Mechanism well explained, but single-publisher and unverified
The technical core is specific and internally coherent: named property and version, default value, working code for both the hack and the replacement, and a causal account of why interpolation needs numeric endpoints. Against that, the cluster contains exactly one dev.to post with no vendor release note, spec citation, or independent compatibility data, and the adoption assertion is unsupported, so the evidence base is a competent explainer rather than corroborated reporting.
Shipped in one engine family, uptake asserted to be negligible
There is a concrete shipping event (Chromium 129, so Chrome and Edge 129+ and siblings), which is real availability for a large share of browser traffic, but the same source reports no shipped Firefox or Safari implementation and describes developer usage as near zero. That combination supports a low measured adoption level: available but not yet a default authoring pattern.
Headline overreaches slightly; body discloses the limits
The framing that your max-height ceiling is 'a bug you can delete' runs ahead of a feature that animates only in Chromium-based browsers, and 'height:auto is animatable now' omits that two major engines still snap. The overstatement is modest rather than severe because the article itself names the support gap, explains the numeric-only fallback, and points at @supports, so a careful reader is not misled — the gap sits mainly in the framing.
Engagement-driven developer blog, no disclosed commercial stake
The post is an individual author on a community publishing platform, using confrontational hooks ('watch them shrug', 'Quick check before you scroll') and an embedded interactive demo prompt that reward attention and engagement. No vendor sponsorship, product being sold, or affiliation with a browser maker is disclosed, and the article volunteers unflattering limitations, so the incentive to distort is present but mild and structural rather than commercial.
Moderate: verifiable technical substance, single publisher
Confidence is limited by cluster structure rather than by contradiction: one publisher, one article, no vendor or spec corroboration, and one ledger framing (that other engines' status is unstated) that the source body itself contradicts. The mechanism and code-level claims are precise enough to be checked and are consistent throughout, which keeps confidence near mid-range rather than low.
build
The third answer: a dead-code tool allowed to say "not traced yet"1 distinct publisher
build
Your overlay is in the wrong coordinate space, and scroll is the tell1 distinct publisher
build
The .mp4 that was never H.264: how a healthy serving path hid a codec bug1 distinct publisher
build
The fourth Web Push requirement: iOS will not deliver until the user installs your site1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 15, 2026