DIV Layout, seltsames Verhalten vom IE

Status
Nicht offen für weitere Antworten.

vert0r

Grünschnabel
Hallo,
ich versuche in Layouts tabellenlos auszukommen. Eigentlich bin ich mit Tabellen immer sehr gut hingekommen und die Seiten sehen auch in allen Browsern gut aus, allerdings ist der Quelltext doch immer etwas schlecht lesbar. Darum habe ich mir vorgenommen nun mit DIVS das allgemeine Layout umzusetzen. Soviel zur Vorgeschichte. Nach langem gebastels (so richtig ausgereift ist das ganze meiner Meinung nach noch nicht oder ich bin einfach noch zu schlecht) habe ich nun eine Seite ungefähr so hinbekommen wie ich möchte.
Allerdings habe ich ein Problem:

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<head>
<title></title>
<link rel="stylesheet" href="./style.css" type="text/css" />
<style type="text/css">
html {
height:100%;
margin: 0px;
padding: 0px;
border:0px;
}
body {
	height: 100.01%;
	margin: 0;
	padding: 0;
	border: 0;
	font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
	font-size: 9px;
	color: #7F7772;
	line-height: 1;
}
#apDiv1 {
	position:absolute;
	left:0px;
	top:0px;
	width:50%;
	height:100%;
	z-index:1;
	background-image: url(backleft.jpg);
	background-repeat: repeat-x;
}
#apDiv2 {
	position:absolute;
	left:50%;
	top:0px;
	width:50%;
	height:100%;
	z-index:2;
	background-image: url(backright.jpg);
	background-repeat: repeat-x;
}
#page {
	position:relative;
	width: 990px;
	min-height: 100%;
	height: auto !important;
	height: 100%;
	margin: 0px auto 0px auto;
	z-index: 3;
	background-image:url(backl.jpg);
	background-repeat:repeat-y;
	background-color:#ffffff;
}
#links {
	position: absolute;
	left: 0;
	height: 100%;
	width: 234px;
	padding:0;
	margin:0;
	border:0;
}
#mitte {
	margin: 0px 200px 0px 234px;
	background-color:#ffffff;
	padding-bottom:27px;
}
#rechts {
	position: absolute;
	right: 0;
	width: 200px;
}
#unten {
	position:absolute;
	bottom:0;
	margin: 0 auto;
	height: 27px;
	width: 990px;
	background-image:url(u1.jpg);
	z-index:10;
}
/*Hier Menudefinition*/
.menucontainer {
	width: 234px;
	padding:0;
	margin:0;
	border:0;
	position:relative;
}
.menucontainer ul {
		list-style-type: none;
		margin:0px;
		padding:0px;
		border:0px;
		outline: 0;
		font-size:11px;
}
.normalmenu {
		background-color: #004478;
		border-bottom: solid 1px #2388d5;
		padding-left: 25px;
		background-image:  url(liste.jpg);
		background-repeat: no-repeat;
		background-position:10px 50%;
		padding-bottom:2px;
		padding-top:2px;
}
.normalmenu a {
		color: #fff;
		font-family:Arial, Helvetica, sans-serif;
		font-weight: bold;
		text-decoration: none;
		text-transform:uppercase;
}
.klappmenu {
		background-color: #035592;
		border-bottom: solid 1px #2388d5;
		padding-left: 5px;
		padding-bottom:2px;
		padding-top:2px;
}
.klappmenu a {
		color: #fff;
		font-family:Arial, Helvetica, sans-serif;
		font-size:10px;
		font-weight: bold;
		text-decoration: none;
		text-transform:uppercase;
}
</style>

</head>

<body bgcolor="#e4e4e4">

<div id="apDiv1"></div>
<div id="apDiv2"></div>
<div id="page">
  <div id="links">
  <img src="l1.jpg" width="234" height="316" /><br>

<div class="menucontainer">
  	<ul>    
   
    	<li class="normalmenu"><a>UEBER</a></li>
	    <li class="klappmenu"><a>Organisation</a></li>
	    <li class="klappmenu"><a>Kontaktpersonen</a></li>
	    <li class="klappmenu"><a>Aufgaben</a></li>
	    <li class="klappmenu"><a>Impressum</a></li>
	 
	</ul>
   </div>  
