6 Stimmen

Vertikaler negativer Rand funktioniert nicht im IE8?

Das erste Mal, dass ich hier meine eigene Frage stelle :)

Ich arbeite an einer Website und habe versucht, sie mit dem üblichen Trick vertikal bis zum unteren Rand des Client-Fensters zu verlängern:

html, body { height: 100%; }
.container { min-height: 100%; }

Dann wollte ich einige Kopfzeilen über dem Hauptinhalt und eine klebrige Fußzeile am unteren Rand hinzufügen. Ich verpackte beides in eigene Container und zog die Kopfzeile wie folgt nach oben:

.top { position: relative; z-index: 1; height: 168px; }
.end { height: 58px; }

Da ich die Höhe der Kopfzeile und der Fußzeile kannte, habe ich die Gesamthöhe der Seite so angepasst, dass sie das Client-Fenster genau ausfüllt (keine Bildlaufleisten), es sei denn, der Inhalt ist zu lang. Ich tat dies mit negativen Rändern:

.container { overflow: hidden; min-height: 100%; margin-top: -164px; margin-bottom: -58px; }
.container-in { margin-top: 164px; margin-bottom: 58px; }

Der zweite Container befindet sich innerhalb des ersten und enthält den eigentlichen Inhalt der einzelnen Seiten.

Also, das funktioniert ganz gut auf Firefox 4/5 - Absolut nichts ist aus, es ist genau wie vorgesehen. Chrome scheint auch in Ordnung zu sein. Jedoch auf IE8, es ignoriert den negativen Rand auf .container (ich überprüft mit Entwickler-Tools). Der Container beginnt nach der .top, und als Ergebnis gibt es eine 164px Lücke zwischen der .top und der .container-in wegen der .container-in's margin.

Und das Lustige ist - wenn ich den IE8 in den IE7-Kompatibilitätsmodus schalte, tritt dieses Problem nicht mehr auf! Negative Ränder verhalten sich einfach gut im IE7-Modus, aber natürlich eine Reihe von anderen Sachen bricht, so dass IE zu sagen, Kompatibilitätsmodus zu verwenden ist keine Option.

Gibt es Ideen, wie man dieses Problem umgehen/eine andere Lösung verwenden kann, um in allen Browsern (IE7 nicht erforderlich) den gleichen Effekt zu erzielen? Mache ich etwas falsch?

EDIT: Nach einigen mehr Spaß und Spiele entdeckte ich, dass durch das Ersetzen der negativen Ränder mit negativen Top: Koordinaten (und Einstellung aller Container als relativ) es funktioniert perfekt auf IE8, aber jetzt lässt es eine 222px Lücke unter der HTML-Container in Firefox (laut Firebug). Verwirrt!

EDIT2: Ich glaube, ich weiß, was hier technisch gesehen falsch ist. Internet Explorer 8 hält den negativen Rand für "Überlauf", und da "Überlauf: Ausgeblendet" ist, tötet er den Rand. Wenn ich overflow: hidden entferne, tritt dieses Verhalten nicht mehr auf, aber der Rest des Designs wird dadurch zerstört. Hat jemand schon eine Idee?

3voto

VMAtm Punkte 27277

Über bedingte Kommentare . So erstellen Sie ein IE-exklusives Stylesheet .

Versuchen Sie, den Stil nur für IE8 mit negativen oberen Koordinaten einzustellen:

<!--[if gte IE 8]>
<style>
.container { top: -164px; }
</style>
<![endif]-->

1voto

Rob Punkte 13986

Ich habe keine Zeit, darüber hinaus zu gehen: min-height ist im IE7 fehlerhaft. Hier finden Sie weitere Informationen dazu: http://www.webdevout.net/browser-support-css

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X