J'ai isolé un petit cas de test du z-index
bogue d'IE7 , mais je ne sais pas comment le résoudre. J'ai joué avec z-index
toute la journée.
Quel est le problème avec z-index
IE7?
Tester CSS:
input {
border: 1px solid #000;
}
div {
border: 1px solid #00f;
}
ul {
border: 1px solid #f00;
background-color: #f00;
list-style-type: none;
margin: 0;
padding-left: 0;
z-index: 1000;
}
li {
color: #fff;
list-style-type: none;
padding-left: 0;
margin-left: 0;
}
span.envelope {
position: relative;
}
span.envelope ul {
position: absolute;
top: 20px;
left: 0;
width: 150px;
}
Test HTML:
<form>
<label>Input #1:</label>
<span id="envelope-1" class="envelope">
<input name="my-input-1" id="my-input-1" />
<ul>
<li>item</li>
<li>item</li>
<li>item</li>
<li>item</li>
</ul>
</span>
<br><br>
<label>Input #2:</label>
<span id="envelope-2" class="envelope">
<input name="my-input-2" id="my-input-2" />
</span>
</form>
Réponses:
L'indice Z n'est pas une mesure absolue. Il est possible qu'un élément avec z-index: 1000 soit derrière un élément avec z-index: 1 - tant que les éléments respectifs appartiennent à des contextes d'empilement différents .
Lorsque vous spécifiez z-index, vous le spécifiez par rapport à d'autres éléments dans le même contexte d'empilement, et bien que le paragraphe de la spécification CSS sur Z-index indique qu'un nouveau contexte d'empilement n'est créé que pour le contenu positionné avec un z-index autre que automatique ( ce qui signifie l' ensemble du document devrait être un seul contexte d'empilement), vous avez fait construire une travée positionné: malheureusement IE7 interprète contenu positionné sans z-index cela comme un nouveau contexte d'empilement.
En bref, essayez d'ajouter ce CSS:
ou reconcevoir le document pour que vos travées n'aient plus position: relative:
Voir http://www.brenelz.com/blog/2009/02/03/squish-the-internet-explorer-z-index-bug/ pour un exemple similaire de ce bogue. La raison pour laquelle donner à un élément parent (enveloppe-1 dans votre exemple) un z-index plus élevé fonctionne est que tous les enfants d'enveloppe-1 (y compris le menu) chevaucheront tous les frères d'enveloppe-1 (en particulier, enveloppe-2).
Bien que z-index vous permette de définir explicitement comment les choses se chevauchent, même sans z-index, l'ordre de superposition est bien défini . Enfin, IE6 a un bogue supplémentaire qui fait flotter les boîtes de sélection et les iframes au-dessus de tout le reste.
la source
http://www.vancelucas.com/blog/fixing-ie7-z-index-issues-with-jquery/
la source
Essayez de donner à l'élément parent une valeur d'index z plus élevée (peut être encore plus élevée que la valeur d'index z de l'enfant elle-même) pour corriger le bogue.
la source
J'ai rencontré ce problème, mais sur un grand projet où des modifications HTML ont dû être demandées et sont devenues un problème complet, alors je cherchais une solution pure css.
En plaçant
position:relative; z-index:-1
sur le contenu de mon corps principal, mon contenu déroulant d'en-tête s'affiche soudainement au-dessus du contenu du corps dans ie7 (il s'affichait déjà sans problème dans tous les autres navigateurs et dans ie8 +)Le problème avec cela était alors cette désactivation de toutes les actions de survol et de clic sur tout le contenu de l'élément avec le
z-index:-1
donc je suis allé à l'élément parent de la page entière et lui ai donné unposition:relative; z-index:1
Ce qui a résolu le problème et conservé la fonctionnalité de superposition correcte.
Se sent un peu hacky, mais a fonctionné au besoin.
la source
J'ai trouvé que je devais placer une désignation spéciale z-index sur div dans une feuille de style spécifique à ie7:
div {z-index: 10; }
Pour que l'index z des div non liés, comme un nav, s'affiche au-dessus du curseur. Je ne pouvais pas simplement ajouter un z-index au div de curseur lui-même.
la source
html {z-index:1; position:relative;}
menu de parcourir l'image du carrousel sur IE.Si l'indexation z plus élevée mentionnée précédemment dans les nœuds parents ne répond pas à vos besoins, vous pouvez créer une solution alternative et la cibler sur les navigateurs problématiques soit par des commentaires conditionnels IE, soit en utilisant la détection de fonctionnalité (plus idéaliste) fournie par Modernizr.
Test rapide (et évidemment fonctionnel) pour Modernizr:
la source
Cela ne ressemble pas à un bug ie, juste pour une compréhension différente du standard css. Si le conteneur extérieur n'est pas spécifié, le z-index, mais l'élément interne a spécifié un z-index plus élevé. Ainsi, le frère du conteneur peut superposer l'élément z-index élevé. Même si comme ça, cela ne se produit que dans IE7, mais IE6, IE8 et Firefox sont ok.
la source
Dans IE6 en général, certains éléments de l'interface utilisateur sont implémentés avec des contrôles natifs. Ces contrôles sont rendus dans une phase complètement séparée (fenêtre?) Et apparaissent toujours au-dessus de tous les autres contrôles, quel que soit le z-index. Les boîtes de sélection sont un autre contrôle problématique.
La seule façon de contourner ce problème est de créer du contenu que IE rend comme une "fenêtre" séparée - c'est-à-dire que vous pouvez placer une zone de sélection sur une zone de texte ou, plus utilement, une iframe.
En bref, vous devrez mettre "en survol" comme des éléments tels que les menus dans une iframe afin de permettre à IE de placer ces contrôles d'interface utilisateur intégrés ci-dessus.
Cela aurait dû être corrigé dans IE7 (voir http://blogs.msdn.com/ie/archive/2006/01/17/514076.aspx ) mais peut-être que vous utilisez une sorte de mode de compatibilité?
la source
Ce bogue semble être un peu un problème distinct du bogue standard d'IE de contexte d'empilement séparé. J'ai eu un problème similaire avec plusieurs entrées empilées (essentiellement une table avec un autocompléter dans chaque ligne). La seule solution que j'ai trouvée était de donner à chaque cellule une valeur d'index z décroissante.
la source
Si vous voulez créer un menu déroulant et que vous rencontrez un problème avec z-index, vous pouvez le résoudre en créant des z-index de même valeur (z-index: 999; par exemple) .. Il suffit de mettre z-index dans les div parent et enfant et cela résoudra le problème. Je résous le problème avec ça. Si je mets différents z-index, bien sûr, cela montrera mon div enfant sur mon div parent, mais, une fois que je veux déplacer ma souris de l'onglet de menu vers le sous-menu div (liste déroulante), il disparaît ... alors Je mets des z-index de même valeur et résout le problème.
la source
Je l'ai résolu en utilisant les outils de développement pour IE7 (c'est une barre d'outils) et en ajoutant un z-index négatif au conteneur du div qui sera en dessous de l'autre div.
la source