Maison > interface Web > tutoriel CSS > Couper la moutarde avec les requêtes médiatiques CSS

Couper la moutarde avec les requêtes médiatiques CSS

Lisa Kudrow
Libérer: 2025-02-24 08:32:11
original
475 Les gens l'ont consulté

Cutting the Mustard with CSS Media Queries

Points de base

  • La technologie "Cutting the Mustard" utilise JavaScript pour détecter les fonctionnalités du navigateur, puis charge CSS et JavaScript supplémentaires pour fournir une expérience utilisateur améliorée;
  • L'auteur recommande d'utiliser les requêtes multimédias CSS pour charger conditionnellement les feuilles de style basées sur la fonctionnalité du navigateur, évitant ainsi le JavaScript et empêchant les navigateurs plus âgés de charger des feuilles de style conçues pour les nouveaux navigateurs.
  • L'auteur propose une méthode pour déterminer si la propriété est définie en utilisant des attributs CSS non défauts inoffensifs sur l'élément corporel et en utilisant JavaScript et getComputedStyle pour charger ou uniquement dans les navigateurs pris en charge ou exécuter le script.
  • L'auteur fournit le code final combinant toutes les techniques de discussion pour démontrer un moyen de détecter des navigateurs relativement nouveaux et d'empêcher les navigateurs plus âgés d'appliquer des styles ou d'exécuter des scripts, permettant aux développeurs de se concentrer sur de nouveaux navigateurs de construction de fonctions.

"Couper la moutarde" est un terme inventé par Tom Maslen de la BBC. Cette méthode utilise JavaScript pour vérifier les fonctionnalités du navigateur, puis charger plus de CSS et JavaScript pour fournir une expérience "améliorée";

Récemment, l'intérêt pour la "coupe de la moutarde" a augmenté, tel que "migrer vers Flexbox grâce à" Couper la moutarde "et" coupe de moutarde côté serveur ", et des améliorations plus largement progressives.

Méthode d'amélioration

Cependant, d'après mon expérience, même une expérience "noyau" très basique peut causer des problèmes sur certains navigateurs très anciens, donc je veux améliorer cela pour voir s'il est possible de le rejeter complètement ne laissant que HTML derrière.

Bien sûr, la solution évidente est d'utiliser JavaScript pour charger conditionnellement tous les CSS (si le navigateur passe le test "Cutting the Mustard"), mais cela me semble trop rude; L'appareil sera puni pour n'avoir aucun style. J'ai donc cherché un moyen de résoudre ce problème en utilisant CSS uniquement et j'ai trouvé un ancien article de Craig Buckler. Après de nombreuses expériences et ajustements, j'ai trouvé la méthode suivante:

<link rel="stylesheet" href="css/your-stylesheet.css" media="only screen and (min-resolution: 0.1dpcm)">
<link rel="stylesheet" href="css/your-stylesheet.css" media="only screen and (-webkit-min-device-pixel-ratio:0) and (min-color-index:0)">
Copier après la connexion
Copier après la connexion
Copier après la connexion

Analysons ce qui se passe ici.

Principe de travail

La requête multimédia pour le premier élément <link> permet uniquement à la feuille de styles d'être chargée dans les navigateurs suivants:

  • ie 9
  • ff 8
  • opéra 12
  • chrome 29
  • Android 4.4

La requête multimédia pour le deuxième élément <link> permet uniquement à la feuille de styles d'être chargée dans les navigateurs suivants:

  • chrome 29
  • opéra 16
  • safari 6.1
  • iOS 7
  • Android 4.4

Lorsqu'il est utilisé en conjonction, cette technique ne charge pas de feuilles de style à moins que le navigateur ne soit le suivant:

  • ie 9
  • ff 8
  • opéra 12, 16
  • chrome 29
  • safari 6.1
  • iOS 7
  • Android 4.4

Remarque: La feuille de style n'est chargée qu'une seule fois quel que soit le nombre d'éléments <link>.

