Saubere CSS-Update von IE7 ist 'float: right' drop bug
Ich ständig mich selbst zu finden, die Probleme mit Elementen schwebte direkt im IE7.
Ich habe gelesen, dass viele Stack-Überlauf Fragen, die diesem ähnlich sind, aber es scheint nicht zu sein, durchweg saubere CSS-Antworten.
Was ich damit meine, ist: ich möchte, um zu sehen, Antworten die ändern Sie NICHT den HTML -. E. g:
- Setzen Sie den Schwebekörper ersten
- Fügen Sie ein 'clear: both' div nach dem Schwebekörper.
Ich verstehe, dass manchmal die Schwebekörper nicht Konto für die Eltern Höhe und daher manchmal nicht enthalten, es richtig. Gelegentlich finde ich mich 'hinzufügen-layout", um ein element mit zoom: 1 die manchmal behebt es. Andere Male habe ich mich über Unordnung in einem bedingten IE7 style-sheet, das ist nicht die beste Update meiner Meinung nach.
Hinweis: Was meine ich mit 'mit layout' - http://www.satzansatz.de/cssd/onhavinglayout.html
Habe ich auch gelesen, andere Antworten zu tun mit der Verwendung von relativen und absoluten Positionierung (parent div und div Kind beziehungsweise). Diese zieht es aber oft wirkt sich auf die umgebenden divs.
Ich würde gerne ein Kopfgeld auf diese Frage, wenn jemand kann geben ein, in der Tiefe erklären, wie die Gründe, warum dies passiert, und eine detaillierte Diskussion der verschiedenen Korrekturen, im IDEALFALL NUR CSS!
Vielen Dank!
BEARBEITEN
Das häufigste problem, ich begegnen, wenn ich etwas wie dieses:
Linken Seitenleiste - Main - Sidebar Rechts
Recht wird oft fallen, wenn schwebte. Idealerweise sollte dies in das format Links - Rechts - Main, aber ich finde mich ständig styling-Entwickler (Drupal vor allem), wo dies der Fall ist, und es ist zu viel Aufwand, um Sie zu verändern Ihre Arbeit. Sinn? Da bin ich styling-Entwickler arbeiten Sie niemals den klaren block zu (was ich persönlich denke ist schrecklich und schmutzig sowieso!)
- Dies sollte offensichtlich sein, dass seit IE7 nicht analysiert werden einige css-Stile richtig, es kann nicht sein, eine Antwort, die nicht zu einer änderung des html.
- Welche Probleme haben Sie genau? Können Sie nach einer Geige?
- Hey Rick! Gibt es einen bestimmten Rahmen, den Sie suchen? Also reden wir über die
float: right
Problem innerhalb der Elemente, die Sie versuchen zu legen Sie nebeneinander? Oder vielleicht ein element im Kontext einer Gruppe, die Sie versuchen zu ziehen aus und müssen sitzen, um das Recht aller von Ihnen? - Dies ist immer noch ein problem im IE 11. Mein "Pfeil", der nur eine Klasse definiert: float:right; ist herunterfallen auf die nächste Zeile auf der rechten Seite. Dies tritt nicht in Chrome und Firefox. Der IE ist natürlich noch schrecklich, auch in Windows 10. Sowieso, hinzufügen von overflow:auto für den übergeordneten container hält die Tropfen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Einführung
Ihrem Titel angibt, ein Wunsch sehen, ein Update für die
float: right
drop Fehler, aber dein text impliziert etwas breiteren Anwendungsbereich Wunsch zu sehen, Lösungen für "Probleme mit Elementen schwebte direkt im IE7." Es gibt viele Allgemeine Probleme mit gefloateten Elementen (right
oderleft
) im browser. Auch wenn man die Frage, ob die Unterstützung des IE7 browser ist verdient viel Aufmerksamkeit, nicht mehr, es wird zweifellos auch so bleiben für einige Leute für einige Zeit. Daher werde ich die Gelegenheit nutzen, hier zu Adresse zahlreiche Probleme auf einmal in Bezug schwimmt im browser. Beachten Sie, dass viele Experimente und Referenzen unten kommen aus eine hervorragende Ressource: http://www.brunildo.org/test/index.html.CSS für das Element Enthalten
Für die Eltern, um die gefloateten-element die folgende css festgelegt werden sollte:
Sicherstellen, dass es hasLayout ist wichtig, um zu verhindern, dass Arten von margin-und padding-Fehler, eine Art von peek-a-boo bug, und damit die
overflow
zu löschen. Für eine Folge von Schwimmern, einige html können müssen ändern, wennpadding
auf den container gewünscht wird, um richtig zu arbeiten.Im Hinblick auf eine "drop" - Ausgabe mit einem
float: right
, möchten Sie vielleicht, um zu vermeiden, eine expliziteheight
odermax-height
auf dem Behälter. Einmin-height
ist okay. Einstellung einerheight
ist und dann mit derfloat
höher sein als der container macht IE7 nicht Verhalten mit folgenden Elementen. Es ist keine Reine css-Lösung, die ich gefunden habe, erwähnt.Wenn der container selbst
position: absolute
kann es zu Problemen mit der Positionierung des Schwimmers, die erfordern möglicherweise, dass der Schwimmer selbst festgelegt werden, umposition: absolute
anstatt schwebte.Referenzen:
overflow
zu löschen -- http://www.quirksmode.org/css/clearing.htmlheight
-- http://austinmatzko.com/2007/07/25/internet-explorer-7-float-bug/, http://www.brunildo.org/test/fenc7.html (und seine ähnliches problem link auf dieser Seite).absolute
-- Floating Zu Weit Rechts!CSS für das Kind Schwebte
Für das schwebte Kind-element die css (neben
float: right
) zu setzen, hängt von zwei Dingen:Absolute-Container
Wieder, wie oben erwähnt, eine mit Eltern, die
absolute
erfordern eine änderung in, wie das Kind behandelt wird.Float ist Auch eine Clearing-Element
Wenn die
float
ist auch gehen, um eineclear
drauf ist, dann gibt es zahlreiche Probleme, die entstehen können, je nachdem, ganz und gar auf diehtml
undcss
der Elemente um ihn herum. Es gibt nicht eine einzige kanonische fix, also sehen Sie in den Referenzen unten.Referenzen:
absolute
-- Floating Zu Weit Rechts!clear
-- http://www.brunildo.org/test/IEWfc.html, http://www.brunildo.org/test/IEWfc2.html, http://www.brunildo.org/test/IEWfc3.htmlCSS für die Untergeordneten Elemente des Containers, Bevor der Schwimmer
Wenn die
float: right
folgt ein element in derhtml
Struktur, die sollte auf der linken Seite (und nicht darüber), dann wird die vorhergehende element(s) mussfloat: left
.CSS für die Untergeordneten Elemente des Containers Nach dem Float -
Ein Klares Element
Für ein element nach die
float
hatclear
set, dann, wenn espadding
undbackground-color
sicher, dass es auch hasLayout zu vermeiden, eine Verdoppelung derpadding
; ist auch dieser verhindert, dass zusätzlicher Raum oberhalb derclear
durch containerpadding
, und vermeidet anderemargin
Probleme.Referenzen:
padding
-- http://www.brunildo.org/test/IEClearPadding.html und http://www.brunildo.org/test/IEFloatClearPadding.htmlmargins
-- http://www.brunildo.org/test/Op7_margins_float.html (schauen Sie unten auf der Seite für IE7)Einen Absatz, Bevor Sie ein Element Löschen
Dass ein Absatz mit einer
margin-bottom
und kürzer in der Höhe als diefloat
befindet sich zwischen dem Schwebekörper und einem clearing-element, können für eine zusätzliche Lücke zwischen denclear
und diefloat
gleich, dassmargin
. Es ist nicht bekannt, reinen css-fix andere als das, was dem Absatz eine null am unteren Rand (die möglicherweise nicht akzeptabel, wenn der Absatz kann gehen, größer als der Schwimmer).Referenz:
Abschluss
Kann ich nicht garantieren, ich habe angesprochen, jedes Problem, das auftreten kann, mit einem rechts gefloateten Objekt, aber sicherlich viele wichtigsten sind abgedeckt. Wie auf "warum" diese Dinge passieren, es ist alles", dass die Bugs` im IE7.
float: right; display: inline;
Sache behebt ein IE6 bug, das war im IE7 behoben (es ist also nicht relevant für die Frage).Haben Sie versucht, die Verwendung der clearfix-Lösung zu kollabieren divs? Es sind Variationen über diese und es ist eine neuere version, aber ich habe nicht die url zu hand, aber dies ist standard-clearfix css, die Sie hinzufügen, um das übergeordnete element, das in sich zusammenstürzt und verursacht Probleme mit gefloateten Elementen http://www.webtoolkit.info/css-clearfix.html. Chris Coyer hat eine bessere version hier http://css-tricks.com/snippets/css/clear-fix/.
Sagen Sie "ich verstehe, dass manchmal die Schwebekörper nicht Konto für die Eltern Höhe und daher manchmal nicht enthalten, es richtig" das ist eine Art wahr, die Eltern zusammenbrechen, wenn alle child-Elemente schwebte. Dies ist aufgrund der Elemente, die entfernt wird aus dem normalen Ablauf, wenn in diesem Fall das übergeordnete div nicht in der Lage ist zu berechnen, deren Höhe und zusammenbricht, als wenn es gar nichts, was innerhalb des div.
Aber ohne zu sehen, die Seite und die Ausgabe, die Sie haben kann ich nur schätzen, dass das Problem aufgrund der IE6-IE7 die haslayout-Eigenschaft, die ist wirklich ärgerlich, sortiert Sie ihn aus version 8 nach oben, aber es hat zusätzliche Entwicklungszeit, um Ihre build.
Aber in den meisten Situationen die clearfix-Lösung ist am besten, da es keinen extra markup in die Seite, wie Sie
dies ist alt und veraltet und sollten vermieden werden.
Ich hoffe, dies hilft Ihnen, wenn Sie weitere Informationen benötigen oder ich habe nicht geantwortet, die Frage einfach stellen.
Haben wir bereits mit der clearfix-Lösung seit Jahren.
Dies ist eine einfache CSS-Klasse, die, im Idealfall, die angewendet werden, um einen container, der hat jedes Kind float-Elemente. Da bist du über restriktive ändert nichts an der HTML-überhaupt sind, können Sie entweder:
.cf
mit Ihrem eigenen div-Selektor [oder]ob_start()
+ regex anwenden der Klasse [oder]Es ist ganz einfach:
Wo Sie
float:right
fügen Sie*clear:left
.Oder wo haben Sie
float:left
fügen Sie*clear:right
.*
für IE7-Oder für die Validierung
*+html .class{clear:left/right}
Ich weiß, es ist ein Jahr gewesen, seit dieses geschrieben wurde, aber ich habe eine Lösung gefunden, die ich gerne für diese. Der Kern wird unter Verwendung von 'Ausdruck' - tag in der CSS für den IE7 nur zu bewegen sich die Schwebekörper werden das erste element des übergeordneten Element in der DOM. Es werden semantisch korrekt für alle anderen Browser, aber für IE7 ändern wir die DOM, um Bewegung der Schwebekörper.
In meinem Fall habe ich:
In meinem CSS für die pull-richtig, ich verwende:
Das Ergebnis ist, dass IE7 bewegt meine
<small>
zu werden das erste element der<div>
aber alle anderen Browser lassen Sie das markup alleine.Dies funktioniert möglicherweise nicht für alle. Technisch, es ist die änderung von markup, sondern nur in der DOM für IE7 und es ist auch eine javascript-Lösung.
Auch, ich verstehe es kann einige performance-Probleme mit Ausdruck, (es wird langsam), so ist es vielleicht nicht ideal, es gibt eine Menge von Wagen wie diesem. In meinem Fall war es gut und erlaubt mir, um semantisch korrektes HTML.