Ich habe einen kleinen Testfall des IE7- z-index
Fehlers isoliert , weiß aber nicht, wie ich ihn beheben soll. Ich habe den z-index
ganzen Tag mit gespielt.
Was ist los mit z-index
IE7?
CSS testen:
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;
}
HTML testen:
<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>
css
internet-explorer-7
z-index
rezna
quelle
quelle
Antworten:
Der Z-Index ist keine absolute Messung. Es ist möglich, dass sich ein Element mit dem Z-Index: 1000 hinter einem Element mit dem Z-Index: 1 befindet - solange die jeweiligen Elemente zu verschiedenen Stapelkontexten gehören .
Wenn Sie den Z-Index angeben, geben Sie ihn relativ zu anderen Elementen im selben Stapelkontext an. Obwohl der Absatz der CSS-Spezifikation zum Z-Index besagt, dass ein neuer Stapelkontext nur für positionierte Inhalte mit einem anderen Z-Index als erstellt wird auto (dh Ihr gesamtes Dokument sollte ein einzelner Stapelkontext sein), Sie haben eine positionierte Spanne erstellt: Leider interpretiert IE7 positionierte Inhalte ohne Z-Index als neuen Stapelkontext.
Kurz gesagt, fügen Sie dieses CSS hinzu:
oder gestalten Sie das Dokument so neu, dass Ihre Bereiche keine Position mehr haben: relativ:
Ein ähnliches Beispiel für diesen Fehler finden Sie unter http://www.brenelz.com/blog/2009/02/03/squish-the-internet-explorer-z-index-bug/ . Der Grund, warum ein übergeordnetes Element (Umschlag-1 in Ihrem Beispiel) einen höheren Z-Index erhält, liegt darin, dass dann alle untergeordneten Elemente von Umschlag-1 (einschließlich des Menüs) alle Geschwister von Umschlag-1 (insbesondere Umschlag-2) überlappen.
Obwohl Sie mit dem Z-Index explizit definieren können, wie sich Dinge überschneiden, ist die Überlagerungsreihenfolge auch ohne Z-Index gut definiert . Schließlich hat IE6 einen zusätzlichen Fehler, der dazu führt, dass Auswahlfelder und Iframes über alles andere schweben.
quelle
http://www.vancelucas.com/blog/fixing-ie7-z-index-issues-with-jquery/
quelle
Versuchen Sie, dem übergeordneten Element einen höheren Z-Index-Wert zu geben (der sogar höher sein kann als der Z-Index-Wert des Kindes selbst), um den Fehler zu beheben.
quelle
Ich bin auf dieses Problem gestoßen, aber bei einem großen Projekt, bei dem HTML-Änderungen angefordert werden mussten und zu einem ganzen Problem wurden, suchte ich nach einer reinen CSS-Lösung.
Durch Platzieren
position:relative; z-index:-1
auf meinem Hauptkörperinhalt wurde mein Header-Dropdown-Inhalt plötzlich über dem Körperinhalt in IE7 angezeigt (er wurde bereits in allen anderen Browsern und in IE8 + ohne Probleme angezeigt).Das Problem dabei war dann, dass alle Hover- und Klickaktionen für alle Inhalte im Element mit deaktiviert wurden. Also
z-index:-1
ging ich zum übergeordneten Element der gesamten Seite und gab ihm eineposition:relative; z-index:1
Dadurch wurde das Problem behoben und die korrekte Layering-Funktionalität beibehalten.
Fühlt sich ein bisschen hackig an, hat aber nach Bedarf funktioniert.
quelle
Ich stellte fest, dass ich div in einem ie7-spezifischen Styelsheet eine spezielle Z-Index-Bezeichnung hinzufügen musste:
div {z-Index: 10; }}
Damit der Z-Index von nicht verwandten Divs, z. B. einem Navi, über dem Schieberegler angezeigt wird. Ich konnte dem Slider-Div selbst nicht einfach einen Z-Index hinzufügen.
quelle
html {z-index:1; position:relative;}
erlaubte , dass das Menü über das Karussellbild im IE ging.Wenn die zuvor erwähnte höhere Z-Indizierung in übergeordneten Knoten nicht Ihren Anforderungen entspricht, können Sie eine alternative Lösung erstellen und diese entweder durch IE-bedingte Kommentare oder mithilfe der (idealistischeren) Funktionserkennung von Modernizr auf problematische Browser ausrichten.
Schneller (und offensichtlich funktionierender) Test für Modernizr:
quelle
Es sieht so aus, als wäre es kein Fehler, nur um den CSS-Standard anders zu verstehen. Wenn für den äußeren Container kein Z-Index angegeben ist, hat das innere Element einen höheren Z-Index angegeben. Das Geschwister des Containers überlagert also möglicherweise das Element mit dem hohen Z-Index. Auch wenn dies so ist, tritt es nur in IE7 auf, aber IE6, IE8 und Firefox sind in Ordnung.
quelle
In IE6 werden im Allgemeinen bestimmte UI-Elemente mit nativen Steuerelementen implementiert. Diese Steuerelemente werden in einer vollständig separaten Phase (Fenster?) Gerendert und erscheinen unabhängig vom Z-Index immer über allen anderen Steuerelementen. Auswahlfelder sind eine weitere solche problematische Steuerung.
Die einzige Möglichkeit, dieses Problem zu umgehen, besteht darin, Inhalte zu erstellen, die der IE als separates "Fenster" darstellt. Sie können also ein Auswahlfeld über einem Textfeld oder, nützlicher, einem Iframe platzieren.
Kurz gesagt, Sie müssen "On-Hover" -ähnliche Dinge wie Menüs in einen Iframe einfügen, damit der IE diese über den integrierten UI-Steuerelementen platzieren kann.
Dies sollte in IE7 behoben worden sein (siehe http://blogs.msdn.com/ie/archive/2006/01/17/514076.aspx ), aber vielleicht laufen Sie in einem Kompatibilitätsmodus?
quelle
Dieser Fehler scheint ein anderes Problem zu sein als der standardmäßige IE-Fehler im separaten Stapelkontext. Ich hatte ein ähnliches Problem mit mehreren gestapelten Eingaben (im Wesentlichen eine Tabelle mit einem Autocompleter in jeder Zeile). Die einzige Lösung, die ich fand, bestand darin, jeder Zelle einen abnehmenden Z-Index-Wert zu geben.
quelle
Wenn Sie ein Dropdown-Menü erstellen möchten und ein Problem mit dem Z-Index haben, können Sie es lösen, indem Sie Z-Indizes mit demselben Wert erstellen (Z-Index: 999; zum Beispiel). Fügen Sie einfach den Z-Index in die übergeordneten und untergeordneten Divs und ein das wird das Problem lösen. Damit löse ich das Problem. Wenn ich verschiedene Z-Indizes setze, wird mein untergeordnetes Div sicher über meinem übergeordneten Div angezeigt, aber sobald ich meine Maus von der Menüregisterkarte zum Untermenü div (Dropdown-Liste) bewegen möchte, verschwindet es ... dann Ich setze Z-Indizes des gleichen Wertes und löse das Problem.
quelle
Ich habe es gelöst, indem ich die Entwicklertools für IE7 (eine Symbolleiste) verwendet und dem Container des Div einen negativen Z-Index hinzugefügt habe, der unter dem des anderen Div liegt.
quelle