z-index Chrom Bug

8

Ich habe einen wirklich nervigen Bug, der anscheinend nur unter Windows und OS X auftritt: Der Z-Index eines Elements, dessen Elternteil eine feste Position hat, funktioniert in Chrome nicht! Ich habe meine seltsame Situation in einen einfachen Code umgewandelt:

html:

%Vor%

css:

%Vor%

Sandkasten: Ссылка

Ich habe auf Internet Explorer 9, Firefox 15, Opera 12.02 und Safari 5.1.7 unter OS X und Windows getestet und alle wie erwartet angezeigt. Ich habe auch auf Ubuntu 12.10 getestet und es funktionierte für jeden Browser, einschließlich Chrome, einwandfrei! Ich habe sogar auf Kindle 4 Browser getestet und es hat funktioniert!

Ich frage mich, ob jemand dieses Problem beheben kann!

    
gibatronic 22.10.2012, 20:18
quelle

7 Antworten

12

one800higgins 'Antwort ist in der richtigen Richtung. Die wirkliche Antwort ist, dass auf mobilen WebKit und Chrome 22+, position: fixed immer erstellt ein neuer Stapelkontext, auch wenn z-index auto ist. Die Stapelkontexthierarchie sieht also so aus:

  • Dokumentenstammverzeichnis (z-index 0 )
    • #mask (z-index 9998 )
    • #box (z-index 0 )
      • .above-mask (z-index 9999 )
      • .below-mask (z-index 9997 )

Das bedeutet, dass 9998 niemals mit 9999 oder 9997 verglichen wird, um die Stapelreihenfolge zu bestimmen. Stattdessen wird 9999 mit 9997 verglichen, um zu bestimmen, welche von .above-mask und .below-mask weiter vorne liegt, und wenn dann alles innerhalb von #box in diesem Kontext gestapelt ist, wird es als einzelne Ebene bei z- behandelt. index 0 , das hinter #mask bei z-index 9998 gestapelt wird.

Dies erklärt auch, warum @ TheNextBillGates die Antwort auf das Verschieben von #mask in #box funktioniert - denn dann befindet sich #mask im selben Stapelkontext wie .above-mask und .below-mask . Ich empfehle den obigen Link für umfassendere Details, und Sie sollten auch sehen die Ankündigung für die Stapeländerung für fixed Elemente in Chrome .

    
Adam Spiers 06.09.2013, 23:58
quelle
1

Ich bin gerade auf diesen Fehler gestoßen, der in Google Chrome v26 immer noch auftritt. Ich konnte den Z-Index so hoch einstellen, wie ich es von Code oder Chrome CSS-Editor wollte, und es machte keinen Unterschied (und die Position des Elements wurde auf absolut festgelegt). Die gleiche Einstellung für den z-Index funktionierte wie erwartet in Firefox und sogar IE8-IE10. Wenn ich das übergeordnete Element von position: fixed auf position: absolute umschaltete, funktionierte der z-Index des untergeordneten Elements in Chrome einwandfrei.

    
Paul V. 24.04.2013 20:46
quelle
1

Wenn Sie #mask innerhalb von #box verschieben, funktioniert das problemlos.

%Vor%

Hier ist eine Geige Ссылка

Ich bin mir nicht sicher, warum das gerade so ist.

    
TheNextBillGates 31.08.2013 08:07
quelle
0

Weisen Sie Ihrem festen div einen Z-Index zu. Das sollte dazu führen, dass chrome die Z-Index-Werte für alle untergeordneten Elemente ebenfalls berücksichtigt.

    
Jake 05.09.2013 18:17
quelle
0

Die mehreren Z-Index-Stacks sind meiner Meinung nach unglücklich und verwirrend, aber Sie können dies möglicherweise lösen, ohne Ihre HTML-Struktur zu ändern, wenn Sie den Z-Index eines der Eltern des Zielelements erhöhen. Versuchen Sie, ein Elternelement zu finden, das ein Geschwister des problematischen Elements ist, das Ihren Inhalt überlappt. Wenden Sie dieses Styling an:

%Vor%

Ihr Kilometerstand kann je nach Projekt variieren, aber diese Lösung hat für mein Projekt funktioniert.

    
Matt Jensen 11.10.2013 22:15
quelle
0

Ich denke es ist, weil es nicht am unteren Ende der Seite wie modale Fenster sein soll. Einfache Lösung ist, einfach alle modalen Fenster zu greifen und sie in ein Div vor dem End-Body-Tag zu werfen. Das folgende Beispiel behebt jedes Chrome-Problem, das ich habe.

%Vor%     
DevNinjaJeremy 05.07.2016 15:29
quelle
-1

Ändern oder entfernen Sie position: fixed in #box , und Sie sind festgelegt.

jsFiddle

    
user1191002 22.10.2012 20:41
quelle

Tags und Links