Now that Firefox Quantum 57 is out with substantial — and potentially breaking — improvements to Gecko collectively known as Stylo or Quantum CSS, you may find yourself in a situation where you have to distinguish between legacy versions of Firefox and Firefox Quantum.
From my answer here:
You can use
@supports
with acalc(0s)
expression in conjunction with@-moz-document
to test for Stylo — Gecko does not support time values incalc()
expressions but Stylo does:@-moz-document url-prefix() { @supports (animation: calc(0s)) { /* Stylo */ } }
Here's a proof-of-concept:
_x000D__x000D__x000D__x000D__x000D_body::before {_x000D_ content: 'Not Fx';_x000D_ }_x000D_ _x000D_ @-moz-document url-prefix() {_x000D_ body::before {_x000D_ content: 'Fx legacy';_x000D_ }_x000D_ _x000D_ @supports (animation: calc(0s)) {_x000D_ body::before {_x000D_ content: 'Fx Quantum';_x000D_ }_x000D_ }_x000D_ }
Targeting legacy versions of Firefox is a little tricky — if you're only interested in versions that support
@supports
, which is Fx 22 and up,@supports not (animation: calc(0s))
is all you need:@-moz-document url-prefix() { @supports not (animation: calc(0s)) { /* Gecko */ } }
... but if you need to support even older versions, you'll need to make use of the cascade, as demonstrated in the proof-of-concept above.