Comment écrire un hack CSS pour IE 11? [dupliquer]
cette question a déjà une réponse ici:
- Detecting IE11 using CSS Capability / Feature Detection"" 17 réponses
Comment puis-je pirater ou écrire css seulement pour IE 11? J'ai un site qui a l'air mauvais EN MI 11.Je cherche ici et là, mais je n'ai pas encore trouvé de solution.
est-ce qu'il y a un sélecteur css?
8 réponses
utilisez une combinaison de règles CSS spécifiques à Microsoft pour filtrer IE11:
<!doctype html>
<html>
<head>
<title>IE10/11 Media Query Test</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<style>
@media all and (-ms-high-contrast:none)
{
.foo { color: green } /* IE10 */
*::-ms-backdrop, .foo { color: red } /* IE11 */
}
</style>
</head>
<body>
<div class="foo">Hi There!!!</div>
</body>
</html>
filtres tels que ce travail en raison de ce qui suit:
Lorsqu'un agent utilisateur ne peut pas analyser le sélecteur (c.-à-d. qu'il n'est pas valide CSS 2.1), il doit ignorer le sélecteur et le bloc de déclaration suivant (s'il y a lieu).
<!doctype html>
<html>
<head>
<title>IE10/11 Media Query Test</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<style>
@media all and (-ms-high-contrast:none)
{
.foo { color: green } /* IE10 */
*::-ms-backdrop, .foo { color: red } /* IE11 */
}
</style>
</head>
<body>
<div class="foo">Hi There!!!</div>
</body>
</html>
References
à la lumière du fil évolutif, j'ai mis à jour le ci-dessous:
IE 6
* html .foo {property:value;}
ou
.foo { _property:value;}
IE 7
*+html .foo {property:value;}
ou
*:first-child+html .foo {property:value;}
IE 6 et 7
@media screen {
.foo {property:value;}
}
ou
.foo { *property:value;}
ou
.foo { #property:value;}
IE 6, 7 et 8
@media "151970920"screen\,screen {
.foo {property:value;}
}
IE 8
html>/**/body .foo {property:value;}
ou
@media "151990920"screen {
.foo {property:value;}
}
IE 8 Mode Standard seulement
.foo { property /*\**/: value }
IE 8,9 et 10
@media screen"1519110920" {
.foo {property:value;}
}
IE 9 seulement
@media screen and (min-width:0"1519120920") and (min-resolution: .001dpcm) {
//.foo CSS
.foo{property:value;}
}
IE 9 et plus
@media screen and (min-width:0"1519130920") and (min-resolution: +72dpi) {
//.foo CSS
.foo{property:value;}
}
IE 9 et 10
@media screen and (min-width:0"1519140920") {
.foo /* backslash-9 removes.foo & old Safari 4 */
}
IE 10 only
_:-ms-lang(x), .foo { property:value; }
IE 10 et plus
_:-ms-lang(x), .foo { property:value; }
ou
@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {
..foo{property:value;}
}
IE 11 (et ci-dessus..)
_:-ms-fullscreen, :root .foo { property:value; }
alternatives Javascript
Modernizr
Modernizr fonctionne rapidement sur la charge de page pour détecter les caractéristiques; Il puis crée un objet JavaScript avec les résultats, et ajoute des classes élément html
sélection de L'agent utilisateur
Javascript:
var b = document.documentElement;
b.setAttribute('data-useragent', navigator.userAgent);
b.setAttribute('data-platform', navigator.platform );
b.className += ((!!('ontouchstart' in window) || !!('onmsgesturechange' in window))?' touch':'');
Adds(E. g) l'élément html
ci-dessous:
data-useragent='Mozilla/5.0 (compatible; M.foo 9.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)'
data-platform='Win32'
permettant des sélecteurs CSS très ciblés, p.ex.:
html[data-useragent*='Chrome/13.0'] .nav{
background:url(img/radial_grad.png) center bottom no-repeat;
}
note de bas de page
si possible, identifier et corriger tout problème sans piratage. Soutien amélioration progressive et dégradation gracieuse . Cependant, il s'agit d'un "monde idéal" scénario qui n'est pas toujours réalisable, en tant que tel - ce qui précède devrait aider à fournir de bonnes options.
Attribution / Lecture Essentielle
- Jeff Clayton | Browserhacks.com
- Keith Clarke
- Paul Irish
- "15191190920 Web" Pieuse
- La Clé
Voici une solution en deux étapes voici un hack à IE10 et 11
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
/* IE10+ specific styles go here */
}
parce que IE10 et IE11 prend en charge-ms-high-cotrast vous pouvez en profiter pour cibler ces deux navigateurs""
et si vous voulez exclure le IE10 de cela, vous devez créer un code spécifique IE10 comme suit, il est en utilisant l'agent de l'utilisateur astuce, vous devez ajouter ce Javascript
var doc = document.documentElement;
doc.setAttribute('data-useragent', navigator.userAgent);
et cette balise HTML
<html data-useragent="Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)">
et maintenant vous pouvez écrire votre code CSS comme ceci
html[data-useragent*='MSIE 10.0'] h1 {
color: blue;
}
pour plus d'informations veuillez vous référer à ces sites web, wil tutorail , Chris Tutorial
et si vous voulez cibler IE11 et plus tard,voici ce que j'ai trouvé:
_:-ms-fullscreen, :root .selector {}
Voici une excellente ressource pour obtenir plus d'information: browserhacks.com
je les ai écrit et contribué à BrowserHacks.com depuis l'automne 2013 -- celui que j'ai écrit est très simple et seulement soutenu par IE 11.
<style type="text/css">
_:-ms-fullscreen, :root .msie11 { color: blue; }
</style>
et bien sûr la div...
<div class="msie11">
This is an Internet Explorer 11 CSS Hack
<div>
donc le texte apparaît en bleu avec internet explorer 11. Avoir du plaisir avec elle.
-
plus D'IE et d'autres piratages de navigateur CSS sur mon site de test en direct ici:
Mise à jour: http://browserstrangeness.bitbucket.io/css_hacks.html
miroir: http://browserstrangeness.github.io/css_hacks.html
(si vous êtes également à la recherche de Hacks MS Edge CSS, c'est où aller.)
vous pouvez utiliser le code suivant à l'intérieur de l'étiquette de style:
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
/* IE10+ specific styles go here */
}
ci-Dessous est un exemple qui a fonctionné pour moi:
<style type="text/css">
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {
/* IE10+ specific styles go here */
#flashvideo {
width:320px;
height:240;
margin:-240px 0 0 350px;
float:left;
}
#googleMap {
width:320px;
height:240;
margin:-515px 0 0 350px;
float:left;
border-color:#000000;
}
}
#nav li {
list-style:none;
width:240px;
height:25px;
}
#nav a {
display:block;
text-indent:-5000px;
height:25px;
width:240px;
}
</style>
veuillez noter que puisque (#nav li) et (#nav A) sont à l'extérieur de l'écran @media ... ce sont des styles généraux.
vous pouvez utiliser js et ajouter une classe en html pour maintenir la norme de commentaires conditionnels :
var ua = navigator.userAgent,
doc = document.documentElement;
if ((ua.match(/MSIE 10.0/i))) {
doc.className = doc.className + " ie10";
} else if((ua.match(/rv:11.0/i))){
doc.className = doc.className + " ie11";
}
ou utiliser une lib comme bowser:
Ou modernizr pour la détection de la fonctionnalité:
Donc, j'ai trouvé ma solution à ce problème à la fin.
après une recherche à travers Microsoft documentation j'ai réussi à trouver un nouveau IE11 seulement style msTextCombineHorizontal
dans mon test, je vérifie pour les styles IE10 et s'ils sont un match positif, alors je vérifie pour le style IE11 seulement. Si je le trouve, alors C'est IE11+, si Je ne le trouve pas, alors C'est IE10.
Exemple De Code: Détecter IE10 et IE11 par CSS Capacité de Test (JSFiddle)
je mettrai à jour l'exemple de code avec plus de styles quand je les découvrirai.
NOTE: cela va presque certainement identifier IE12 et IE13 comme "IE11", comme ces styles seront probablement reporter en avant. J'ajouterai d'autres tests au fur et à mesure que de nouvelles versions seront lancées, et j'espère pouvoir compter à nouveau sur Modernizr.
j'utilise ce test pour définir le comportement. Le comportement de repli est juste un style moins glamour, il n'a pas de fonctionnalité réduite.
j'ai trouvé ça utile
<?php if (strpos($_SERVER['HTTP_USER_AGENT'], 'Trident/7.0; rv:11.0') !== false) { ?>
<script>
$(function(){
$('html').addClass('ie11');
});
</script>
<?php } ?>
ajoutez ceci sous votre <head>
document