Les requêtes multimédias peuvent être combinées en un élément <link> par des déclarations de séparation des virgules, comme indiqué ci-dessous:

<link rel="stylesheet" href="css/your-stylesheet.css" media="only screen and (min-resolution: 0.1dpcm)">
<link rel="stylesheet" href="css/your-stylesheet.css" media="only screen and (-webkit-min-device-pixel-ratio:0) and (min-color-index:0)">
Copier après la connexion
Copier après la connexion
Copier après la connexion

Cependant, je préfère personnellement les séparer parce que je trouve plus facile de voir ce qui se passe.

Donc, si vous construisez les balises de manière sémantique et accessible, les navigateurs hérités sont toujours en mesure de visualiser le contenu que vous ne stylisez pas en HTML ordinaire.

C'est bien sûr très subjectif, mais mon point est que quiconque utilise encore ces navigateurs devrait être en mesure d'obtenir ce dont ils ont besoin. Il est très probable qu'en fournissant à ces navigateurs CSS pour les navigateurs plus récents, un contenu sera interrompu, ce qui peut signifier que la page est complètement inutilisable. En utilisant cette méthode, ils peuvent obtenir au moins une page propre. Plus important encore, vous n'aurez plus jamais besoin de tester dans ces navigateurs. Vous avez terminé! Du moins, en théorie.

Bien sûr, vos besoins de soutien peuvent varier, mais l'avantage de cette technologie est que vous pouvez y construire. Par exemple, si vous devez ajouter la prise en charge de IE8, vous pouvez utiliser des annotations conditionnelles pour charger la même feuille de style uniquement pour ce navigateur:

<link rel="stylesheet" href="css/your-stylesheet.css" media="only screen and (min-resolution: 0.1dpcm), only screen and (-webkit-min-device-pixel-ratio:0) and (min-color-index:0)">
Copier après la connexion
Copier après la connexion
Organisez si vous devez prendre en charge les anciens appareils WebKit avec un rapport pixel supérieur à 1, vous pouvez ajouter un autre élément

avec une requête multimédia cible comme suit: <link>

<!--[if IE 8]>
  <link rel="stylesheet" href="css/your-stylesheet.css">
<![endif]-->
Copier après la connexion
Copier après la connexion
En soi, cela ne fera que charger la feuille de style pour Android 2.2 (je ne peux pas tester les versions antérieures), mais comme il est inclus dans les éléments

autres , cela ajoutant simplement la prise en charge de cet ensemble d'autres navigateurs. <link> Vous pouvez également modifier la requête multimédia principale pour l'élément

que je fournis ici pour obtenir le support personnalisé dont vous avez besoin. Cependant, il faut beaucoup de tests pour ce faire, alors soyez prudent!

<link>

"Mais ce sont des hacks!"

Oui, je suppose qu'ils le sont, mais cela dépend de votre définition. Les requêtes multimédias sont conçues pour tester les fonctionnalités du navigateur avant d'appliquer CSS, et c'est exactement ce que nous voulons faire dans ce cas, bien que indirectement.

Néanmoins, je suis satisfait de la technologie, que ce soit le piratage ou non, et cela fonctionne bien dans tous mes tests, et je prévois de l'utiliser bientôt pour le site de production.

inefficacité

Dans tous les tests que j'ai effectués jusqu'à présent, je n'ai trouvé qu'une seule situation où les choses ne fonctionnent pas comme prévu. Sur Android 4.4, les navigateurs UC ne répondent pas aux requêtes multimédias. Pour autant que je sache, les navigateurs UC utilisent des versions plus anciennes de WebKit, ce qui explique cela.

Si vous souhaitez prendre en charge ce navigateur, vous pouvez forcer le chargement CSS avec un petit nombre d'agents utilisateur reniflant:

<link rel="stylesheet" href="css/your-stylesheet.css" media="only screen and (min-resolution: 0.1dpcm)">
<link rel="stylesheet" href="css/your-stylesheet.css" media="only screen and (-webkit-min-device-pixel-ratio:0) and (min-color-index:0)">
Copier après la connexion
Copier après la connexion
Copier après la connexion