</div>
  <div id="rechts"><img src="r1.jpg" width="200" height="121" /></div>
  <div id="mitte"><img src="m1.jpg" width="556" height="121" /><br />
  
                                 
  </div>
  <div id="unten"></div>

</div>

</body>
</html>

Im FF alles ok, im IE fehlen komplett die Hintergrundfarben bei den <li>.
Ersetze ich aber:

Code:
.menucontainer {
	width: 234px;
	padding:0;
	margin:0;
	border:0;
	//das HIER:   position:relative; durch
        position: absolute;
}

funktioniert das ganze wieder und ich verstehe absolut nicht wo der Zusammenhang sein soll.

2.tes Problem:
In der linken Spalte befindet sich in der kompletten Version ein Klappmenü über JAVA. Wenn ich nun aufklappe und der DIV Inhalt größer als 100% wird vergrößert sich nichts die DIVS sprengen also quasi einach unten raus. Bei normalem Inhalt der nicht geklappt wird vergrößern sich die DIVS.

Vielleicht findet sich ja jemand mit etwas mehr Erfahrung in CSS Layouts der einfach mal über den Quelltext schaut und mir sagen kann ob ich auf dem richtigen Weg bin, ob Fehler drin sind und optimalerweise bei den beiden Problemen helfen kann. Vorallem interessiert mich brennend warum "position:relative;" Hintergrundfarben im IE verschwinden lässt. Meine IE Version ist 6.0.
 
Zuletzt bearbeitet:
Hi,

wenn du auf die position-Deklaration für das DIV .menucontainer komplett verzichtest, werden die Hintergrundfarben ebenfalls angezeigt.

Dass sich das DIV beim Ausklappen der Listennavigation nicht nach unten "ausdehnt", liegt an seiner absoluten Positionierung.

Stattdessen solltest du es mal mit einer Floatumgebung versuchen, die dann für die drei Spalten folgendermaßen lauten würde:

Code:
#links {
        float: left;
        height: 100%;
        width: 234px;
        margin-right: 0 !important; /* Für moderne Browser */
        margin-right: -3px; /* Für IE */
}
#mitte {
        margin: 0px 200px 0px 234px !important; /* Für moderne Browser */
        margin: 0 197px 0 231px; /* Für IE */
        background-color:#ffffff;
        padding-bottom:27px;
}
#rechts {
        float: right;
        width: 200px;
        margin-left: 0 !important; /* Für moderne Browser */
        margin-left: -3px; /* Für IE */
}
Achja, im HTML-Code fehlt nach der Dokumenttyp-Deklaration noch das <html>-Tag. ;)
 
Hi,

wenn du auf die position-Deklaration für das DIV .menucontainer komplett verzichtest, werden die Hintergrundfarben ebenfalls angezeigt.

Dass sich das DIV beim Ausklappen der Listennavigation nicht nach unten "ausdehnt", liegt an seiner absoluten Positionierung.

Stattdessen solltest du es mal mit einer Floatumgebung versuchen, die dann für die drei Spalten folgendermaßen lauten würde:

Danke schonmal für die Anregungen. Leider dehnt es sich auch nicht ohne "absolute" Angabe aus. Ich hatte es auch schon so wie du geschrieben hast, also ohne absolute und mit Floatumgebung, allerdings stimmt dann mein footer (div="unten") nichtmehr. Und noch schlimmer: er verschiebt alle <li>. Je mehr um so weiter nach Rechts.

