Comment puis-je détecter le navigateur de l'utilisateur et de lui appliquer un fichier CSS particulier?
J'ai besoin de détecter le navigateur et de les appliquer à la correspondance fichier CSS.
J'ai créé 3 fichiers css: __ie.css, ff.css, de l'opéra.css. Maintenant, j'ai besoin de détecter le navigateur afin d'inclure la bonne.
Je sais que ce
<!--[if IE]>
<link href="css/ie.css" type="text/css"/>
<![endif]-->
Mais comment dois-je faire la même chose avec Firefox et Opera/Chrome?
OriginalL'auteur Sourav | 2011-04-11
Vous devez vous connecter pour publier un commentaire.
Si vous avez de détecter les navigateurs juste d'appliquer le CSS, alors vous voudrez peut-être repenser votre CSS avant de passer à un navigateur spécifique des feuilles de style. Il suffit d'un navigateur à l'imiter une autre de la chaîne de l'agent utilisateur, ou une nouvelle version à être libéré, et tout se casse. Utiliser les normes en vigueur et de valider votre code (http://validator.w3.org/), et vous aurez à vous soucier beaucoup moins de la croix-problèmes de navigateur. Même en n'utilisant que
<!--[if IE]><![endif]-->
sans numéro de version pourrait casser la mise en page dans les versions ultérieures.Cela étant dit, si vous voulez le style de la page différemment selon qu'CSS fonctionnalités sont disponibles, jetez un oeil à Modernizr. De cette façon, vous êtes uniquement les fonctionnalités de vérification, ce qui ne sera pas rompu si une nouvelle version du navigateur est libéré.
Si tout le reste échoue et que vous avez vraiment besoin de détecter le navigateur du visiteur, essayez
jquery.browser
. Il est construit en jQuery, et est simple à utiliser. http://api.jquery.com/jQuery.browser/.Je comprends, mais le navigateur vérification est une bâclée solution au problème. Modernizr vérifie le support de caractéristiques individuelles, et non pas l'existence d'un navigateur en particulier. Des choses comme moderne chaînes d'agent utilisateur qui existent uniquement pour tromper navigateur vérifie car elles conduisent souvent à des ruptures de code que le navigateur est à jour dans le futur. Lisez ce post pour une meilleure compréhension des raisons pour lesquelles la détection du navigateur est un problème: blogs.msdn.com/b/ieinternals/archive/2013/09/21/...
Je suis d'accord. J'ai juste parfois agacé par le obligatoire si-vous-avez-besoin-ce-fonction-vous-êtes-faire-quelque-chose-de mauvaises réponses. Il y a souvent des raisons parfaitement valides pour d'abord souhaitez une fonctionnalité, même si c'est une mauvaise solution. Ensuite, on peut remarquer qu'il existe de meilleures solutions, sans que cela implique que l'affiche est en train de faire à tort et à travers. Mais je ne devrais vraiment pas querelle à ce sujet. Désolé, mon mauvais. Modernizr est plutôt cool, même si le problème est souvent que le navigateur prend en charge une fonctionnalité, mais de les mettre en œuvre, à tort, ce qui montre que dans de rares cas.
Se référant à l'navigateur vérification comme un "sloppy solution" est une question de votre avis et n'est donc pas applicable. Ce devrait être sur les meilleures pratiques pour une solution. Je suis d'accord que moderniste est le meilleur pour ce cas. Cependant, l'abus ou de la fausse attente de la solution pour l'ensemble de ces cas n'est pas le plus pratique. Vous pourriez avoir une communauté d'utilisateurs avec d'anciens navigateurs que vous ne voulez pas de soutien. Un site web professionnel va rediriger l'utilisateur. Fonction Moderniste n'est pas le plus utilisé pour la détection du navigateur qui est la meilleure solution pour rediriger un navigateur non pris en charge.
OriginalL'auteur derekerdmann
Le plus proche, vous pouvez venir avec pur CSS est avec fonction des requêtes. Au lieu de détecter le type/version de navigateur, il vous permet de vérifier si une propriété spécifique/valeur combinaisons sont pris en charge par le navigateur.
L'exemple suivant est un exemple de l'aide de la transformation de la propriété vertical-centrage. Si le navigateur ne supporte pas les transformer, alors nous ne voulons pas d'ajuster son positionnement:
Prise en charge du navigateur pour Fonction de Requêtes
OriginalL'auteur cimmanon
Si vous avez besoin d'un navigateur détecter pour Firefox, Chrome et Opera, alors vous êtes en train de faire quelque chose de mal. Le même CSS devraient travailler dans tous les d'entre eux.
Il y a des exceptions bien sûr-tous les navigateurs ont des fonctionnalités manquantes et des bugs qui n'apparaissent pas dans les autres navigateurs. Un exemple serait
text-overflow:ellipsis
, ce qui n'est pas pris en charge par Firefox.Toutefois, si vous êtes collant aux fonctions couramment utilisées, ces cas sont rares et loin entre, et, en général, vous ne devriez vraiment pas besoin de faire la détection du navigateur ces jours, sauf pour les différentes versions d'IE.
Si vous n'êtes pas sûr de savoir si les fonctions que vous souhaitez utiliser sont pris en charge par la plupart des navigateurs, vous pouvez trouver à CanIUse.com ou Quirksmode.
Si vous utilisez sérieusement les caractéristiques de pointe, alors oui, vous aurez des problèmes avec la croix-prise en charge du navigateur. Mais dans ce cas, il est généralement préférable de faire la détection de fonctionnalité, à l'aide d'un produit comme le Modernizr, plutôt que sur la détection du navigateur, car ce sera un moyen plus fiable de s'assurer que vous couvrez tous les navigateurs et toutes les versions, y compris les nouvelles versions (ce qui est inhérent weakeness de la détection de navigateur).
+1 pour le "vous êtes en train de faire quelque chose de mal".
Pas nécessairement, rendu peut être assez incohérent, indépendamment de tous navigateurs supportant les mêmes règles. Par exemple, le remplissage peut être appliquée différemment. Maintenant, c'est que ça m'arrive, et c'est en 2018. Mais encore rembourrage de
<select>
éléments diffère de façon spectaculaire à partir de Firefox Quantique à google Chrome. Ne m'obtenez pas le mal, c'est ce que je déteste le plus sur le développement web. Mais c'est un fait qui est encore en vie ~6 ans après votre commentaire et cette réponse.Il peut en effet y avoir de petites différences, mais il n'est généralement pas trop difficile de travailler autour d'eux. Si vous regardez les (anciens) original question, il a fait différents fichiers CSS pour IE/Firefox/Opera, qui a été (et est toujours) un cas de de faire le mal.
Je le fixe à l'aide d'un chrome propriété
-webkit-padding-start
. Qui en effet est bien mieux que attempty pour identifier le navigateur. Il ajuste simplement un peu et d'incohérence qui fait mon app regard différent sur les différents navigateurs.OriginalL'auteur Spudley
Il n'y a pas de commentaires conditionnels pour les navigateurs autres qu'IE.
Mais vous pouvez le faire avec javascript: http://www.quirksmode.org/js/detect.html
OriginalL'auteur easwee
Parfois, vous pouvez utiliser le préfixe propriétés que chaque navigateur appliquer leurs propres propriétés en fonction de leurs préfixes et ignorer les autres. Code suivant remplit un arrière-plan en CSS3 gradient:
Dans ce code:
Mais d'une manière générale, la détection de browser n'est pas la meilleure façon, car il peut facilement échouer dans les navigateurs les plus récents. De cette façon, vous avez à la chaîne de l'Agent Utilisateur du navigateur et de l'analyser. Ensuite appliquer certaines règles css pour chaque navigateur basé sur ses fonctionnalités prises en charge. Si la chaîne de l'Agent Utilisateur du navigateur changement dans les versions plus récentes, vous devez modifier votre navigateur renifler code. Imaginez que vous voulez prendre en charge plusieurs navigateurs et chacun d'eux peut libérer certains de nouvelles versions dans un an!
Vous pouvez interroger le navigateur que si elle prend en charge une fonctionnalité donnée. par exemple, la vidéo HTML5:
Il y a une fonctionnalité de détection de la bibliothèque nommée Modernizr qui est écrit basé sur JavaScript. Vous pouvez le télécharger et l'inclure dans votre page html. Aussi, vous devez ajouter "no-js" classe à votre élément. Moderniste s'exécute toutes ses fonctionnalité des tests de détection et de et de certaines classes à l'élément; quelque chose comme ceci:
Ainsi, vous pouvez appliquer des règles CSS de manière sélective. Par exemple, vous souhaitez appliquer une animation 3D transformer en soutenant les navigateurs ou afficher quelque chose dans d'autres. Considérons le code suivant:
pour le cas par défaut et ci-dessous pour alternative:
C'est une bonne l'article décrivant le concept.
Merci pour vos commentaires. J'ai édité mon post.
OriginalL'auteur Abdollah
Je suis peut-être trop tard, mais. La meilleure solution est d'utiliser CSS/JS Navigateur Déterminant (4kb minimisé). Avertissement: C'est un produit commercial que je vends.
Pour séparer les fichiers CSS et JS, passé ce code à votre
<html>
tag:Ce fichier sera chargé uniquement pour les vieux navigateurs (par défaut, ceux qui ne prend pas en charge CSS3 transition). Si vous voulez des fichiers distincts pour chaque navigateur que vous pouvez faire la même chose mais le changement
browser.is_old
àbrowser.chrome
oubrowser.webkit
etc...Ensuite, écrire un peu de CSS pour navigateur spécifique à l'intérieur de la vieille-navigateur.css (ou tout autre fichier CSS):
OriginalL'auteur artnikpro