IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Contribuez Discussion :

Sélecteurs css pour ie et javascript en remplacement des hack


Sujet :

Contribuez

  1. #1
    Membre averti
    Avatar de cahnory
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 203
    Points : 401
    Points
    401
    Par défaut Sélecteurs css pour ie et javascript en remplacement des hack
    Bonjour à tous !
    Je vous présente une technique html permettant, coté css de cibler les différentes version d'Internet Explorer ainsi que les navigateurs ayant javascript activé ou non.
    L'idée de départ (source dans le lien) permettait d'obtenir une classe .ISIE67 en ajoutant des commentaires conditionnels autour de la balise body.
    Parti de là, j'ai poussé un peu l'idée jusqu'à obtenir une palette de sélecteurs permettant de cibler les différentes versions d'Internet Explorer, les autres navigateurs (mais sans distinction entre eux) ainsi que la présence de javascript.

    Les sélecteurs utilisables :
    .ie5
    .ie6
    .ie7
    .ie8
    .nie (Navigateur autre qu'Internet Explorer)

    mais aussi :
    .lt-ie6
    .lt-ie7
    .lt-ie8

    .lte-ie5
    .lte-ie6
    .lte-ie7
    .lte-ie8

    .gt-ie5
    .gt-ie6
    .gt-ie7

    .gte-ie5
    .gte-ie6
    .gte-ie7
    .gte-ie8

    et pour le javascript :
    #nojs
    #js

    Pourquoi un id pour le js et des classes pour le navigateur ?
    Tout d'abord, des classes pour le navigateur car plusieurs classes sont déclarées à la fois (avec ie 5 par exemple : ie5, lte-ie5, lt-ie6, lte-ie6, lt-ie7, lte-ie7, lt-ie8, lte-ie8 et gte-ie5) et un élément html ne doit avoir qu'un seul identifiant (qui lui même ne peut être présent que sur un seul élément).
    Concernant javascript l'utilisation de l'id est motivée par deux raisons simples. Si l'on ajoute une classe nojs/js à body (comme pour les navigateurs) on pourrait avoir besoin d'utiliser des sélecteurs du type .js.ie-6 hors certaines versions d'Internet Explorer ont du mal à interpréter ce genre de sélecteurs (plusieurs classes sur un même élément). En passant par un id nous n'avons plus ce problème, les sélecteurs du type #js.ie-6 étant bien pris en compte.
    Dans le cas présent l'id est placé sur la balise html (ça n'apporte pas de gros changement si ce n'est que l'on peut de nouveau utiliser un id personnalisé pour body). La balise html ne peut avoir de class ce qui nous limite donc naturellement à l'utilisation d'un id.

    Démonstration et sources
    Vous pouvez avoir un aperçu de cette technique ainsi que les sources à cette adresse :
    http://www.cahnory.fr/css/browser-check.html

    Aller plus loin
    Il est tout à fait possible d'aller encore plus en détail dans la détection d'ie, les seules limitations étant celles des commentaires conditionnels dont vous trouverez une description détaillées directement à la source :
    http://msdn.microsoft.com/en-us/libr...12(VS.85).aspx

    J'espère vous avoir intéressé.

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    ça m'a l'air bien pratique tout ça ! à garder sous le coude

    Te décourage pas, cahn, tu fais du bon boulot !
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 49
    Points : 16
    Points
    16
    Par défaut
    J'ai testé, ça fonctionne bien, sauf avec le "!IE", qui ignore Chrome...

  4. #4
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Que voulez-vous dire par "ignorer" ? Chrome est (était ?) en partie dépendant d'IE.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 49
    Points : 16
    Points
    16
    Par défaut
    Ok mais lorsque je mets le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <!--[if IE 5]><body class="ie ie5 lte-ie5 lt-ie6 lte-ie6 lt-ie7 lte-ie7 lt-ie8 lte-ie8 gte-ie5"><![endif]-->
    <!--[if IE 6]><body class="ie ie6 lte-ie6 lt-ie7 lte-ie7 lt-ie8 lte-ie8 gt-ie5 gte-ie5 gte-ie6"><![endif]-->
    <!--[if IE 7]><body class="ie ie7 lte-ie7 lt-ie8 lte-ie8 gt-ie5 gte-ie5 gt-ie6 gte-ie6 gte-ie7"><![endif]-->
    <!--[if IE 8]><body class="ie ie8 lte-ie8 gt-ie5 gte-ie5 gt-ie6 gte-ie6 gt-ie7 gte-ie7 gte-ie8"><![endif]-->
    <!--[if !IE]><!--><body class="nie"><!--<![endif]-->
    Il n'est pris en compte par aucune partie. Comment faire ?!


    Merci,

  6. #6
    Expert éminent sénior

    Avatar de vermine
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    6 582
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2008
    Messages : 6 582
    Points : 79 912
    Points
    79 912
    Par défaut
    Je ne comprends pas bien cette ligne-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <!--[if !IE]><!--><body class="nie"><!--<![endif]-->

Discussions similaires

  1. Les meilleurs livres pour apprendre le JavaScript
    Par vermine dans le forum Livres
    Réponses: 23
    Dernier message: 10/06/2019, 18h58
  2. Java est mort et JavaScript pourrait remplacer Flash pour les développeurs, qu'en pensez-vous ?
    Par Katleen Erna dans le forum Débats sur le développement - Le Best Of
    Réponses: 138
    Dernier message: 18/10/2013, 11h52
  3. Réponses: 138
    Dernier message: 18/10/2013, 11h52
  4. [Debutant] Logiciel pour développer en javascript
    Par cosmos38240 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 14/02/2005, 17h08
  5. [Tomcat]Comment configurer Tomcat pour faire du javascript ?
    Par uliss dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 10/02/2005, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo