Diese Anzeige ist nur für
Nicht-Mitglieder sichtbar!

Jetzt kostenlos registrieren

CSS Navigation (cross-browser)

Fragen zum Thema HTML und CSS können hier gestellt werden

Moderatoren: Basti, Guillermo, Ingo

CSS Navigation (cross-browser)

Beitragvon viskaz am 05.12.2011, 12:37

Hallo Zusammen,

ich brauche Hilfe bei der Erstellung eines CSS Menü mit folgenden Features:

Bild

Hauptnavigation plus Subnavigation.
Hauptnavigation soll horizontal, die Subnavigation vertikal aufgebaut sein.

Ich habe gegoogelt und folgende Menüs gefunden:

Hauptnavigation: nicholls DOTTED LINE REPLACEMENT technique (STEP 4)

Subnavigation: Wire Frame Menu

Ich habe versucht die beiden Menüs miteinander zu verbinden, nicholls Menü als Hauptnavigation, das zweite als Subnavigation.

Mein jetziger Aufbau haut aber noch nicht ganz hin:
Code: Alles auswählen
<html>
<head>
<style type="text/css">
<!--
#primary-nav {
  padding:0;
  margin:0;
  list-style-type:none;
  white-space:nowrap;
  }
 
#primary-nav li, #primary-nav li.menuparent {
  float:left;
  padding:4px 0;
  background:url(images/menu/menueteiler.png) no-repeat right center; margin:0 0 0 -1px;
    }

#primary-nav span {
float: left;
background:url(images/menu/menueteiler.png) no-repeat left center;
}

#primary-nav a {
  position:relative;
  display:block;
  text-decoration:none;
  float:left;
  }
 
#primary-nav a span {
  display:block;
  color: #7a7a7c; /* font */
  text-align:left;
  padding:4px 16px;
  }

#primary-nav a:hover, #primary-nav .menuactive {
  background:#fff;
  border-bottom:4px solid #0064aa;
  }
 
#primary-nav a:hover span {
  color:#000; /* font hover */
  /* background:#08c; */
  }
 
/* Subnavigation */
.unli {
border: 1px solid #C0C0C0;
background-color: white;
border-bottom-width: 0;
width: 170px;
}

* html .unli { /* IE only */
width: 164px;
}

.unli ul {
padding: 0;
margin: 0;
list-style-type: none;
}

.unli a {
font: bold 13px Verdana;
padding: 4px 3px;
display: block;
width: 100%; /*Define width for IE6's sake*/
color: #595959;
text-decoration: none;
border-bottom: 1px solid #C0C0C0;
}

.unli a:visited{
color: #595959;
}

html>body .unli a { /*Non IE rule*/
width: auto;
}

.unli a:hover {
background-color: #F8FBBD;
color: black;
}

#primary-nav .unli a:hover, .unli .menuactive {
  background:#fff;
  border-bottom:0;
  }
 
.clearb {clear:both;}




/* The magic - set to work for up to a 3 level menu, but can be increased unlimited */
#primary-nav ul,
#primary-nav li:hover ul,
#primary-nav li:hover ul ul,
#primary-nav li.menuparenth ul,
#primary-nav li.menuparenth ul ul {
   display: none;
}
#primary-nav li:hover ul,
#primary-nav ul li:hover ul,
#primary-nav ul ul li:hover ul,
#primary-nav li.menuparenth ul,
#primary-nav ul li.menuparenth ul,
#primary-nav ul ul li.menuparenth ul {
   display: block;
}

/* IE Hack, will cause the css to not validate */
#primary-nav li, #primary-nav li.menuparenth { _float: left; _height: 1%; }
#primary-nav li a { _height: 1%; }



-->
</style>
<title>menu</title>
</head>
<body>

<!-- Menü -->
<div id="menuwrapper">
<ul id="primary-nav">
<li class="menuactive"><a class="menuactive" href="#"><span>Home</span></a></li>
<li class="menuparent"><a class="menuparent"><span class="sectionheader">Artikel</span></a>
<ul class="unli">
<li><a href="#"><span>Hosen</span></a></li>
<li><a href="#"><span>Jacken</span></a></li>
<li><a href="#"><span>Pullover</span></a></li>
<li><a href="#"><span>M&auml;ntel</span></a></li>
</ul>
</li>
<li><a href="#"><span>Bekleidung</span></a></li>
<li><a href="#"><span>M&ouml;bel</span></a></li>
<li class="menuparent"><a class="menuparent"><span class="sectionheader">Kontakt</span></a>
<ul class="unli">
<li><a href="#"><span>Kontakt</span></a></li>
<li><a href="#"><span>Anfahrt</span></a></li>
<li><a href="#"><span>Impressum</span></a></li>
</ul>
</li>
</ul>
<div class="clearb"></div>
</div>
<!-- /Menü -->

