Grafische Navi 1

Ziel dieses Tutorials ist es, ein horizontales Menü zu erstellen, welches komplett aus Hintergrundgrafiken besteht. Damit das Menü bei abgeschalteten Grafiken noch funktioniert, wird der Linktext ganz normal in den Quelltext geschrieben.

Die Grafiken werden mithilfe der Image Replacement Technik nach Gilder/Levin über den Linktext geschoben.

Mit dem Grafikprogramm eurer Wahl erstellt ihr zuerst eine Grafik, welche beide Linkzustände beinhaltet (normal u. hover).

  • Ein Linkzustand ist 140x40px groß.
  • Die gesamte Grafik hat die Maße 140x80px.

Oben in der Grafik hockt der Normalzustand des Links und darunter der Hoverzustand.

So schaut eine Grafik aus:

Menügrafik

Hier findest du die grafischesmenue_anfang.htm zum Quelltext rauskopieren.

Die benötigten Grafiken kannst du dir hier holen: grafischesmenue_grafiken.htm

Im Browser schaut es so aus:

Grafisches Menü - Start

Vor dem Linktext werden wieder leere spans eingesetzt, die später
die Hintergrundgrafik zugewiesen bekommen.

XHTML ergänzen:

  • <ul id="navi">
  • <li id="navi01"><strong><span></span>Startseite </strong></li>
  • <li id="navi02"><a href="#"><span></span>Galerie</a> </li>
  • <li id="navi03"><a href="#"><span></span>Kontakt</a> </li>
  • </ul>

Bei der aktuellen Seite ist a gegen strong ausgetauscht worden, damit der Link nicht auf sich selber zeigt.

Jetzt geht’s ans gestalten.

CSS ergänzen:

  • li {
  • float:left;
  • width:140px;
  • }
  • a, strong {
  • position:relative;
  • display:block;
  • width:100%;
  • height:40px;
  • text-decoration:none;
  • font-weight:normal;
  • overflow:hidden;
  • }

a und strong haben position:relative; bekommen, damit sich das später absolut positionierte span mit der HG-Grafik daran orientieren kann.

Sie werden zu Blockelementen erhoben und kriegen die Breite von li und die Höhe der halben Grafik (ein Zustand halt!). overflow:hidden ist dafür, damit der Linktext des Markup’s bei Schriftvergrößerung nicht darunter hervorlugen kann.

Bitte CSS ergänzen:

  • #navi #navi01 a span {
  • position:absolute;
  • width:100%;
  • height:40px;
  • top:0;
  • left:0;
  • background:url(startseite.png) no-repeat 0 0;
  • }
  • #navi #navi02 a span {
  • position:absolute;
  • width:100%;
  • height:40px;
  • top:0;
  • left:0;
  • background:url(galerie.png) no-repeat 0 0;
  • }
  • #navi #navi03 a span {
  • position:absolute;
  • width:100%;
  • height:40px;
  • top:0;
  • left:0;
  • background:url(kontakt.png) no-repeat 0 0;
  • }

Der Normalzustand der Links ist definiert worden. Die obere Hälfte der Grafik mit dem Normalzustand ist sichtbar. Durch position:absolute; verdeckt die Grafik den Linktext.

Bitte CSS ergänzen:

  • #navi #navi01 strong span {
  • position:absolute;
  • width:100%;
  • height:40px;
  • top:0;
  • left:0;
  • background:url(startseite.png) no-repeat 0 -40px;
  • }
  • #navi #navi02 strong span {
  • position:absolute;
  • width:100%;
  • height:40px;
  • top:0;
  • left:0;
  • background:url(galerie.png) no-repeat 0 -40px;
  • }
  • #navi #navi03 strong span {
  • position:absolute;
  • width:100%;
  • height:40px;
  • top:0;
  • left:0;
  • background:url(kontakt.png) no-repeat 0 -40px;
  • }

Da bei dem Link der aktuellen Seite jeweils a durch strong ersetzt wurde, damit der Linktext der aktuellen Seite immer hervorgehoben ist, musste die CSS entsprechend geändert werden. Für strong wird der untere Teil der Grafik ins Bild gehoben.

Bitte CSS ergänzen:

  • #navi #navi01 a:hover span,
  • #navi #navi01 a:focus span,
  • #navi #navi01 a:active span,
  • #navi #navi02 a:hover span,
  • #navi #navi02 a:focus span,
  • #navi #navi02 a:active span,
  • #navi #navi03 a:hover span,
  • #navi #navi03 a:focus span,
  • #navi #navi03 a:active span {
  • background-position:0 -40px;
  • }

Der untere Teil der Grafik wird durch das hovern per background-position ins Bild geschoben. Jetzt müssen wir den Float noch clearen und schauen ob der IE ein Problem hat.

Bitte im Quelltext direkt vor </div> folgendes notieren:

<hr class="clear" />

Bitte CSS ergänzen:

  • .clear {
  • clear:both;
  • height:0;
  • width:0;
  • visibility:hidden;
  • border:0;
  • }

Jetzt sollte es so ausschauen:

Grafisches Menü - Fertig

Mmh.., und damit ist auch der IE einverstanden?

Der IE8 ja, der IE 6 und der IE 7 nö!

Die zwei zeigen unter den Menüpunkten eine Lücke. Außerdem haben sie vergessen beim hovern aus dem Pfeil eine Hand zu machen.

Beim IE 6 bleiben außerdem die Menüpunkte nach dem hovern in der gehoverten Position stehen.

Ein paar kleine Eintragungen im Conditional Comment schaffen da Abhilfe

Bitte den Conditional Comment ergänzen:

  • <!--[if lte IE 8]>
  • <style type="text/css">
  • * html .clear { display:none; }
  • *+html .clear { display:none; }
  • * html li a span { cursor:hand; }
  • *+html li a span { cursor:hand; }
  • * html a:hover { background-position:0 0; }
  • </style>
  • <![endif]-- >

Die ersten beiden Anweisungen lassen die Lücke unter den Menüpunkten verschwinden. Die .clear die wir zum Clearen definiert haben, wird für den IE 6/IE 7 aus dem Rennen genommen. Der IE 6/IE 7 schließt die Floats fälschlicherweise automatisch ein, wenn das umgebende Element HasLayout hat. Diesen Umstand machen wir uns hier zunutze.

Die nächsten beiden Anweisungen hängen dem IE 6/IE 7 die Hand beim Hovern an die Backe.

Die letzte Anweisung mutet unsinnig an, sorgt aber dafür, das beim IE6 die Menüpunkte nach dem Hovern wieder in die Ausgangspostion zurückspringen.

Ich hoffe das Tutorial ist so verständlich, das ihr euch von nun an ohne Probleme ein grafisches Menü basteln könnt.

Kategorie: Navigationen, XHTML/CSS
Schlagworte: , , , .

Nach oben

12 Antworten auf Grafische Navi 1

  1. Pingback: Grafische Navi 2 | KS Webdesign der Blog

  2. Pingback: Grafimen

  3. Pingback: Anonymous

  4. Pingback: Anonymous

  5. cordi sagt am

    WOW
    Ich bin echt begeistert! Vielen Dank für die tolle Erklärung.
    Was man nicht alles machen kann…tsts :o ) !!!

    Gruß

  6. Hubspe sagt am

    Hi cordi,

    danke. :-)

    Vor allem was man nicht alles ohne Scripten zustandebringen kann!

  7. Pingback: Blizzing - Bewertung

  8. Pingback: Textabstand nach oben in FF und IE unterschiedlich - XHTMLforum

  9. Pingback: Zwei unterschiedliche Divs umschliessen - XHTMLforum

  10. Julian sagt am

    Hi,

    vielen Dank für das praktische tutorial!
    Eine Frage kommt nun doch auf – wie kommt es, dass am ende das menü einzeilig ist? ich sehe kein “display: inline” oder ähnliches!?

    merci :)

    • Klaus sagt am

      Hi Julian,

      durch Float!
      Mit display:inline hat man nicht so viel Kontrolle über die Darstellung.

      Schau doch mal hier, ab Punkt 10 werden alle möglichen Arten von Menüs erklärt.
      Hier vielleicht noch etwas Grundllagenlektüre, wo man beim Lernen direkt mitbasteln kann. ;)

  11. Pingback: meine Webseite - Seite 2 - XHTMLforum

Sprich und fürchte dich nicht!

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Bitte maskiert < mit &lt; und > mit &gt; sonst verschwinden sie im Nirgendwo!