En prime, pour autant que je sache, JavaScript ne peut pas être désactivé dans les navigateurs UC Android, de sorte que les feuilles de style doivent toujours être chargées à moins que les défaillances du réseau, etc.

Bien sûr, si vous constatez que vous devez prendre en charge d'autres navigateurs spécifiques, vous pouvez toujours ajouter à la condition de reniflement de l'agent utilisateur, mais je recommande de l'utiliser avec prudence car elle viole ce type de CSS uniquement But de la technologie.

J'ai fait une page de test pour tester la méthode de base sur différents navigateurs. Si vous trouvez que des navigateurs ne fonctionnent pas comme prévu, ou si vous trouvez d'autres requêtes multimédias qui peuvent ajouter une prise en charge d'un navigateur ou d'un navigateur spécifique, faites-le moi savoir dans les commentaires ou posez une question dans le référentiel GitHub.

Chargez le script?

ok, si vous utilisez CSS pour détecter la prise en charge du navigateur, vous voudrez probablement charger ou exécuter certains ou tous les scripts du navigateur que vous prenez en charge. Alors, comment pouvons-nous faire cela?

D'accord, il y a plusieurs façons de le faire, mais j'ai trouvé que le plus facile est le suivant:

  • Dans la feuille de style, insérez une propriété CSS non défaut inoffensive sur l'élément corporel.
  • Utilisez JavaScript et getComputedStyle pour déterminer si votre attribut est défini sur l'élément corporel.
  • Si définissez, exécutez ou chargez un autre javascript.

Par exemple, la valeur par défaut de l'attribut clear est none. Le régler sur le corps both a peu d'effet sur l'écran de la page (si c'est le cas, vous devez utiliser d'autres propriétés). Ainsi, le code de votre feuille de style ressemblera à ceci:

<link rel="stylesheet" href="css/your-stylesheet.css" media="only screen and (min-resolution: 0.1dpcm), only screen and (-webkit-min-device-pixel-ratio:0) and (min-color-index:0)">
Copier après la connexion
Copier après la connexion

dans votre page (ou fichier de script):

<!--[if IE 8]>
  <link rel="stylesheet" href="css/your-stylesheet.css">
<![endif]-->
Copier après la connexion
Copier après la connexion

Code final

Qu'il s'agisse d'un piratage ou non, ce que j'essaie de montrer ici est une méthode réutilisable pour détecter des navigateurs relativement nouveaux et empêcher les navigateurs plus âgés d'appliquer des styles ou d'exécuter des scripts, ce qui leur a montré affichant uniquement le HTML de la page. Il y a très peu de code requis et cela devrait vous permettre de vous concentrer sur la construction de fonctionnalités merveilleuses pour des navigateurs plus modernes en utilisant des technologies plus modernes sans s'en soucier.

Bien que vous n'ayez peut-être pas besoin de tout ce que j'ai fourni ici, assembler toutes les pièces donnera les résultats suivants:

<link rel="stylesheet" href="css/your-stylesheet.css" media="only screen and (-webkit-min-device-pixel-ratio:1.1)">
Copier après la connexion

J'ai fait une autre page de test avec tout le contenu supplémentaire ( SitePoint supprime occasionnellement la démo vieille des années hébergée sur des pages HTML distinctes. Nous le faisons pour réduire le code obsolète (avec des vulnérabilités publiques) utilisateurs.

remerciements

Je ne serais pas en mesure de le faire sans le travail de Browserstack, puis-je utiliser et le personnel de Browserhacks et Jeff Clayton, donc grâce à toutes les personnes impliquées, faites-moi savoir si vous avez des idées ou des commentaires.

FAQ sur les requêtes de médias CSS et "Couper la moutarde" (FAQ)

Que signifie "couper la moutarde" dans les requêtes médiatiques CSS?

