Comment puis-je cibler seulement Internet Explorer 10 pour certaines situations comme les CSS spécifiques à Internet Explorer ou le code JavaScript spécifique à Internet Explorer?

Comment puis-je cibler seulement Internet Explorer 10 pour certaines situations comme les CSS spécifiques à Internet Explorer ou le code JavaScript spécifique à Internet Explorer?

j'ai essayé, mais ça ne marche pas:

<!--[if IE 10]>    <html class="no-js ie10" lang="en"> <![endif]-->
<!--[if !IE]><!--> <html lang="en" class="no-js"> <!--<![endif]-->

Internet Explorer 10 ignore les commentaires conditionnels et utilise le <html lang="en" class="no-js"> au lieu de <html class="no-js ie10" lang="en"> .

152
demandé sur Peter Mortensen 2012-03-28 06:21:32

24 réponses

peut-être Pouvez-vous essayer quelques jQuery comme ceci:

if ($.browser.msie && $.browser.version === 10) {
  $("html").addClass("ie10");
}

pour utiliser cette méthode, vous devez inclure la bibliothèque jQuery Migrate car cette fonction a été retirée de la bibliothèque jQuery principale.

S'est bien passé pour moi. Mais sûrement pas de remplacement pour les commentaires conditionnels!

60
répondu Max Sohrt 2015-05-04 09:35:11

Je n'utiliserais pas JavaScript navigator.userAgent ou $.navigateur (qui utilise navigator.userAgent ) car il peut être mystifié.

À la cible d'Internet Explorer 9, 10 et 11 (Note: également le dernier Chrome):

@media screen and (min-width:0"151900920") { 
    /* Enter CSS here */
}

pour cibler Internet Explorer 10:

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
    /* IE10+ CSS here */
}

À la cible de Bord du Navigateur:

@supports (-ms-accelerator:true) {
  .selector { property:value; } 
}

Sources:

128
répondu Roni 2015-09-25 20:39:44

j'ai trouvé une solution sur ce site où quelqu'un a eu un précieux commentaire :

la solution est:

if (Function('/*@cc_on return document.documentMode===10@*/')()){
    document.documentElement.className+=' ie10';
}

Il

  • n'a pas besoin de commentaires conditionnels;
  • fonctionne même si le commentaire de décapage de compression/traitement;
  • aucune classe ie10 ajoutée dans Internet Explorer 11;
  • plus probable pour fonctionner correctement avec Internet Explorer 11 dans Internet Explorer 10 mode de compatibilité;
  • n'a pas besoin d'étiquette de script autonome (peut simplement être ajouté à d'autres codes JavaScript dans la tête).
  • n'a pas besoin de jQuery pour tester
110
répondu Willem de Wit 2013-04-07 15:28:42

Internet Explorer 10 ne tente plus de lire les commentaires conditionnels. cela signifie qu'il traitera les commentaires conditionnels comme n'importe quel autre navigateur: comme des commentaires HTML réguliers, destinés à être totalement ignorés. En regardant le balisage donné dans la question comme un exemple, tous les navigateurs y compris IE10 ignoreront les parties de commentaire, en surligné gris, entièrement. La norme HTML5 ne fait aucune mention de la syntaxe des commentaires conditionnels, et c'est exactement la raison pour laquelle ils ont choisi d'arrêter de le soutenir dans IE10.

notez cependant que compilation conditionnelle en JScript est toujours supporté, comme le montrent les commentaires ainsi que les réponses plus récentes. Il ne va pas disparaître dans la version finale non plus, contrairement à jQuery.browser . Et bien sûr, il va de soi que le reniflage utilisateur-agent reste aussi fragile que jamais et ne devrait en aucun cas être utilisé.

si vous devez vraiment cibler IE10, soit utiliser la compilation conditionnelle qui peut encore voir le soutien dans un proche avenir, ou - si vous pouvez l'aider - utiliser une bibliothèque de détection de fonctionnalité telle que Modernizr au lieu de (ou en conjonction avec) la détection de navigateur. À moins que votre dossier d'utilisation ne nécessite noscript ou IE10 du côté du serveur, le sniffage par l'utilisateur-agent va être plus un casse-tête qu'une option viable.

semble assez encombrant, mais rappelez-vous que comme un navigateur moderne qui est très conforme aux normes Web d'aujourd'hui 1 , en supposant que vous avez écrit le code interopérable qui est très conforme aux normes, vous ne devrait pas doivent réserver le code spécial pour IE10 sauf si absolument nécessaire, c.-à-d. il est censé ressembler à d'autres navigateurs en termes de comportement et de rendu. 2 et cela semble tiré par les cheveux, étant donné L'histoire D'IE, mais combien de fois avez-vous attendu Firefox ou Chrome de se comporter de la même façon seulement pour être rencontré avec consternation?

Si vous faire ont une raison légitime de cibler certains navigateurs, par tous les moyens de renifler avec les autres outils mis à disposition pour vous. Je dis juste que tu vas être beaucoup plus pressé de trouver une telle raison aujourd'hui que ce qu'elle était, et ce n'est vraiment pas quelque chose sur quoi tu peux compter.


1 non seulement IE10, mais IE9, et même IE8 qui gère la plupart des CSS2 Matures.1 standard bien mieux que Chrome, tout simplement parce que IE8 était tellement axé sur la conformité aux normes (à l'époque CSS2.1 était déjà assez stable avec seulement des différences mineures par rapport à la recommandation d'aujourd'hui) alors que Chrome semble être un peu plus qu'une démonstration de technologie à moitié polie de pseudo-normes de pointe.

2 et je peux être partial quand je dis ça, mais c'est sûr faire. Si votre code fonctionne dans d'autres navigateurs mais pas IE, les chances que c'est un problème avec votre propre code plutôt que IE10 sont beaucoup mieux par rapport, disons, Il ya 3 ans, avec les versions précédentes de IE. Encore une fois, je peux être partial, mais soyons honnêtes: n'êtes-vous pas trop? regardez vos commentaires.

62
répondu BoltClock 2017-12-14 04:04:10

un bon point de départ est le IE Standards Support Documentation .

Voici comment cibler IE10 en JavaScript:

if ("onpropertychange" in document && !!window.matchMedia) {
...
}

Voici comment cibler IE10 dans CSS:

@media all and (-ms-high-contrast: none) {
...
}

dans le cas où IE11 doit être filtré ou réinitialisé via CSS, voir un autre question: comment écrire un hack CSS pour IE 11?

36
répondu Paul Sweatte 2017-05-23 11:33:24

j'ai écrit un petit plugin JavaScript vanille appelé Layout Engine , qui vous permet de fonctionnalité Détecter IE 10 (et tous les autres navigateurs), d'une manière simple qui ne peut pas être falsifié, contrairement à l'agent utilisateur reniflant.

il ajoute le nom du moteur de rendu comme classe sur la balise html et renvoie un objet JavaScript contenant le vendeur et la version (le cas échéant)

consultez mon billet de blog: http://mattstow.com/layout-engine.html et obtenir le code sur GitHub: https://github.com/stowball/Layout-Engine

11
répondu Matt Stow 2013-02-02 03:17:57

les deux solutions affichées ici (avec de légères modifications) travail:

<!--[if !IE]><!--><script>if(/*@cc_on!@*/false){document.documentElement.className='ie10';}</script><!--<![endif]-->

ou

<script>if(Function('/*@cc_on return 10===document.documentMode@*/')()){document.documentElement.className='ie10';}</script>

vous incluez l'une des lignes ci-dessus à l'intérieur de la balise head de votre page html avant votre lien css. Et puis dans le fichier css vous spécifiez vos styles ayant la classe "ie10" comme parent:

.ie10 .myclass1 { }

et voilà! - les autres navigateurs restent intacts. Et vous n'avez pas besoin de jQuery. Vous pouvez voir l'exemple comment j'ai mis en place ici: http://kardash.net .

10
répondu Eugene Kardash 2012-12-30 01:06:21

j'utilise ce script - il est désuet, mais efficace pour cibler un séparé Internet Explorer 10 feuille de style ou le fichier JavaScript qui est inclus seulement si le navigateur est Internet Explorer 10, la même façon que vous le feriez avec des commentaires conditionnels. Aucun jQuery ou autre plugin n'est requis.

<script>
    /*@cc_on
      @if (@_jscript_version == 10)
          document.write(' <link type= "text/css" rel="stylesheet" href="your-ie10-styles.css" />');
      @end
    @*/
</script >
7
répondu Deborah 2013-04-07 15:30:55

vous pouvez utiliser PHP pour ajouter une feuille de style pour IE 10

Comme:

if (stripos($_SERVER['HTTP_USER_AGENT'], 'MSIE 10')) {
    <link rel="stylesheet" type="text/css" href="../ie10.css" />
}
6
répondu Lenny Bruyninckx 2013-05-14 20:13:06

si vous devez faire cela, vous pouvez vérifier la chaîne d'agent utilisateur en JavaScript:

var isIE10 = !!navigator.userAgent.match(/MSIE 10/);

comme d'autres personnes l'ont mentionné, je recommande toujours la détection de caractéristiques à la place.

5
répondu dave1010 2013-01-18 11:08:21

si vous voulez cibler IE 10 avec JavaScript Vanille, vous pouvez essayer la détection de propriété CSS:

if (document.body.style.msTouchAction != undefined) {
  document.body.className = 'ie10';
}

propriétés CSS

au lieu de msTouchAction vous pouvez également utiliser une de ces propriétés CSS, parce qu'elles ne sont actuellement disponibles que dans IE 10. Mais cela pourrait changer dans l'avenir.

  • msTouchAction
  • msWrapFlow
  • msWrapMargin
  • msWrapThrough
  • msScrollLimit
  • msScrollLimitXMin
  • msScrollLimitYMin
  • msScrollLimitXMax
  • msScrollLimitYMax
  • msFlexbox
  • msFlex
  • msFlexOrder

page de Test

j'ai créé une page test avec toutes les propriétés sur CodePen.

4
répondu TimPietrusky 2013-02-18 23:37:45

clipBoardData est une fonction qui n'est disponible qu'en IE, donc si vous cherchez à cibler toutes les versions D'IE, vous pouvez utiliser

<script type="text/javascript">
if (window.clipboardData)
            alert("You are using IE!");
</script>
3
répondu Njaal Gjerde 2013-07-12 10:33:43

CSS for IE10+ and IE9

@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
    /* IE10+ styles */
}

@media screen"151900920" {
    /* IE8,9,10 styles*/
}
3
répondu steven iseki 2015-10-21 01:28:14

vous pouvez utiliser la détection de traits pour voir si le navigateur est IE10 ou plus comme ainsi:

var isIE = false;
if (window.navigator.msPointerEnabled) {
    isIE = true;
}

vrai Uniquement si > IE9

1
répondu George Filippakos 2013-04-16 18:31:55

Conditionizr (voir docs) ajoutera classes CSS navigateur à votre élément html, y compris ie10.

1
répondu Astrotim 2013-07-12 11:45:21

je voulais juste ajouter ma version de détection D'IE. Il est basé sur un extrait de http://james.padolsey.com/javascript/detect-ie-in-js-using-conditional-comments/ et exteded également leur soutien à ie10 et ie11. Il détecte IE 5 à 11.

Tout ce que vous devez faire est de l'ajouter quelque part et alors vous pouvez toujours vérifier avec une condition simple. La var globale isIE ne sera pas définie si ce n'est pas un IE, ou sinon ce sera la version nombre. Donc, vous pouvez facilement ajouter des choses comme if (isIE && isIE < 10) ou similaire.

var isIe = (function(){
    if (!(window.ActiveXObject) && "ActiveXObject" in window) { return 11; /* IE11 */ }
    if (Function('/*@cc_on return /^10/.test(@_jscript_version) @*/')()) { return 10; /* IE10  */ }
    var undef,
        v = 3, div = document.createElement('div'), all = div.getElementsByTagName('i');
    while (
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
            all[0]
        );
    return v > 4 ? v : undef;
}());
1
répondu Jan. 2014-06-12 08:53:03

Avec JavaScript:

if (/Trident/g.test(navigator.userAgent)) { // detect trident engine so IE
        document.getElementsByTagName('html')[0].className= 'no-js ie'; }

du Travail pour tous IE.

IE08 => 'Trident/4.0'

IE09 => 'Trident/5.0'

IE10 => 'Trident/6.0'

IE11 => 'Trident/7.0'

ainsi changer /Trident/g par /Trident/x.0/gx = 4, 5, 6 ou 7 (ou peut-être 8 pour l'avenir).

0
répondu Ender-events 2014-03-20 19:02:43

pour moi le code suivant fonctionne très bien, tous les commentaires conditionnels fonctionnent dans toutes les versions de IE:

<!--[if lt IE 7 ]> <html class="ie6"> <![endif]-->
<!--[if IE 7 ]>    <html class="ie7"> <![endif]-->
<!--[if IE 8 ]>    <html class="ie8"> <![endif]-->
<!--[if IE 9 ]>    <html class="ie9"> <![endif]-->
<!--[if (gt IE 11)|!(IE)]><!--> <html> <!--<![endif]-->

<script>
    if (document.documentMode===10){
        document.documentElement.className+=' ie10';
    }
    else if (document.documentMode===11){
        document.documentElement.className+=' ie11';
    }
</script>

je suis sous windows 8.1, Je ne sais pas si c'est lié à la mise à jour de ie11...

0
répondu Alex 2014-04-27 22:56:03

Voici comment je fais CSS personnalisé pour Internet Explorer:

dans mon fichier JavaScript:

function isIE () {
      var myNav = navigator.userAgent.toLowerCase();
      return (myNav.indexOf('msie') != -1) ? parseInt(myNav.split('msie')[1]) : false;
}

jQuery(document).ready(function(){
    if(var_isIE){
            if(var_isIE == 10){
                jQuery("html").addClass("ie10");
            }
            if(var_isIE == 8){
                jQuery("html").addClass("ie8");
                // you can also call here some function to disable things that 
                //are not supported in IE, or override browser default styles.
            }
        }
    });

et puis dans mon fichier CSS, y définir chaque style différent:

.ie10 .some-class span{
    .......
}
.ie8 .some-class span{
    .......
}
0
répondu Francisco Corrales Morales 2014-05-22 02:21:53

Check out http://suhasrathod.wordpress.com/2013/04/29/ie10-css-hacks /

@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
       /* IE10-specific styles go here */
}
0
répondu Tom Senner 2014-05-22 03:06:23

cette réponse m'a permis d'y arriver à 90%. J'ai trouvé le reste de ma réponse sur le Microsoft site ICI .

le code ci-dessous est ce que j'utilise pour cibler tout ie en ajoutant un .classe ie à <html>

Utiliser jQuery (qui obsolète .navigateur en faveur des agents utilisateurs en 1.9+, voir http://api.jquery.com/jQuery.browser / ) pour ajouter un .classe ie:

// ie identifier
$(document).ready(function () {
  if (navigator.appName == 'Microsoft Internet Explorer') {
    $("html").addClass("ie");
  }
});
-2
répondu bdanin 2013-08-29 12:52:44

si le ciblage des navigateurs IE10 et supérieurs et des navigateurs non IE ne vous dérange pas, vous pouvez utiliser ce commentaire conditionnel:

<!--[if gt IE 9]><!--> Your code here. <!--<![endif]-->

dérivé de http://www.paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither

-2
répondu user1003757 2014-06-25 17:53:54

si vous devez vraiment le faire, vous pouvez faire fonctionner les commentaires conditionnels en ajoutant la ligne suivante à <head> :

<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE9">

Source

-2
répondu nyuszika7h 2014-07-27 22:20:35

solution moderne pour css

html[data-useragent*='MSIE 10.0'] .any {
  your-style: here;
}
-4
répondu Raphael 2014-05-23 10:36:31