Ich habe hier ein interessantes Problem. Ich verwende eine Klasse für das Element als einen Schalter, um ein ziemlich großes Layoutverhalten auf meiner Site zu erzielen.
Wenn die Klasse angewendet wird, passieren bestimmte Dinge, und wenn die Klasse nicht angewendet wird, passieren sie nicht. Javascript wird verwendet, um die Klasse anzuwenden und zu entfernen. Das entsprechende CSS ist ungefähr so:
%Vor%Und der HTML:
%Vor%Ich habe Dinge vereinfacht, aber das ist im Wesentlichen die Methode. Die gesamte Seite ändert das Layout (die rechte Seite wird in drei verschiedenen Bereichen ausgeblendet), wenn die Flagge auf den Körper gesetzt wird. Dies funktioniert in Firefox und IE8. Es funktioniert nicht im IE8 im Kompatibilitätsmodus. Was faszinierend ist, ist, dass wenn Sie dort sitzen und die Seite aktualisieren, die Ergebnisse variieren können. Es wird die rechte Seite eines anderen Abschnitts angezeigt. Manchmal wird nur die rechte Seite des oberen Bereichs angezeigt, manchmal wird die mittlere angezeigt.
Ich habe es versucht:
- ein Validator (um nach fehlerhaften HTML zu suchen)
- doppelte Überprüfung meiner CSS-Formatierung und ...
- Sicherstellen, dass mein IE7-Hack-Blatt keinen Effekt hatte.
- Setzen der Flag-Klasse auf ein anderes, nicht-body-Wrapper-Element (hat immer noch das gleiche ungerade Verhalten)
Also meine Frage ist:
- Gibt es eine Möglichkeit, dieses Verhalten zuverlässig zu machen?
- Wann entscheidet sich IE7 für das Re-Styling?
Danke allen.
Klingt ein bisschen wie ein Problem, das ich mit ie7 hatte, wo das DOM aktualisiert wird, aber die Pixel auf dem Bildschirm nicht sind (manchmal bewegt sich der Mauszeiger darüber, löst Neuzeichnen aus). Ich habe einen schmutzigen Hack gefunden, der in meinem Fall funktioniert hat (spesudo-javascript):
%Vor%Aus irgendeinem Grund verursacht dieser brutale Hack des Hinzufügens und Entfernens eines Elements (es könnte sogar funktionieren, wenn Sie es irgendwo hinzufügen und entfernen), dass ie7 das Dokument neu streichen wird. Es kann jedoch ein Flimmern verursachen und es ist ein teurer Hack, da es ein komplettes Repaint in einem bereits langsamen Browser erzwingt, deshalb mache ich das nur, wenn ich sicher bin, dass es ie7 ist (um nicht jeden anderen Browser zu verlangsamen, nur weil ie7 dumm ist).
Ich kann nicht versprechen, dass es funktioniert, aber ... Als ich versuchte, eine Lösung für mein Problem zu finden, fand ich viele verschiedene Hacks, die nicht funktionierten. Die Inkonsistenzen von ie7 mit Javascript zu beheben, ist fast schon Versuch und Irrtum. :)
PS :
Ich sehe das Umschalten von display
ist bereits vorgeschlagen, es könnte funktionieren, oder wie in meinem Fall, tat es nicht. Ich musste das Element aus dem Dom entfernen, damit es funktioniert.
Hier in der Nähe einer Lösung, vielleicht kann jemand anderes es das letzte Stück des Weges bringen.
Die Seite verhält sich wie erwartet, wenn:
- Wenn der Stil dem Körper von Hand zugewiesen wird, anstatt JavaScript zu verwenden.
(keine akzeptable Lösung, aber erwähnenswert)
- Wenn die Elemente, die IE7 nicht aktualisiert (die .rightSides), manuell mit einem Kickout-Befehl wie $ (". RightSide") versehen werden. Hide (). Show ();
Diese zweite Lösung ist fast funktionsfähig, abgesehen davon, dass ich eigentlich nach dem Verhalten zum Verbergen der Anzeige aus meiner Flagge suche. Daher möchte ich, dass eine weniger aufdringliche Sache geändert wird, damit der IE die Stile aktualisiert.
Es scheint, als ob Sie in ein IE6 / IE7 Reflow / Repaint-Problem oder ein IE6 / IE7-Layout-Problem geraten.
Siehe Ссылка für eine detaillierte und informative Analyse der Auslöser, Reflow, Repaint, etc. Auch siehe Ссылка , um herauszufinden, was dazu führt, dass ein Element im IE "Layout" hat.
Sie können sowohl "mit Layout" als auch einen Reflow auslösen, indem Sie height: 1%;
setzen. Dies ist bekannt als Holly Hack , benannt nach der ersten Person, die es dokumentiert , Holly Bergevin.
Hier sind meine zwei Cent. Ein Problem mit Expando-Objekt trat auf, so dass das Folgende für mich mit einer Einstellungsverzögerung funktionierte. Mein Problem war das Hintergrundbild wurde nicht angezeigt, wenn ich etwas HTML einfügte.
%Vor%Tags und Links javascript internet-explorer css internet-explorer-7