La règle @supports
permet une requête de fonctionnalité, comme l'expose Mozilla Developper Network :
@supports.
Raphaël Goetter explique que la reconnaissance des propriétés avec @supports
peut recourir à Css ou à JavaScript :
Détecter le support des fonctionnalités avec @supports.
Cependant, CSS Feature Queries n'est pas supporté par tous les navigateurs, ainsi que le montre Can I Use : CSS Feature Queries.
Même si existent certains faux positifs, l'avantage de cette fonctionnalité est de proposer une détection robuste, sans recourir à des détections hasardeuses.
À notre avis, l'utilisation de JavaScript est plus pertinente : asurer un double, voire triple, support en Css pose vite des problèmes insolubles d'écriture en Html. Avec JavaScript, on détecte le support, puis, par exemple, on ajoute une classe à <html>
.
À titre de démonstration, nous allons voir comment détecter les supports de Flexible Box Layout Module
et de CSS Grid Layout
pour assurer la mise en page.
Voici deux ressources à propos de CSS Grid Layout
:
Pour déterminer si le navigateur prend en charge les unités rem, vh, vw ainsi que la fonctionnalité cal(), nous pouvons écrire...
if (CSS.supports('font-size', 'calc(1rem - 10px)') && CSS.supports('display', 'flex') && CSS.supports('font-size', '1rem') && CSS.supports('font-size', '1vh') && CSS.supports('font-size', '1vw')) {
console.log('ok');
}
... Voire plus succintement...
if (CSS.supports('font-size', 'calc(1rem + 1vh + 1vw + 1px)') && CSS.supports('display', 'flex')) {
console.log('ok');
}