div - Überlagerung im IE

Kirzz

Grünschnabel
Hallo Zusammen,

ich habe im IE ein Problem mit einem DIV ( #content : rot angelegt!). Der DIV soll um 40px über den darüber liegenden DIV ( #header ) geschoben werden.
Es funktioniert wie gewünscht in Opera, Firefox u. Safari (Win + Mac), im IE (ie7 getestet) leider nicht.

Wie kriege ich IE dazu sich wie die anderen Browser bei der Darstellung der Seite zu verhalten?

Code:
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title></title>
<style type="text/css">
body {
font-family : Verdana, Arial, Helvetica, sans-serif;
margin : 0 auto;
margin-top : 25px;
background-color : #EEE;
}

#wrapper {
position : relative;
margin : 0 auto;
text-align : right;
width : 900px;
background-color : #ccc;
}

#header {
position : relative;
padding-top : 140px;
}

#header_links {
width : 450px;
float : left;
margin-top : 0;
background-color : #fff;
position : relative;
}

#header_rechts {
float : left;
width : 450px;
background-color : #003366;
height : 240px;
position : relative;
}

#spacer {
clear : both;
}

#header_rechts h1 {
color : #ffffff;
font-size : 1.2em;
font-family : Arial, Helvetica, sans-serif;
font-weight : normal;
letter-spacing : 0.1em;
margin : 80px 20px 0 0;
}

#breadcrump {
position : relative;
width : 630px;
background-color : #fff;
font-size : 0.7em;
margin : 40px 0 0 -200px;
padding : 7px 20px 7px 0;
z-index : 55;
}

#head_container {
position : absolute;
top : 0;
left : 0;
width : 100%;
height : 140px;
background-color : #fff;
}

#content {
min-height : 400px;
width : 610px;
position : relative;
background-color : #f00;
font-size : 0.8em;
text-align : left;
padding : 25px 10px 25px 30px;
margin : -40px 0 0 250px;
z-index : 90;
}

#logo {
position : absolute;
top : 0;
right : 38px;
height : 130px;
padding-top : 28px;
}

#topnavi {
position : absolute;
top : 20px;
left : 34px;
font-size : 0.6em;
color : #999999;
}

#topnavi a {
color : #999999;
text-decoration : none;
}

#topnavi a:hover {
color : #999999;
text-decoration : underline;
}

#search {
position : absolute;
bottom : 13px;
left : 34px;
font-size : 0.6875em;
}

#search a {
color : #000000;
text-decoration : none;
}

#search a:hover {
color : #000000;
text-decoration : underline;
}

#navi {
position : absolute;
font-size : 0.8em;
text-align : left;
left : 0;
top : 380px;
width : 250px;
z-index : 100;
}
</style>

</head>

<body>
<div id="wrapper">
<div id="head_container">
<div id="topnavi"><a href="index.php" accesskey="1">Home</a></div>
<div id="logo"><a href="index.php"><img src="logo.png" border="0" alt=""></a></div>
<div id="search">
<form id="form" method="get" action="">
...
</form>
</div>
</div>
<div id="header">
<div id="header_links"><img src="images/header.jpg" width="450" height="240" border="0" alt=""></div>
<div id="header_rechts"><h1>Überschrift</h1>
<div id="breadcrump">Sie befinden sich hier: <a href="#">Home</a></div>
</div>
<div id="spacer"></div>
</div>
<div id="navi">
<div id="menuwrapper">
<ul id="primary-nav">
<li>
<a href="index.php"><span>Home</span></a>
</li>
</ul>
<div class="spacer"></div>
</div>

</div>
<div id="content">
<p><strong>Guten Tag</strong></p>
Lorem Ipsum
</div>
</div>
</body>
</html>
 
Hi,

das hängt offensichtlich auf irgendeine Weise mit deinen beiden spacer-DIVs zusammen, die du übrigens einmal mit dem id-Attribut und das andere Mal mit dem class-Attribut benennst - letzteres wäre hier korrekt, da ein ID-Bezeichner im Dokumentbaum nur einmal vergeben werden darf. Dementsprechend müsste im Stylesheet der ID-Selektor in einen Klassen-Selektor gewandelt werden.

Wozu du dieses DIV zum Beenden einer Floatumgebung überhaupt am Ende des Blocks #navi notierst, entzieht sich meiner Kenntnis, denn darin befindet sich laut deinem CSS überhaupt kein Element, das mit der float-Eigenschaft formatiert ist.

Nun denn, wenn ich zu Testzwecken diese beiden <div>-Elemente im Code auskommentiere (was dem Entfernen gleichkommt), rückt der IE7 den #content-Block wie gewünscht nach oben.

Durch das nun fehlende <div>-Element im Block #header, wo tatsächlich eine Floatumgebung existiert, fällt in den anderen Browsern dieser Bereich komplett zusammen, und den DIV-Block #content reichen sie bis zum Logo oben rechts durch.

mfg Maik
 
Wozu du dieses DIV zum Beenden einer Floatumgebung überhaupt am Ende des Blocks #navi notierst, entzieht sich meiner Kenntnis, denn darin befindet sich laut deinem CSS überhaupt kein Element, das mit der float-Eigenschaft formatiert ist.
Das clearing ist vom benutzten CMS hinzugefügt worden, ich habs aus dem entspr. Template gerade herausgenommen. Grund fürs clearing wird sein, falls jemand unter dem Menü was platzieren möchte!?

Nun denn, wenn ich zu Testzwecken diese beiden <div>-Elemente im Code auskommentiere (was dem Entfernen gleichkommt), rückt der IE7 den #content-Block wie gewünscht nach oben.
Die anderen Browser aber nicht, heul!

Du meinst damit die genannten spacer {clear : both;}, richtig? Das spacer unter der Navigation ist überflüssig, dass spacer im 'header' kann ich nicht entfernen, darunter befindet sich der content.
Ich hab's ausprobiert. Im IE funktioniert es, in allen anderen Browsern verschwindet der halbe Inhalt wenn ich das 'spacer' entferne. Ich weiß nicht, was ich falsch mache?
Vielleicht ist der Gesamtaufbau des Templates, die Struktur, falsch oder fehlerhaft?
 
Mich persönlich "stören" da ja ein wenig die vielen absoluten Positionsangaben.

Möglicherweise liegt auch hier in dem Zusammenspiel mit der Float-Umgebung im Header-Bereich die Ursache, dass der IE7 nicht damit zurechtkommt, die Box mittels des negativen margin-top-Werts nach oben zu versetzen.

Was ihm hier sicherlich auf die Sprünge helfen würde, wäre stattdessen die Positionsangabe top:-40px.

Nur hast du mit dieser relativen Positionsangabe dann das Problem, dass der ursprünglich eingenommene Raum am unteren Ende des DIVs #wrapper erhalten bleibt, und sich zwischen #content und unterem Fensterrand eine Lücke von 40px ergibt.

mfg Maik
 
Maik hat gesagt.:
Was ihm hier sicherlich auf die Sprünge helfen würde, wäre stattdessen die Positionsangabe top:-40px.

Nur hast du mit dieser relativen Positionsangabe dann das Problem, dass der ursprünglich eingenommene Raum am unteren Ende des DIVs #wrapper erhalten bleibt, und sich zwischen #content und unterem Fensterrand eine Lücke von 40px ergibt.
Das hatte ich schon probiert. Funktioniert auch, aber wie Du schon schreibst, bekomme ich dadurch einen um den Versatz gegebenen Leerraum incl. der #CCC Hintergrundfarbe des #wrapper. Das geht natürlich nicht.

Mich persönlich "stören" da ja ein wenig die vielen absoluten Positionsangaben.
Grund für das mittlerweile chaotische CSS u. HTML ist, dass ich mittlerweile eine Woche immer wieder aufs neue 'alles mögliche' ausprobiere, und einiges davon im Code hängenbleibt ... ich bin leider ein Versager darin, mir vor frn Änderungen Sicherungskopien anzulegen. Ich schäme mich. Ich kriege das Problem einfach nicht gelöst.
 
Moin,

wenn's bei dir zeitlich nicht pressiert, werde ich morgen bzw. über's Wochenende schauen, wie sich das Seitenkonzept (weitesgehend) ohne die absoluten Positionsangaben umsetzen lässt :)

Schließlich führen bekanntermaßen viele Wege nach Rom, und einer sollte sich darunter ausfindig machen lassen, den auch der IE7 mühelos bewältigt :-)

mfg Maik
 
@Maik: Danke Maik. Ich habe die fehlerhaften DIVs jetzt einfach neu angelegt, den neuen Teil mit "float"s gesetzt. Jetzt funktionierts.

Ich habs ein bißchen vereinfacht:

css:
#navi {
float: left;
width : 250px;
}

#content {
float: right;
position: relative;
min-height : 400px;
width : 610px;
background-color : #f00;
font-size : 0.8em;
text-align : left;
padding : 25px 10px 25px 30px;
margin : -40px 0 0 0;
}

html:
<div id="content">
content
</div>
<div id="navi">
navi
</div>

Das floating hat den Ausschlag gegeben. Alle position konnte ich nicht entfernen, sonst gibts Chaos mit den Weitenangaben und den untereinander liegenden DIV's.

Danke für den Anstoß!
 
Sauber :)

Wie ich sagte, gibt es immer viele Wege, die einen nach Rom führen ;)

Wünsch' dir viel Erfolg bei deinen weiteren (Projekt-)Schritten, und dass der IE7 auf halber Wegstrecke nicht schlapp macht :)

mfg Maik
 
Zurück