Skip to content

chore!: raise the Firefox floor to 129, the version our CSS actually needs - #697

Merged
mrholek merged 1 commit into
v6-devfrom
fix/browser-floor-firefox-129-v6
Aug 4, 2026
Merged

chore!: raise the Firefox floor to 129, the version our CSS actually needs#697
mrholek merged 1 commit into
v6-devfrom
fix/browser-floor-firefox-129-v6

Conversation

@mrholek

@mrholek mrholek commented Aug 4, 2026

Copy link
Copy Markdown
Member

.browserslistrc said Firefox 121, set by :has(). Two features have arrived since that line was written and both sit above it.

Measured, not remembered

MDN browser-compat-data for everything modern our compiled CSS emits:

feature occurrences Firefox Safari Chrome
@property 9 128 16.4 85
@starting-style 1 129 17.5 117
transition-behavior: allow-discrete 1 129 17.4 117
:has() 26 121 15.4 105
light-dark() 48 120 17.5 123
color-mix() 251 113 16.2 111
oklch() 96 113 15.4 111

Only Firefox moves: 121 → 129. @starting-style landed in Safari 17.5, which is exactly where light-dark() already put that floor, and Chrome needed 117 against light-dark()'s 123. Safari, iOS and Chrome stay where they are.

Why it is a correctness issue, not tidying

@starting-style degrades gracefully — the Menu appears without its entry animation. @property does not. Those nine registrations exist for one reason: inherits: false. Without them custom properties inherit again and .bg-opacity-25 on a container tints every nested .text-bg-*, .link-opacity-50 fades every nested link. That is the exact bug the comment in mixins/_utilities.scss describes.

So Firefox 121–127 was not a slightly-degraded experience we were knowingly supporting. It was a documented behaviour that does not hold, in browsers we promised.

Coverage

87.06% → 86.47%, measured with npx browserslist --coverage before and after. Upstream Bootstrap v6 sits at Chrome 130 / Firefox 132 / Safari 18, so this line stays more permissive than theirs.

A trap worth recording

caniuse does not track @property, @starting-style or transition-behavior at allnpx browserslist "supports css-at-property" returns nothing, and there is no mdn--prefixed entry either. Anyone checking these with browserslist gets silence, not an answer. The .browserslistrc comment now says to query MDN's browser-compat-data instead, and carries a feature-to-floor table in the shape upstream uses, so the next feature that raises a floor is noticed when it lands rather than months later.

Docs: the browsers & devices page gains the two new rows and a note about what an ignored @property actually does; migration guide updated.

…needs

The floor said Firefox 121, set by :has(). Two features have arrived since
that line was written and both sit above it: @starting-style with
transition-behavior: allow-discrete, which the Menu's entry animation uses
(Firefox 129), and @Property (128).

@Property is the one that matters. Its nine registrations exist to declare
inherits: false, which is what stops a colour or opacity utility on a
container tinting everything nested inside it. Below 128 the registrations
are ignored and that bug is live — so the old floor was not merely
optimistic, it promised support for browsers where a documented behaviour
does not hold.

Safari, iOS and Chrome do not move: @starting-style landed in Safari 17.5,
which is exactly where light-dark() already put that floor, and Chrome
needed 117 against light-dark()'s 123.

Coverage 87.06% -> 86.47%. Upstream Bootstrap v6 sits at Chrome 130 /
Firefox 132 / Safari 18, so this stays more permissive than theirs.

Versions are from MDN's browser-compat-data. caniuse does not track any of
these three features, so `browserslist "supports …"` cannot answer for
them — worth knowing before the next time someone checks.
@coveralls

Copy link
Copy Markdown

Coverage Report for CI Build 30946267740

Coverage increased (+0.007%) to 92.972%

Details

  • Coverage increased (+0.007%) from the base build.
  • Patch coverage: No coverable lines changed in this PR.
  • No coverage regressions found.

Uncovered Changes

No uncovered changes found.

Coverage Regressions

No coverage regressions found.


Coverage Stats

Coverage Status
Relevant Lines: 8668
Covered Lines: 8273
Line Coverage: 95.44%
Relevant Branches: 4821
Covered Branches: 4268
Branch Coverage: 88.53%
Branches in Coverage %: Yes
Coverage Strength: 362.48 hits per line

💛 - Coveralls

@mrholek
mrholek merged commit a312e29 into v6-dev Aug 4, 2026
9 checks passed
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.

2 participants