</body>
</html>


Der obige screenshot ist mit Photoshop gebastelt, und wäre mein Wunsch für's Endergebnis (Der screenshot ist inhaltlich nicht identisch mit dem Aufbau der html-Datei, ich probiere mein Glück schon etwas länger...). Im obigen screenshot ist »Home« plus »Bekleidung« aktiv, das ist nur zur Verdeutlichung gemacht, beim hover-Status zum Beispiel.

Die blaue border-bottom in der Haupnavigation sollte bei der Deklaration »menuactive« in der Hauptnavigation stehen bleiben.

Wenn eine Seite aus der Subnavigation aktiv ist sollte das »menuactive« beides anzeigen, die blaue border-bottom der Haupnavigation plus die background-color der Subnavigation (im screenshot grau dargestellt).

Wäre schick wenn der Aufbau cross-browser gerecht ist?
Ich hoffe, mir kann jemand beim Zusammenbau der Navigation helfen?
viskaz
Mitglied
 
Beiträge: 14
Registriert: 12.09.2011, 18:30
Diese Anzeige ist nur für
Nicht-Mitglieder sichtbar!
 
Jetzt kostenlos registrieren

Re: CSS Navigation (cross-browser)

Beitragvon trixster am 05.12.2011, 18:55

Hallo,
ich habe leider gerade keine Zeit mir deinen Code komplett anzuschauen. Außerdem wäre der HTML Code dazu auch sehr praktisch. Deshalb verweise ich mal nur auf mein Tutorial zu diesem Thema (siehe meine Signatur). In den begleitenden Dateien findest du eine Dropdownnavigation (standardkonform) im Template Ordner, die du ganz leicht anpassen kannst und die in allen aktuellen Browsern funktioniert. Alternativ kannst du auch die in folgendem Thema vorgestellte Variante nehmen, die zusätzlich CSS3 für das sanfte Einblenden der Untermenüs nutzt:
html-css-f9/css3-dropdown-navigation-geloest-t15634.html

Bei Fragen bitte nochmal melden :-)

Gruß trixster
Benutzeravatar
trixster
Mitglied
 
Beiträge: 483
Registriert: 05.03.2009, 16:23

Re: CSS Navigation (cross-browser)

Beitragvon viskaz am 05.12.2011, 20:00

viskaz hat geschrieben:Hallo,
ich habe leider gerade keine Zeit mir deinen Code komplett anzuschauen. Außerdem wäre der HTML Code dazu auch sehr praktisch.

HTML-Code? Der gepostete Code ist komplett (html + css). Eine fertige Datei, die per Doppelklick gestarten werden kann. Lediglich ein kleines Image (menueteiler.png (1px #ccc)) fehlt, ist aber für die Problematik glaube ich nicht so relevant?

Durch die grobe Systematik blicke ich durch, irgendwo habe ich einen Knacks in meinem code, bei dem mir dein Link leider nicht weiterhilft. Wäre toll, falls Du doch noch einmal die Zeit findest dir den code anzuschauen?
viskaz
Mitglied
 
Beiträge: 14
Registriert: 12.09.2011, 18:30

Re: CSS Navigation (cross-browser)

Beitragvon trixster am 05.12.2011, 20:30

ah, den html teil hab ich glatt übersehen. Vor Mittwoch werd ich glaube ich aber keine zeit haben. Vielleicht kann ja noch jemand anders helfen bis dahin.
Benutzeravatar
trixster
Mitglied
 
Beiträge: 483
Registriert: 05.03.2009, 16:23

Re: CSS Navigation (cross-browser)

Beitragvon viskaz am 05.12.2011, 22:33

trixster hat geschrieben:ah, den html teil hab ich glatt übersehen. Vor Mittwoch werd ich glaube ich aber keine zeit haben. Vielleicht kann ja noch jemand anders helfen bis dahin.

Kein Problem :)
Ich habe gerade versucht den von Dir verlinkten Teil entspr. umzubauen, lande dort aber wieder bei der gleichen Problematik: Das Zusammenspiel von Haupt und Subnavigation. Wäre toll, wenn Du dir das am Mittwoch einmal anschauen könntest?
viskaz
Mitglied
 
Beiträge: 14
Registriert: 12.09.2011, 18:30

Re: CSS Navigation (cross-browser)

Beitragvon Guillermo am 06.12.2011, 01:11

Hi viskaz,

vorhandene (relativ kompliziert aufgebaute) Navigationen zu verwenden oder umzubauen ist meist schwieriger als eine neue zu schreiben bei der du selbst ganz genau verstehst was passiert, warum und wie. Ich habe dir das ganze in einer freien Minute mal skizziert und wie ich hoffe einigermaßen ausreichend kommentiert. Es ist nicht ganz perfekt, die letzten Optimierungen überlasse ich dir. Bei den neueren Browser (alle außer IE Verionen < 7) sollte das funktionieren, habs aber nicht getestet :).
Ich habe dir eine Stelle mit dem Kommentar "padding, not margin" versehen. Du kannst zur Übung den padding mal mit einem margin austauschen, sehen was passiert und überlegen warum das fehlschlägt.