Dans le contexte des requêtes multimédias CSS, "Couper la moutarde" est utilisée pour décrire une technologie dans laquelle un site Web ou une application Web vérifie si le navigateur de l'utilisateur prend en charge certaines fonctionnalités avant de fournir une expérience complète. Si le navigateur ne peut pas "couper la moutarde", un site Web ou une version d'application plus simple et plus basique sera disponible. Cette approche garantit que tous les utilisateurs peuvent accéder au contenu du site Web, quelle que soit la fonctionnalité de leur navigateur.

Comment déterminer si le navigateur "coupe la moutarde"?

Pour déterminer si le navigateur "coupe la moutarde", vous pouvez utiliser des tests JavaScript simples. Ce test vérifie si le navigateur prend en charge certaines fonctionnalités telles que querySelector et localStorage. Si le navigateur réussit le test, il est considéré comme «couper la moutarde» et peut gérer l'expérience complète du site Web ou de l'application.

Pourquoi la technologie «couper la moutarde» est-elle importante?

"Couper la moutarde" est importante car elle garantit que votre site Web ou votre application Web est accessible à tous les utilisateurs, quelle que soit la fonctionnalité de leur navigateur. En fournissant une version plus simple du site Web aux navigateurs qui ne peuvent pas "couper la moutarde", vous pouvez vous assurer que tous les utilisateurs ont accès à votre contenu.

Puis-je utiliser les requêtes multimédias CSS sans javascript?

Oui, vous pouvez utiliser les requêtes multimédias CSS sans javascript. Cependant, l'utilisation de JavaScript avec CSS Media Queries vous permet de fournir aux utilisateurs une expérience plus personnalisée en fonction de leurs capacités de navigateur.

Quels sont les exemples de fonctionnalités qui peuvent être vérifiés dans le test "Couper la moutarde"?

Le test "Cutting the Mustard" peut vérifier les fonctionnalités telles que

, querySelector et localStorage. Ce sont toutes des fonctionnalités prises en charge par des navigateurs modernes, mais peuvent ne pas être disponibles dans les navigateurs plus âgés. addEventListener

Comment implémenter le test "Cutting the Mustard" dans mon site Web ou mon application Web?

Pour implémenter le test "Cutting the Mustard", vous pouvez utiliser un test JavaScript simple pour vérifier certaines fonctionnalités. Si le navigateur réussit le test, vous pouvez utiliser CSS Media Queries pour offrir une expérience complète du site Web ou de l'application.

Que se passe-t-il si le navigateur ne peut pas "couper la moutarde"?

Si le navigateur ne peut pas "couper la moutarde", il obtiendra un site Web ou une version d'application plus simple et plus basique. Cela garantit que tous les utilisateurs peuvent accéder à votre contenu, quelle que soit la fonctionnalité de leur navigateur.

Puis-je personnaliser l'expérience que je fournis à un navigateur qui ne peut pas "couper la moutarde"?

Oui, vous pouvez personnaliser l'expérience que vous fournissez aux navigateurs qui ne peuvent pas "couper la moutarde". Vous pouvez utiliser CSS Media Query pour personnaliser la conception et les fonctionnalités d'un site Web ou d'une application pour ces navigateurs.

y a-t-il des inconvénients à utiliser la technologie "Cutting the Mustard"?

Un inconvénient potentiel de l'utilisation de la technologie «Couper la moutarde» est qu'il nécessite un temps de développement supplémentaire pour créer et tester des versions simplifiées de sites Web ou d'applications. Cependant, les avantages de s'assurer que tous les utilisateurs ont accès au contenu l'emportent souvent sur ce désavantage.

La technologie de «couper la moutarde» est-elle toujours pertinente aujourd'hui?

Oui, la technologie de «couper la moutarde» est toujours pertinente aujourd'hui. Bien que les navigateurs modernes prennent en charge une grande variété de fonctionnalités, il y a encore de nombreux utilisateurs utilisant des navigateurs plus anciens qui peuvent ne pas les soutenir. En utilisant la technologie «Couper la moutarde», vous pouvez vous assurer que votre site Web ou votre application est accessible à tous les utilisateurs.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal