CSS-Korrektur des IE7-Fehlers "float: right" löschen

7

Ich habe ständig Probleme mit Elementen, die in IE7 schweben.

Ich habe viele Stack-Overflow-Fragen gelesen, die ähnlich wie diese sind, aber es scheint keine durchgängig sauberen CSS-Antworten zu geben.

Was ich damit meine ist, dass ich Antworten sehen möchte, die NICHT den HTML-Code ändern . ZB:

  • Platziere das floated-Element zuerst
  • Fügen Sie ein 'clear: both'-div nach dem floated-Element hinzu.

Ich verstehe, dass das floated-Element manchmal nicht für seine Elternhöhe verantwortlich ist und es daher manchmal nicht richtig enthält. Gelegentlich finde ich mich selbst zu einem Element mit Zoom: 1, das es manchmal behebt. Manchmal finde ich mich in einem bedingten IE7 Style-Sheet herum, was meiner Meinung nach nicht die beste Lösung ist.

Hinweis: Was ich unter "Layout" verstehe - Ссылка

Ich habe auch andere Antworten gelesen, die mit relativer und absoluter Positionierung zu tun haben (Elternteil und Kindteil). Dies zieht es hoch, beeinflusst aber oft umgebende Divs.

Ich würde gerne ein Kopfgeld zu dieser Frage hinzufügen, wenn jemand ausführlich erklären kann, warum dies passiert und eine detaillierte Diskussion der verschiedenen Fixes, IDEAL CSS ONLY!

Vielen Dank!

BEARBEITEN

Das häufigste Problem, auf das ich stoße, ist, wenn ich so etwas habe:

Linke Seitenleiste - Haupt - Rechte Seitenleiste

Das Recht wird oft fallen, wenn es schwebt. Idealerweise sollte dies im Format Left - Right - Main sein, aber ich finde, dass ich immer wieder Styling-Entwickler arbeite (vor allem Drupal), wo dies der Fall ist und es zu mühsam ist, sie dazu zu bringen, ihre Arbeit zu ändern. Sinn ergeben? Weil ich die Entwicklung von Entwicklern arbeite, setzen sie nie den klaren Block ein (was persönlich meiner Meinung nach sowieso schrecklich und schmutzig ist!)

    
Rick Donohoe 11.06.2012, 14:09
quelle

5 Antworten

22

Einführung

Ihr Titel weist auf den Wunsch hin, eine Korrektur für den float: right -Fehler zu finden, aber Ihr Text impliziert einen breiteren Anwendungsbereich, um Lösungen für "Probleme mit Elementen in IE7 zu finden". Es gibt viele allgemeine Probleme mit floated-Elementen ( right oder left ) in diesem Browser. Auch wenn man bezweifeln mag, dass die Unterstützung des IE7-Browsers mehr Aufmerksamkeit verdient, wird es für einige Leute sicherlich noch einige Zeit bleiben. Daher werde ich hier die Gelegenheit nutzen, um zahlreiche Probleme in Bezug auf Floats in diesem Browser sofort anzusprechen. Beachten Sie, dass viele Experimente und Referenzen unten von einer ausgezeichneten Quelle stammen: Ссылка .

CSS für das enthaltene Element

Für ein übergeordnetes übergeordnetes Element sollte das folgende css gesetzt werden:

%Vor%

Stellen Sie sicher, dass hayLayout wichtig ist, um Arten von Rand- und Auffüllfehlern zu verhindern, eine Art von Peek-a-Boo-Bug und das Löschen von overflow . Für eine Folge von Gleitkommazahlen muss HTML möglicherweise geändert werden, wenn padding auf dem Container ordnungsgemäß funktionieren soll.

In Bezug auf ein Drop-Problem mit float: right möchten Sie möglicherweise vermeiden, eine explizite height oder max-height für den Container festzulegen. A min-height ist in Ordnung. Wenn Sie height setzen und dann float höher als der Container ist, verhält sich IE7 nicht mit den folgenden Elementen. Es gibt keine reine CSS-Lösung, die ich festgestellt habe.

Wenn der Container selbst position: absolute ist, kann es bei der Positionierung eines Floats zu Problemen kommen, dass Float selbst auf position: absolute gesetzt werden muss, anstatt floated zu werden.

Referenzen:

CSS für das Floated Child

Bei einem floated child-Element hängt die zu setzende CSS (neben float: right ) von zwei Dingen ab:

Absoluter Container

Wie bereits erwähnt, kann ein übergeordnetes übergeordnetes Element, das absolute ist, eine Änderung der Behandlung des untergeordneten Elements erfordern.

Float ist auch ein Clearing-Element

Wenn für float auch clear festgelegt ist, können zahlreiche Probleme auftreten, die vollständig von html und css der umgebenden Elemente abhängen. Es gibt keine einzige kanonische Lösung, schauen Sie sich die folgenden Referenzen an.

Referenzen:

CSS für untergeordnete Elemente des Containers vor dem Float

Wenn das float: right auf ein Element in der html -Struktur folgt, das sich links von ihm befindet (und nicht darüber), dann muss dieses vorhergehende Element float: left sein.

CSS für untergeordnete Elemente des Containers nach dem Float

Ein klares Element

Für ein Element nach das float , das clear gesetzt hat, wenn es padding und background-color hat, vergewissern Sie sich, dass es auch LAYOUT hat vermeiden Sie eine Verdoppelung der padding ; dies verhindert auch zusätzlichen Speicherplatz über dem clear aufgrund des Containers padding und vermeidet andere margin Probleme.

Referenzen:

Ein Absatz vor einem Löschelement

Wenn Sie einen Absatz mit einem margin-bottom und einer kürzeren Höhe als das float zwischen dem floated-Element und einem Clearingelement haben, kann eine zusätzliche Lücke zwischen clear und float gleich diesem% entstehen. Code%. Es ist kein reiner CSS-Fix bekannt, außer dem Absatz einen Null-unteren Rand zu geben (was möglicherweise nicht akzeptabel ist, wenn der Absatz höher als der Float werden kann).

Referenz:

Fazit

Ich kann nicht garantieren, dass ich jedes Problem behandelt habe, das bei einem richtigen Floating-Objekt auftreten könnte, aber sicherlich sind viele wichtige davon abgedeckt. Was "warum" diese Dinge passieren, ist alles "Bugginess" in IE7.

    
ScottS 11.07.2012, 16:59
quelle
1

Haben Sie versucht, die Clearfix-Lösung zu verwenden, um divs zu kollabieren? Es gibt Variationen zu dieser und es gibt eine neuere Version, aber ich habe nicht die URL zur Hand, aber das ist Standard-Clearfix CSS, die Sie zum übergeordneten Element hinzufügen, das kollabiert und Probleme mit floated-Elementen verursacht Ссылка . Chris Coyer hat hier eine bessere Version Ссылка .

Sie sagen "Ich verstehe, dass das floated-Element manchmal die Höhe seiner Eltern nicht berücksichtigt und daher manchmal nicht korrekt enthält". Dies ist richtig, das Elternelement wird kollabieren, wenn alle untergeordneten Elemente schweben. Dies liegt daran, dass die Elemente aus dem normalen Fluss entfernt werden, wenn dies der Fall ist, kann das Eltern-Div seine Höhe nicht berechnen und kollabiert, als ob nichts innerhalb des Div vorhanden wäre.

Aber ohne die Seite und das Problem zu sehen, kann ich nur abschätzen, dass das Problem auf IE6-IE7s haslayout -Eigenschaft zurückzuführen ist, die wirklich nervig ist, sie haben es von Version 8 aufwärts sortiert, aber es fügt zusätzliche Entwicklungszeit hinzu dein Build.

Aber in den meisten Situationen ist die Clearfix-Lösung am besten, da sie der Seite kein zusätzliches Markup hinzufügt, wie etwa

%Vor%

das ist alt und veraltet und sollte vermieden werden.

Ich hoffe, das hilft Ihnen, wenn Sie weitere Informationen benötigen oder ich die Frage nicht beantwortet habe, fragen Sie einfach.

    
Stefan Burt 11.07.2012 11:20
quelle
0

Wir setzen die clearfix-Lösung seit Jahren ein.

%Vor%

Dies ist eine einfache CSS-Klasse, die idealerweise auf einen Container angewendet werden muss, der über untergeordnete Float-Elemente verfügt. Da Sie restriktiv sind, den HTML-Code überhaupt nicht zu ändern, können Sie entweder:

  1. Ersetze alle Vorkommen von .cf durch den Selektor deines eigenen DIVs [oder]
  2. Verwenden Sie JS zum Anwenden der Klasse (was schlecht ist, weil Benutzer ein unterbrochenes Layout ein paar Sekunden lang sehen, bis die Seite vollständig geladen ist) [oder]
  3. Verwenden Sie PHP ob_start() + Regex, um die Klasse [oder]
  4. anzuwenden
  5. gehen Sie einfach alt und schreiben Sie alles mit Tabellen um (wie wir es in den 90er Jahren gemacht haben)
Silviu-Marian 11.07.2012 11:47
quelle
0

Es ist einfach:

Wo Sie float:right haben, fügen Sie *clear:left hinzu. Oder wo Sie float:left haben, fügen Sie *clear:right hinzu.

* für IE7 -

Oder zur Validierung *+html .class{clear:left/right}

    
Rustam 14.07.2012 11:30
quelle
0

Ich weiß, dass es ein Jahr her ist, seit es veröffentlicht wurde, aber ich habe eine Lösung gefunden, die mir dafür gefällt. Das GIS verwendet das Expression-Tag in Ihrem CSS für IE7, nur um das floated-Element als erstes Element des Parent im DOM zu verschieben. Es wird für alle anderen Browser semantisch korrekt sein, aber für IE7 modifizieren wir das DOM, um das floated-Element zu verschieben.

In meinem Fall habe ich:

%Vor%

In meinem CSS für Pull-rechts verwende ich:

%Vor%

Das Ergebnis ist, dass IE7 mein <small> als erstes Element von <div> verschiebt, aber alle anderen Browser lassen das Markup alleine.

Dies funktioniert möglicherweise nicht für alle. Technisch ändert es das Markup, aber nur im DOM für IE7 und es ist auch eine Javascript-Lösung.

Ich verstehe auch, dass es mit dem Ausdruck einige Leistungsprobleme geben kann (es ist langsam), also ist es vielleicht nicht ideal, dass es so viele Floats gibt. In meinem Fall funktionierte es gut und erlaubte mir, semantisch korrektes HTML zu behalten.

    
Tom Greever 12.07.2013 17:44
quelle