Zum Inhalt springen

Tmenü, Css, java Dropdownmenü, z-index Problem in verschachtelter <li>

Erstellt am 11. Januar 2010 · 4 Antworten · letzte Antwort am 11. Januar 2010

Tags: HTML & CSS, Frage

fbene ·

Hallo Leute!

Ich habe ein Typo3, css, Javascript, verschachtelte li Menü.
Nach langem basteln sieht es jetzt auch so aus, wie es das soll. Sogar der IE weiß was ich von ihm will.

Leider verhält es sich mit css menüs ählich wie mit einem Rubikswürfel wenn man ein Seite verschiebt, verschiebt sich auch die andere Seite.

Nun macht also der IE alles was er machen soll, nur der FF zeigt im Submenü nur den ersten Punkt des Menüs über dem Mainmenü und alle Anden werden darunter und somit nicht lederbar, dargestellt:

es folgen ein paar bilder: >>>

diese Bild zeig den Internet Explorer 6.0:
(bei dem alles passt)

Bild: fbene.com/…/Bild2.png

diese Bild zeig den Firefox 3.5.7:
(da es zu einer unterschieden Interpretation der Submenübalkengröße kommt, ist das Submenü kleiner und kommt daher zu einer Überlagerung mit dem Mainmenü. Das wäre kein Problem wenn der z-index das ausgeklappte menü einfach darüber setzen würde )

Bild: fbene.com/…/Bild3.png

dieses Bild zeig FF mit z-index eingeblendet

Bild: fbene.com/…/Bild1.png

Ich habe jetzt zwei Lösungsansätze:

1. Kann ich eine if Bedingung einbauen so das IE und FF und Safari einfach unterschiedliche Submenübalkengrößen gerieren?

2. Oder ich löse das z-index Problem, hier gibt es auch zwei Lösungsansätze:

a. erst habe ich es per css probiert, hat nicht hingehaut.

@charset "UTF-8";
/* CSS Document */

 body {
	font: normal 12px verdana;
	}
	
#subnavi {
	
	background-color: #f3f4f4;
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 12px;
	color: #056b83;
	
	
}


li {
	z-index:11;

}


ul {
	margin: 0;
	padding: 0;
	z-index:11;
	list-style: none;
	width: 227px; /* Width of Menu Items */
	
	border-bottom: 1px solid #ccc;
	}

ul li {
	position: relative;
	width: 227px;
	
	
	}
	
li ul {
	position: absolute;
	left: 226px; /* Set 1px less than menu width */
	top: 0;
	display: none;
	
	}


/* Styles for Menu Items */
ul li a {
	display: block;
	text-decoration: none;
	width: 227px;
	background: #FAFAFA; /* IE6 Bug */
	color: #056b83;
	padding-right: 0px;
	padding-left: 10px;
	padding-top: 3px;
	padding-bottom: 3px;
	border: 1px solid #ccc;
	border-bottom: 0;
	z-index:11;
	}

/* Fix IE. Hide from IE Mac \*/
* html ul li { float: left; height: 1%; z-index:11; }
* html ul li a { height: 1%; z-index:11; }
/* End */

ul li a:hover { color: #056b83; background: #e6e89a; z-index:11; } /* Hover Styles */
		
li ul li a { 
	padding-right: 5px;
	padding-left: 10px;
	padding-top: 3px;
	padding-bottom: 3px;
	z-index:11;
} /* Sub Menu Styles */
		
li:hover ul, li.over ul { display: block; z-index:11; } /* The magic */ 

ul li.current {
	padding-right: 5px;
	padding-left: 10px;
	padding-top: 3px;
	padding-bottom: 3px;
	color: #056b83; 
	background: #e6e89a;
	border: 1px solid #ccc;
	border-bottom: 0;
	z-index:11;
}


ul li.folder {
	display: block;
	text-decoration: none;
	background: #FAFAFA; /* IE6 Bug */
	color: #056b83;
	padding-right: 5px;
	padding-left: 10px;
	padding-top: 3px;
	padding-bottom: 3px;
	border: 1px solid #ccc;
	border-bottom: 0;
	z-index:10;
}


.lauftext {
	font-size: 12px
	font-weight: lighter;
	font-size: 11px;
	font-weight: lighter;
}

.UEberschrieft {
	font-size: 14px;
	color: #056b83;
	font-weight: bolder;
}



#BottomLine {
	
	border-bottom: 1px solid #adb1b2;
	border-left:1px solid #adb1b2;
	border-right:1px solid #adb1b2;
	background-color: #FAFAFA;
}




#katalogcontent {
	overflow: auto;
	width:668; 
	height:284;
	bgcolor="#ffffff"
	
}

.center_column h1{
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 10px;
	text-decoration: underline;
	color: #056b83;
	margin: 0;
	padding-right: 0px;
	padding-left: 0px;
	padding-top: 20px;
	padding-bottom: 10px;
}

.center_column p{
 	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 11px;
	text-align: justify
	margin: 0;
	padding-bottom: 10px;

}

.center_column {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 10px;
	text-align: justify;
	margin: 0;
	padding-right: 0px;
	padding-left: 0px;
	padding-top: 0px;
	padding-bottom: 0px;
}

.center_column a {
	color: #F45C20;
	text-decoration: none;
}
.center_column a:hover{
	text-decoration: underline;
}

b. Lösungsansatz ist das ganze über Typoskript zulösen,geht auch nicht.

tmp.SUBNAVIGATION = HMENU
tmp.SUBNAVIGATION {
        entryLevel = 0
        1 = TMENU
        1 {
                
                wrap = <ul id="subnavi">|</ul>
                
                noBlur = 1
                expAll = 1
                  NO = 1
               	  NO {
			doNotLinkIt = 1
			stdWrap {
			htmlSpecialChars = 1
			append = TEXT
			append.char = 10
			}
			wrapItemAndSub =<li class="folder">|</li>
			
			}
                CUR = 1
                CUR {
                        wrapItemAndSub = <li style="z-index:11">|</li>
                        doNotLinkIt = 1
                        ATagBeforeWrap = 1
                        linkWrap = <li style="z-index:11">|</li>
                        }
                ACTIFSUB = 1
                ACTIFSUB {
                        wrapItemAndSub = <li class="current" style="z-index:11">|</li>
                        doNotLinkIt = 1
                        ATagBeforeWrap = 1
                        linkWrap = <u style="z-index:11">|</u>
                        }
                }
	2 = TMENU
        2 {
                noBlur = 1
                wrap = <ul style="z-index:11">|</ul>
                NO = 1
                NO {
			stdWrap {
			htmlSpecialChars = 1
			append = TEXT
			append.char = 10
			}
			allWrap =<li style="z-index:11">|</li>
			}
                CUR = 1
                CUR {
                        ATagBeforeWrap = 1
                        linkWrap = <ul style="z-index:11">|</ul>
                        doNotLinkIt = 1
                        linkWrap = <li class="current style=" z-index:11="">|</li>
                        }
                }
        }
                   
                ACTIFSUB = 1
                ACTIFSUB {
                        wrapItemAndSub = <li style="z-index:11">|</li>
                        ATagBeforeWrap = 1
                        linkWrap = <em>|</em>
                        }

Bitte kann mir jemand helfen!

ihr könnt euch das Problem auch Live unter
http://brandbase.at/index.php?id=2 ansehen.

Danke im vorhinein für eure zahlreich Tips und Lösungsansätze.

mfg
fbene

etux ·

Habe alles nur schnell überflogen, denke aber, dass Du ein Box-Modell-Problem hast: li.folder hat Breite (durch width für li) und seitliche Paddings. Daher ragt li aus der ul#subnavi raus. Der IE dehnt dagegen die ul#subnavi bis die li rein passt.
Nebenbei: Für Deine Navi ist kein z-index notwendig. Und hatten wir nicht beschlossen, Tabellen für Layouts nicht mehr zu missbrauchen und keine Inline-Styles zu schreiben? 😃

fbene ·

So jetzt habe ich zumindest mal so weite er eine verschachtelte Liste über die erste Ebene hebt. Und zwar bei der current einstellung.
Klar ist noch nicht warum er das nicht bei den anderen macht?

hier ein paar Bilder: >>>

hier ist es wie es sein soll
Bild: fbene.com/…/Bild09.jpg

mit eingeblendeten z-index

Bild: fbene.com/…/Bild08.jpg

bei allen Anderen ist es so

Bild: fbene.com/…/Bild07.jpg

mit eingeblendeten z-index

Bild: fbene.com/…/Bild10.jpg

finde das Total unlogisch, bitte kann mir jemand helfen.
Oder bin ich ganz am Holzweg bitte um feedback

aktuelles Typoskript:

tmp.SUBNAVIGATION = HMENU
tmp.SUBNAVIGATION {
        entryLevel = 0
        1 = TMENU
        1 {
                
                wrap = <ul id="subnavi" style="z-index:10">|</ul>
                
                noBlur = 1
                expAll = 1
                  NO = 1
               	  NO {
			doNotLinkIt = 1
			stdWrap {
			htmlSpecialChars = 1
			append = TEXT
			append.char = 10
			}
			wrapItemAndSub =<li class="folder" style="z-index:11">|</li>
			
			}
                CUR = 1
                CUR {
                        wrapItemAndSub = <li style="z-index:12">|</li>
                        doNotLinkIt = 1
                        ATagBeforeWrap = 1
                        linkWrap = <li style="z-index:12">|</li>
                        }
                ACTIFSUB = 1
                ACTIFSUB {
                        wrapItemAndSub = <li class="current" style="z-index:12">|</li>
                        doNotLinkIt = 1
                        ATagBeforeWrap = 1
                        linkWrap = <u style="z-index:12">|</u>
                        }
                }
	2 = TMENU
        2 {
                noBlur = 1
                wrap = <ul style="z-index:12">|</ul>
                NO = 1
                NO {
			stdWrap {
			htmlSpecialChars = 1
			append = TEXT
			append.char = 10
			}
			allWrap =<li style="z-index:12">|</li>
			}
                CUR = 1
                CUR {
                        ATagBeforeWrap = 1
                        linkWrap = <ul style="z-index:12">|</ul>
                        doNotLinkIt = 1
                        linkWrap = <li class="current style="z-index:12">|</li>
                        }
                }
        }
                   
                ACTIFSUB = 1
                ACTIFSUB {
                        wrapItemAndSub = <li style="z-index:12">|</li>
                        ATagBeforeWrap = 1
                        linkWrap = <em>|</em>
                        }

und CSS

@charset "UTF-8";
/* CSS Document */

 body {
	font: normal 12px verdana;
	}
	
#subnavi {
	z-index:10;
	background-color: #f3f4f4;
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 12px;
	color: #056b83;
	
	
}


li {
	

}


ul {
	margin: 0;
	padding: 0;
	
	list-style: none;
	width: 227px; /* Width of Menu Items */
	
	border-bottom: 1px solid #ccc;
	}

ul li {
	position: relative;
	width: 227px;
	
	
	}
	
li ul {
	position: absolute;
	left: 226px; /* Set 1px less than menu width */
	top: 0;
	display: none;
	
	}


/* Styles for Menu Items */
ul li a {
	display: block;
	text-decoration: none;
	width: 227px;
	background: #FAFAFA; /* IE6 Bug */
	color: #056b83;
	padding-right: 0px;
	padding-left: 10px;
	padding-top: 3px;
	padding-bottom: 3px;
	border: 1px solid #ccc;
	border-bottom: 0;
	
	}

/* Fix IE. Hide from IE Mac \*/
* html ul li { float: left; height: 1%; z-index:12; }
* html ul li a { height: 1%; z-index:12; }
/* End */

ul li a:hover { color: #056b83; background: #e6e89a; z-index:12; } /* Hover Styles */
		
li ul li a { 
	padding-right: 5px;
	padding-left: 10px;
	padding-top: 3px;
	padding-bottom: 3px;

} /* Sub Menu Styles */
		
li:hover ul, li.over ul { display: block; z-index:12; } /* The magic */ 

ul li.current {
	padding-right: 5px;
	padding-left: 10px;
	padding-top: 3px;
	padding-bottom: 3px;
	color: #056b83; 
	background: #e6e89a;
	border: 1px solid #ccc;
	border-bottom: 0;

}


ul li.folder {
	
	
	display: block;
	text-decoration: none;
	background: #FAFAFA; /* IE6 Bug */
	color: #056b83;
	padding-right: 5px;
	padding-left: 10px;
	padding-top: 3px;
	padding-bottom: 3px;
	border: 1px solid #ccc;
	border-bottom: 0;
	
}


.lauftext {
	font-size: 12px
	font-weight: lighter;
	font-size: 11px;
	font-weight: lighter;
}

.UEberschrieft {
	font-size: 14px;
	color: #056b83;
	font-weight: bolder;
}



#BottomLine {
	
	border-bottom: 1px solid #adb1b2;
	border-left:1px solid #adb1b2;
	border-right:1px solid #adb1b2;
	background-color: #FAFAFA;
}




#katalogcontent {
	overflow: auto;
	width:668; 
	height:284;
	bgcolor="#ffffff"
	
}

.center_column h1{
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 10px;
	text-decoration: underline;
	color: #056b83;
	margin: 0;
	padding-right: 0px;
	padding-left: 0px;
	padding-top: 20px;
	padding-bottom: 10px;
}

.center_column p{
 	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 11px;
	text-align: justify
	margin: 0;
	padding-bottom: 10px;

}

.center_column {
	font-family: Verdana, Arial, Helvetica, sans-serif;
	font-size: 10px;
	text-align: justify;
	margin: 0;
	padding-right: 0px;
	padding-left: 0px;
	padding-top: 0px;
	padding-bottom: 0px;
}

.center_column a {
	color: #F45C20;
	text-decoration: none;
}
.center_column a:hover{
	text-decoration: underline;
}
fbene ·

Erstmal Danke für Deine Antwort, ich war mir eh nicht sicher ob z-index der Weisheit letzter Schluss ist.

Ich glaube ich weiß was Du Box-Modell-Problem meinst.

Nebenbei: Für Deine Navi ist kein z-index notwendig. Und hatten wir nicht beschlossen, Tabellen für Layouts nicht mehr zu missbrauchen und keine Inline-Styles zu schreiben? icon_biggrin.gif

Keine Angst wenn ich eine elegantere Lösung finde schrieb ich sicher keine Inline-Styles, aber diese Lösung ist noch nicht in Sicht.

Habe jetzt Versuch mit der Breite was zu verändern, aber dann ist das Sub im IE zuweit weg das man es nicht mehr anklicken kann.

Heißt das ich die Menübreite an einem anderen Punkt des CSS angeben als im

ul li {
position: relative;
width: 219px;


}

Tag?

und warum funktioniert die es im dem Menü wo das current drinnen ist?

Bild: fbene.com/…/Bild09.jpg

bitte gib mir noch ein paar Tips, ich stehe echt an und Du dürftest wissen um was es geht.

Danke! fbene

etux ·

Sorry fürs Warten, aber die Festplatte meines Firewall-Router Rechner ist baden gegangen. Hatte also eine Weile kein I-Net-Zugang.

Inline-Styles erschweren eine Korrektur enorm. Ich habe gerade nicht die Zeit, mich durch den Quellcode durch zu kämpfen.

Im Allgemein:

UL erster Ebene floatet und hat Breite

Alle weitere Uls sind ausgeblendet

Über li:hover ul bzw. li.folder ul wird eine Unterebene eingeblendet

LI dient als Containing Block für die eingeblendete UL erst beim hover:
ul#subnavi li:hover,
ul#subnavi li.folder {
position: relative;
}

Die Links haben ein display: block
Paddings und Margins NUR den Links geben

LI kann jetzt Breite haben ohne Angst vor Box-Modell-Bug

NUR FÜR DIE IEs kleiner 8:
(D.h.: Folgender Code wird per Conditional Comments nur den IEs kleiner 8 zugänglich gemacht)

die Links bekommen eine min-height: 0 wegen den ungewollten Zwischen-Abständen (Für IE 7, die ältere IE stören sich aber nicht daran) :
ul#subnavi a {
min-height: 0;
}

Damit die Gesamtfläche der Links anklickbar ist ( IE 6 und kleiner):
* html ul#subnavi a {
height: 1px;
}

Ungewollte Abstände (für IE 6 und kleiner) :
* html ul#subnavi li {
display: inline;
zoom: 1;
height /**/:1px;
}

Die ul#subnavi kannst Du aber nicht ohne weiteres floaten, bzw. muss Du dafür sorgen dass der Float wieder eingeschlossen wird. Du kannst dafür EasyClearing benutzen (angewendet auf die umschließende Tabellen-Zelle oder auf ein zusätzliches Element, was die ul#subnavi aufnimmt.

Ich wüsste ehrlich gesagt nicht, was bei Deiner Website gegen ein CSS-Layout spricht. Werde die Tabellen lieber gleich los als irgendwann später.

EDIT: Oder noch besser. Du nimmst die Flyout-Navi von Georg:
http://www.just2b.com/mein-typo3/css-ts-menues/vertikales-dropdown-menue.html