Wie behebe ich dieses einfache CSS floating Problem in IE?
-
20-08-2019 - |
Frage
Ich habe vier div
Elemente links schwebte bekam. Die dritte div
wird gelöscht.
In den folgenden und Chrom sind die Elemente, wie erwartet positioniert. Die erste und die zweite div
s benachbart zueinander sind, und sind oberhalb der dritten und vierten div
s, die zueinander benachbart sind auch
IE7 auf der anderen Seite stellt den vierten div
benachbart zu dem ersten und zweiten div
s mit dem dritten div
unten.
Ich weiß, ich kann es beheben, indem ein br
Element nach dem zweiten div
Zugabe aber ich mag lieber nicht das Markup bearbeiten, wenn ich nicht haben. Gibt es eine elegantere Möglichkeit, das Problem der Festsetzung?
Ich habe für eine Korrektur für eine Weile zu Google versucht, jetzt haben, aber nicht einen gefunden, was ziemlich überraschend, wenn man bedenkt, wie elementar das Problem zu sein scheint. Vielleicht bin ich etwas fehlt offensichtlich, gibt es eine Referenz-Website, die so eine einfache CSS Probleme aufgelistet oder bin ich nur unwissend über grundlegende CSS?
Edit: Ich habe der Beispielcode etwas komplizierter gemacht, nachdem Nazgulled "gelöst" das Problem (die Kommentare sehen). Es gibt jetzt vier div
s anstelle von drei und der dritte div
wird anstelle des zweiten gelöscht.
Dies ist die komplette Quelltext:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>IE Float Test</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<style type="text/css">
div
{
width: 100px;
height: 100px;
color: white;
font-size: 3em;
float: left;
}
#divone
{
background-color: red;
}
#divtwo
{
background-color: blue;
}
#divthree
{
background-color: green;
clear: both;
}
#divfour
{
background-color: purple;
}
</style>
</head>
<body>
<div id="divone">one</div>
<div id="divtwo">two</div>
<div id="divthree">three</div>
<div id="divfour">four</div>
</body>
</html>
Lösung 2
Einige Monate später ...
gab ich zu versuchen, dieses Problem mit CSS allein zu lösen. Dies ist ein IE7 Fehler, die Sie nicht ohne sie zu berühren Ihre HTML zu vermeiden.
Die endgültige Anwendung dieses Musters floating war in einer Form, in der zwei der div
s waren Eingangselemente und die anderen beiden waren div
s ihren entsprechenden Etiketten. Das Muster wurde mehrere Male in einer großen Form verwendet, und ich wollte wirklich eine elegante CSS-only Lösung finden.
Ich landete schließlich in der Oriented CSS-Framework Objekt und Verpackung alle Elemente mit zusätzlichen div
s, um das gewünschte Layout, wie OOCSS Diktat zu schaffen. Es war der einzige Weg, um meine Seele von IE7 CSS Hölle zu retten und OOCSS ist nicht so schlecht, wenn Sie Ihr erstes Layout abzuschließen.
In Wahrheit ist die allgemeine Antwort, dass dies die Art von Frage, die Sie stellen, wenn Sie nicht wirklich wissen, was Sie mit CSS tun. Wenn Sie ein komplexes Layout einmal in einem blauen Mond zu schaffen, dann haben Sie wahrscheinlich nicht wissen, was du tust; wie es der Fall, wenn ich diese Frage gestellt.
Auch wenn es stimmt, dass IE7 nicht die CSS richtig zu machen, es war auch ein Fall von falschem Umfang meinerseits. CSS ist nicht die ultimative Layout-Sprache, die ein naiver Programmierer es aus machen würde zu sein und CSS ist nicht wirklich unabhängig von der Struktur Ihres HTML. Wieder einmal habe ich entschieden, den einfacheren Weg herausnehmen, indem Sie den OOCSS Rahmen zu verwenden, wenn ich sollte eigentlich die Zeit nehmen, die Grundlagen der CSS zu lernen.
Ach, so ist die Folge der Fristen.
Andere Tipps
Ich weiß nicht, ob dies Ihr wirkliches Problem behebt, aber ich fixiert Ihre Probe wie folgt aus:
- Entfernen Sie die float Attribut von div
- Entfernen Sie die klar Attribut von #divtwo
- Fügen Sie float: left #divtwo und #divthree
Dies macht es wie Ihre Chrom Probe aussieht sowohl in Firefox und IE 7 (Browser I getestet).
Ich bin nicht sicher, was Ihr Ziel ist hier, aber ich würde alle vier <div>
s in einem Containerelement vorschlagen umschließt und eine Breite, um es anwenden, dann den clear
Stil von #divthree
entfernen. es auf diese Weise tun #divthree
und #divfour
ermöglicht unter #divone
und #divtwo
ohne Clearing sie zu bewegen:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>IE Float Test</title>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<style type="text/css">
#divone, #divtwo, #divthree, #divfour
{
width: 100px;
height: 100px;
color: white;
font-size: 3em;
float: left;
}
#divone
{
background-color: red;
}
#divtwo
{
background-color: blue;
}
#divthree
{
background-color: green;
}
#divfour
{
background-color: purple;
}
#container {
width: 200px;
zoom: 1;
}
</style>
</head>
<body>
<div id="container">
<div id="divone">one</div>
<div id="divtwo">two</div>
<div id="divthree">three</div>
<div id="divfour">four</div>
</div>
</body>
</html>
Die zoom
Eigenschaft auf #container
ist notwendig, um die IE6 / 7 Escaping Floats Bug zu vermeiden .
Wenn die obige Lösung nicht durchführbar ist, können Sie ein <br>
oder <div>
nach #divtwo
mit dem Stil clear: left;
hinzufügen:
<div id="divone">one</div>
<div id="divtwo">two</div>
<br style="clear: left;" />
<div id="divthree">three</div>
<div id="divfour">four</div>
Dies ist die Technik in einem schwebenden Seitenlayout Beispiel verwendet auf westciv.com .
Versuchen Sie fügt hinzu:
display:inline-block;
in #divtwo. Wenn das funktioniert, ich würde natürlich etwas bedingte Kommentierung für IE7 hinzufügen