Hier so abgeändert wie du vorgeschlagen hast, leider immer noch mit gleichem Fehler + Footer kaputt + verschieben von den <li>.

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<link rel="stylesheet" href="./style.css" type="text/css" />
<style type="text/css">
html {
height:100%;
margin: 0px;
padding: 0px;
border:0px;
}
body {
	height: 100.01%;
	margin: 0;
	padding: 0;
	border: 0;
	font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
	font-size: 9px;
	color: #7F7772;
	line-height: 1;
}
#apDiv1 {
	position:absolute;
	left:0px;
	top:0px;
	width:50%;
	height:100%;
	z-index:1;
	background-image: url(backleft.jpg);
	background-repeat: repeat-x;
}
#apDiv2 {
	position:absolute;
	left:50%;
	top:0px;
	width:50%;
	height:100%;
	z-index:2;
	background-image: url(backright.jpg);
	background-repeat: repeat-x;
}
#page {
	position:relative;
	width: 990px;
	min-height: 100%;
	height: auto !important;
	height: 100%;
	margin: 0px auto 0px auto;
	z-index: 3;
	background-image:url(backl.jpg);
	background-repeat:repeat-y;
	background-color:#ffffff;
}
#links {
        float: left;
        height: 100%;
        width: 234px;
        padding: 0;
        margin-right: 0 !important; /* Für moderne Browser */
        margin-right: -3px; /* Für IE */
}
#mitte {
        margin: 0px 200px 0px 234px !important; /* Für moderne Browser */
        margin: 0 197px 0 231px; /* Für IE */
        background-color:#ffffff;
        padding-bottom:27px;
}
#rechts {
        float: right;
        width: 200px;
        margin-left: 0 !important; /* Für moderne Browser */
        margin-left: -3px; /* Für IE */
}
#unten {
	position:absolute;
	bottom:0;
	margin: 0 auto;
	height: 27px;
	width: 990px;
	background-image:url(u1.jpg);
	z-index:10;
}
/*Hier Menudefinition*/
.menucontainer {
	width: 234px;
	padding:0;
	margin:0;
	border:0;
}
.menucontainer ul {
		list-style-type: none;
		margin:0px;
		padding:0px;
		border:0px;
		outline: 0;
		font-size:11px;
}
.normalmenu {
		background-color: #004478;
		border-bottom: solid 1px #2388d5;
		padding-left: 25px;
		background-image:  url(liste.jpg);
		background-repeat: no-repeat;
		background-position:10px 50%;
		padding-bottom:2px;
		padding-top:2px;
}
.normalmenu a {
		color: #fff;
		font-family:Arial, Helvetica, sans-serif;
		font-weight: bold;
		text-decoration: none;
		text-transform:uppercase;
}
.klappmenu {
		background-color: #035592;
		border-bottom: solid 1px #2388d5;
		padding-left: 5px;
		padding-bottom:2px;
		padding-top:2px;
}
.klappmenu a {
		color: #fff;
		font-family:Arial, Helvetica, sans-serif;
		font-size:10px;
		font-weight: bold;
		text-decoration: none;
		text-transform:uppercase;
}
</style>

</head>

<body bgcolor="#e4e4e4">

<div id="apDiv1"></div>
<div id="apDiv2"></div>
<div id="page">
  <div id="links">
  <img src="l1.jpg" width="234" height="316" /><br>

<div class="menucontainer">
  	<ul>    
   
    	<li class="normalmenu"><a>UEBER</a></li>
	    <li class="klappmenu"><a>Organisation</a></li>
	    <li class="klappmenu"><a>Kontaktpersonen</a></li>
	    <li class="klappmenu"><a>Aufgaben</a></li>
	    <li class="klappmenu"><a>Impressum</a></li>
	 
	</ul>
   </div>  
</div>
  <div id="rechts"><img src="r1.jpg" width="200" height="121" /></div>
  <div id="mitte"><img src="m1.jpg" width="556" height="121" /><br />
  
                                 
  </div>
  <div id="unten"></div>

</div>

</body>
</html>

Das verschieben des Footers verstehe ich übrigens überhaupt nicht, er hat eine "width von 990" und "margin 0 auto", also sollte er ja auf alle Fälle zentriert sein, bei mir ist er aber rechts. Im FF klappt alles nach wie vor übrigens außer das ausdehnen nach unten bei aufgeklapptem Menü.

Achja, im HTML-Code fehlt nach der Dokumenttyp-Deklaration noch das <html>-Tag. ;)

Das ist beim Zusammenkopieren flöten gegangen :D

Wieso eigentlich -3px für IE ? Ist das so ne Standardgröße die er immer verschiebt?
 
Bei mir verschieben sich die Listenpunkte im IE6 nicht - siehe Anhang - gleiches gilt im übrigen auch für Firefox.

Den Footer solltest du mit clear:both wieder an die richtige Stelle rücken können. Zudem ist die margin:0 auto-Angabe nicht erforderlich, da sich das Element im DIV #page befindet, das schon im Anzeigebereich horizontal zentriert ist.

Poste doch mal den JS-Code für die Navigation, damit ich mir das nochmal genauer anschauen kann.

Im IE tritt bei floatenden Boxen der sog. "3px-Gap-Bug" auf, der mit den gezeigten Regeln aufgehoben wird.
 

Anhänge

  • ie6.jpg
    ie6.jpg
    41,2 KB · Aufrufe: 35
Also clear:both hat funktioniert, nun ist es auch in der Floatumgebung an der richtigen Stelle.

Das Java Script:

Code:
<script type="text/javascript" language="JavaScript">
function news_more( span ) {
	displayType = ( document.getElementById( span ).style.display == 'none' ) ? 'block' : 'none';
	document.getElementById( span ).style.display = displayType;
}
</script>
 
Kannst du auch mal die Submenüs zeigen, die mit dem Script ein- und ausgeblendet werden, und wie du das Script in der Navigation aufrufst? :confused:
 
Vielen Dank für deine Mühe erstmal. Ich bin schon 2 Tage dran und komm einfach nicht weiter.

Also ein ausgeblendet mit:

Code:
<a href="#" onclick="news_more('klappnav_<?echo $row[id];?>'); return false;"

Das Menü ist eine Klasse, die aus einer Datenbank mit einer rekursiven Abfrage ne Art Treeview-Liste aufbaut. Ich schau mal das ich das irgendwie in die Reihe bekomme das hier ordentlich zu posten gleich.

So habe einfach mal den Quelltexte einer Beispielseite kopiert.
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<style type="text/css">
html {
height:100%;
margin: 0px;
padding: 0px;
border:0px;
}
body {
	height: 100.01%;
	margin: 0;
	padding: 0;
	border: 0;
	font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
	font-size: 12px;
	color: #7F7772;
	line-height: 1;
}
#apDiv1 {
	position:absolute;
	left:0px;
	top:0px;
	width:50%;
	height:100%;
	z-index:1;
	background-image: url(backleft.jpg);
	background-repeat: repeat-x;
}
#apDiv2 {
	position:absolute;
	left:50%;
	top:0px;
	width:50%;
	height:100%;
	z-index:2;
	background-image: url(backright.jpg);
	background-repeat: repeat-x;
}
#page {
	position:relative;
	width: 990px;
	min-height: 100%;
	height: auto !important;
	height: 100%;
	margin: 0px auto 0px auto;
	z-index: 3;
	background-image:url(backl.jpg);
	background-repeat:repeat-y;
	background-color:#ffffff;
}
#links {
        float: left;
        height: 100%;
        width: 234px;
        padding: 0;
        margin-right: 0 !important; /* Für moderne Browser */
        margin-right: -3px; /* Für IE */
}
#mitte {
        margin: 0px 200px 0px 234px !important; /* Für moderne Browser */
        margin: 0 197px 0 231px; /* Für IE */
        background-color:#ECEECC;
        padding-bottom:27px;
		width:556px;
}
#rechts {
        float: right;
        width: 200px;
        margin-left: 0 !important; /* Für moderne Browser */
        margin-left: -3px; /* Für IE */
}
#unten {
	clear:both;
	position:absolute;
	bottom:0;
	height: 27px;
	width: 990px;
	background-image:url(u1.jpg);
	z-index:10;
}
/*Hier Menudefinition*/
.menucontainer {
	width: 234px;
	padding:0;
	margin:0;
	border:0;
}
.menucontainer ul {
		list-style-type: none;
		margin:0px;
		padding:0px;
		border:0px;
		outline: 0;
		font-size:11px;
}
.normalmenu {
		background-color: #004478;
		border-bottom: solid 1px #2388d5;
		padding-left: 25px;
		background-image:  url(liste.jpg);
		background-repeat: no-repeat;
		background-position:10px 50%;
		padding-bottom:2px;
		padding-top:2px;
}
.normalmenu a {
		color: #fff;
		font-family:Arial, Helvetica, sans-serif;
		font-weight: bold;
		text-decoration: none;
		text-transform:uppercase;
}
.klappmenu {
		background-color: #035592;
		border-bottom: solid 1px #2388d5;
		padding-left: 5px;
		padding-bottom:2px;
		padding-top:2px;
}
.klappmenu a {
		color: #fff;
		font-family:Arial, Helvetica, sans-serif;
		font-size:10px;
		font-weight: bold;
		text-decoration: none;
		text-transform:uppercase;
}
</style>
<link rel="SHORTCUT ICON" href="favicon.ico">
<script type="text/javascript" language="JavaScript">
function news_more( span ) {
	displayType = ( document.getElementById( span ).style.display == 'none' ) ? 'block' : 'none';
	document.getElementById( span ).style.display = displayType;
}
</script>
</head>

<body bgcolor="#e4e4e4">

<div id="apDiv1"></div>
<div id="apDiv2"></div>
<div id="page">
  <div id="links">
  <img src="l1.jpg" width="234" height="316" /><br>
  <div class="menucontainer"><ul>    <li class="normalmenu" ><a href="#" onclick="news_more('klappnav_1'); return false;"><font color="#FF0000">+ </font>Der Verband</a></li>
	<span id="klappnav_1" style="display:none">    <li class="klappmenu" >&nbsp;&nbsp;<a href="?nav=rp&bereich=8">- Organisationsstruktur LIV-RP</a></li>
	    <li class="klappmenu" >&nbsp;&nbsp;<a href="?nav=rp&bereich=9">- LIV-Geschäftsstelle</a></li>
	    <li class="klappmenu" >&nbsp;&nbsp;<a href="?nav=rp&bereich=7">- Anfahrt</a></li>
	</span>    <li class="normalmenu" style="background-color:#007bd9;">&nbsp;<a href="?nav=rp&bereich=3">- Ausbildung</a></li>
	    <li class="normalmenu" >&nbsp;<a href="?nav=rp&bereich=2">- Aufgaben</a></li>
	    <li class="normalmenu" >&nbsp;<a href="?nav=rp&bereich=4">- Ihr Experte</a></li>
	    <li class="normalmenu" >&nbsp;<a href="?nav=rp&bereich=11">- Bei anderen gelesen</a></li>
	    <li class="normalmenu" >&nbsp;<a href="?nav=rp&bereich=12">- Energieeinsparung</a></li>
	    <li class="normalmenu" >&nbsp;<a href="?nav=rp&bereich=13">- Links</a></li>
	    <li class="normalmenu" >&nbsp;<a href="?nav=rp&bereich=16">- Verbraucherinfo</a></li>
	    <li class="normalmenu" >&nbsp;<a href="?nav=rp&bereich=15">- Pressemeldungen</a></li>
	    <li class="normalmenu" >&nbsp;<a href="?nav=rp&bereich=14">- Öffentlichkeitsarbeit</a></li>
	    <li class="normalmenu" >&nbsp;<a href="?nav=rp&bereich=17">- Zusammenarbeit</a></li>
	</ul></div>  </div>
  <div id="rechts"><img src="r1.jpg" width="200" height="121" /></div>
  <div id="mitte"><img src="m1.jpg" width="556" height="121" /><br />
  
                                 
  </div>
  <div id="unten"></div>

</div>

</body>
</html>

Bei mir sieht das so aus (Rechts FF, Links IE):
 

Anhänge

  • bild.jpg
    bild.jpg
    64 KB · Aufrufe: 26
Zuletzt bearbeitet:
Versuch es mal hiermit:

Code:
.menucontainer ul, .menucontainer ul li {
                margin:0px;
                padding:0px;
}

.menucontainer ul  {
                list-style-type: none;
                border:0px;
                outline: 0;
                font-size:11px;
}
Ansonsten wird das DIV #links bei mir nach unten erweitert, wenn das Submenü eingeblendet wird. Hab das DIV mal mit einem roten Hintergrund und einem unteren Innenabstand von 10px versehen:
 

Anhänge

  • navigation_aufgeklappt.jpg
    navigation_aufgeklappt.jpg
    19,5 KB · Aufrufe: 19
Hmm hat sich ein wenig was verändert, könnte ein Ansatz sein, ich spiel mal rum damit. Warum verstehe ich aber trotzdem nicht.

Noch ignoriert er dann aber mein Padding auf dem LI und legt damit das Menü über den Bullet (also die Hintergrundgrafik).

Das verlängern funktioniert im IE aber nicht im Firefox :(
 
Status
Nicht offen für weitere Antworten.
Zurück