Datei navi.html:
Code: Alles auswählen
<html>
<head>
   <link rel="stylesheet" href="navi.css" />
</head>
<body>
   <div id="navi">
      <ul>
         <li>
            <a href="#">Home</a>
            <ul>
               <li><a href="#">Link</a></li>
               <li><a href="#">Link</a></li>
               <li><a href="#">Link</a></li>
               <li><a href="#">Link</a></li>
               <li><a href="#">Link</a></li>
            </ul>
         </li>
         <li>
            <a href="#">Artikel</a>
            <ul>
               <li><a href="#">Link</a></li>
               <li><a href="#">Link</a></li>
               <li><a href="#">Link</a></li>
               <li><a href="#">Link</a></li>
               <li><a href="#">Link</a></li>
            </ul>
         </li>
      <ul>
   </div>
</body>
</html>


Die Datei navi.css:
Code: Alles auswählen
#navi {
   font-family:Arial;
}

/* main menu formating */
#navi ul {
   padding:0px;
   margin:0px;
   list-style-type:none;
}

#navi ul li {
   float:left;
   padding-left:10px;
   padding-right:10px;
   border-left:1px solid grey;
   border-right:1px solid grey;
   margin-left:-1px;
}

/* submenu formating */
#navi ul li ul {
   display:none;
}

#navi ul li ul li {
   clear:both;
   border:1px solid grey;
   margin-top:-1px;
   width:150px;
}

/* let submenu appear on mouseover */
#navi ul li:hover ul {
   margin-left:-10px;
   position:absolute;
   display:block;
   padding-top:5px; /* padding, not margin! */
}

/* underline current menu item */
#navi ul li:hover {
   border-bottom:3px solid blue;
}

/* submenu mouseover effect */
#navi ul li ul li:hover {
   border:1px solid grey;
   background-color:#eee;
}

/* link formating */
#navi a {
   color:grey;
   text-decoration:none;
}

#navi ul li:hover a {
   color:black;
}

#navi ul li ul li a {
   color:black;
}


Viele Grüße,
Guillermo
Gebildet ist der, der weiß, wo er findet, was er nicht weiß.
Benutzeravatar
Guillermo
Moderator
 
Beiträge: 1093
Registriert: 01.10.2007, 18:18
Wohnort: Bayern

Re: CSS Navigation (cross-browser)

Beitragvon viskaz am 07.12.2011, 18:35

@Guillermo
Vielen Dank für deine Mühe. Ich habe heute versucht es anzupassen, so ganz steige ich bei der Anpassung aber noch nicht durch.

Wie kann ich die "border-left / border-right" durch meine Grafik ersetzen, ich möchte die border nicht in voller boxhöhe haben? Ich habe es mit einem span:
#navi ul li span {
display:block;
float: left;
background:url(images/menu/menueteiler.png) no-repeat right center; margin:0;
}

probiert, das funktioniert auch. Aber natürlich nur rechts, jetzt fehlt mir beim ersten Link die linke border:

background:url(images/menu/menueteiler.png) no-repeat left center;

Nur, wohin damit? Ich brauche die Linie nur im Haupt- nicht im Submenü. Das Submenu ist wie's sein soll.

Liebe Grüße
viskaz
viskaz
Mitglied
 
Beiträge: 14
Registriert: 12.09.2011, 18:30

Re: CSS Navigation (cross-browser)

Beitragvon Guillermo am 08.12.2011, 17:44

Hi viskaz,

mit dem Backgroundattribut kannst du momentan nur einen Hintergrund angeben. Ein Lösungsweg wäre einfach dem ganzen Listenelement (li-Tag) einen Hintergrund zu verpassen, also einen blauen Streifen. In dieses Listenelement setzt du dann einen Divcontainer mit weißem Hintergrund der links und rechts z.B. 3 Pixel Abstand hat. In dieses Div packst du dann einfach deinen Link, in etwa so:
Code: Alles auswählen
...
<li><div><a>Link</a></div></div>
...

Code: Alles auswählen
#nav ul li {
    margin-left:-3px; /* Damit nicht zwei Striche nebeneinander sind */
    background-image: url(images/menu/menueteiler.png);
}

#nav ul li div {
    background-color:#fff;
    margin-left:3px;
    margin-right3px;
}


Eine zweite Möglichkeit wäre 3 Spans in das Listenelement zu platzieren und in das erste und letzte Span deinen Strich als Hintergrund oder wenn du willst auch direkt als Bild einzufügen. In das mittlere Spanelement kannst du wieder deinen Link einfügen.

Viele Grüße,
Guillermo

P.s. Deine Quelltexte mit [ code] [ /code] umschließen, dann sind sie leserlicher :)
Gebildet ist der, der weiß, wo er findet, was er nicht weiß.
Benutzeravatar
Guillermo
Moderator
 
Beiträge: 1093
Registriert: 01.10.2007, 18:18
Wohnort: Bayern

Re: CSS Navigation (cross-browser)

Beitragvon viskaz am 08.12.2011, 18:52

Vielen Dank, ich werde das gleich morgen vormittag ausprobieren, und mich dann zurückmelden. Ich habe mein Notebook leider in der Firma vergessen :cry:
viskaz
Mitglied
 
Beiträge: 14
Registriert: 12.09.2011, 18:30

Re: CSS Navigation (cross-browser)

Beitragvon viskaz am 09.12.2011, 11:25

Hallo,

ich habe es mit dem DIV probiert, funktioniert aber leider nicht.
Das Main menue ist vertikal, wenn ich ein
Code: Alles auswählen
#navi ul li {display:inline;}

dazwischensetze, bleibt es trotzdem vertikal. Die Menüteiler-Grafik breitet sich auch auf das Submenue aus.
Ich habe die Grafik hier einmal abgelegt: Menüteiler Grafik.

HTML plus CSS:
Code: Alles auswählen
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="imagetoolbar" content="no" />
<meta name="description" content="" />
<meta name="keywords" content="" />
<meta name="robots" content="" />
<style type="text/css">
<!--
    #navi {
       font-family:Arial;
    }

    /* main menu formating */
    #navi ul {
       padding:0;
       margin:0;
       list-style-type:none;
    }

#navi ul li {
    margin-left:0; /* Damit nicht zwei Striche nebeneinander sind */
    background-image: url(menueteiler.png);
    background-repeat: no-repeat;
    background-position: left center;
}

#navi ul li {
    padding: 0 10px; /* Abstand zum Menüteiler */
}

#navi ul li div {
    background-color:#fff;
    margin-left:1px;
    margin-right:1px;
    clear:both;
}

    /* submenu formating */
    #navi ul li ul {
       display:none;
    }

    #navi ul li ul li {
       clear:both;
       border:1px solid grey;
       margin-top:-1px;
       width:150px;
    }

    /* let submenu appear on mouseover */
    #navi ul li:hover ul {
       margin-left:-10px;
       position:absolute;
       display:block;
       padding-top:5px; /* padding, not margin! */
    }

    /* underline current menu item */
    #navi ul li:hover {
       border-bottom:3px solid blue;
    }

    /* submenu mouseover effect */
    #navi ul li ul li:hover {
       border:1px solid grey;
       background-color:#eee;
    }

    /* link formating */
    #navi a {
       color:grey;
       text-decoration:none;
       display:block;
    }

    #navi ul li:hover a {
       color:black;
    }

    #navi ul li ul li a {
       color:black;
    }
   
    .clearing {clear:both;}

-->
</style>
<title></title>
</head>
<body>

<div id="navi">
      <ul>
         <li>
            <div><a href="#">MainLink 01</a></div>
            <ul>
               <li><a href="#">Link</a></li>
               <li><a href="#">Link</a></li>
               <li><a href="#">Link</a></li>
               <li><a href="#">Link</a></li>
               <li><a href="#">Link</a></li>
            </ul>
         </li>
         <li>
            <div><a href="#">MainLink 02</a></div>
            <ul>
               <li><a href="#">Link</a></li>
               <li><a href="#">Link</a></li>
               <li><a href="#">Link</a></li>
               <li><a href="#">Link</a></li>
               <li><a href="#">Link</a></li>
            </ul>
         </li>
         <li><div><a href="#">MainLink 03</a></div></li>
      <ul>
   </div>

</body>
</html>


Die zweite Variante per SPAN Tag:
Hier der code:
HTML
Code: Alles auswählen
<li><span class="teiler"></span><span><a href="#">Link</a></span><span class="teiler"></span></li>

CSS
Code: Alles auswählen
.teiler {
width:3px;
float: left;
background:url(menueteiler.png) no-repeat center;
}

So wie die spans hintereinander gelegt sind wird keine Grafik angezeigt.

Irgendwo hakt es leider noch.
viskaz
Mitglied
 
Beiträge: 14
Registriert: 12.09.2011, 18:30


Zurück zu HTML/CSS

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast