Menü mit Hintergrund(farbe)

Themen: und

Dave Sheas CSS Sprites2 - It’s JavaScript Time zeigt eine Verfeinerung der seit Jahren gebräuchlichen CSS-Spritetechnik, bei der Hintergrundbilder beim Hovern über Links etc. verschoben werden. Dieses verschieben kann man natürlich, bspw. mit jQuery smoother machen, und damit vielleicht noch ein wenig schöner.

Hier in diesem Block habe ich auf die Sprites bei den Menüs jedoch verzichtet, sie sind so minimalistisch, dass eine Änderung der Hintergrundfarbe völlig ausreichte. Trotzdem, kann man natürlich auch diesen Effekt ein wenig – ich sag’s nochmal – smoother gestalten. Natürlich auch mit jQuery, aber ein wenig anders als bei Shea.

Plugin nötig

Zunächst mal gehören Farbanimationen nicht zur Standardausrüstung der aktuellen jQuery-Version, dazu ist ein kleines Plugin nötig, das jQuery-Erfinder John Resig freundlicherweise zur Verfügung gestellt hat: jQuery Color Animations.

Ausgangszustand

Mein Menü basiert auf einer unsortierten Liste. Jedes der Listenelemente hat einen eigenen Klassennamen und einen Link darin.

HTML

<ul class="nav">
  <li class="homepage"><a href="/codecandies/">Homepage</a></li>
  <li class="archives"><a href="/codecandies/archiv">Archiv</a></li>
  <li class="topics"><a href="/codecandies/ressort/themen/">Themen</a></li>
  <li class="about"><a href="/codecandies/about/">About</a></li>
  <li class="impressum"><a href="/codecandies/impressum/">Impressum</a></li>
</ul>

Das CSS für solche Situationen ist denkbar einfach, die Ankerelemente sind dabei als display:block ausgeführt. Um dem Besucher die aktuelle Position auf der Seite zu signalisieren, sind dem <body> passende Klassen hinzugefügt, die u.a. hier genutzt werden.:

CSS

ul.nav li a {
  display: block;
  /* ein wenig gekürzt */
}
ul.nav li a:link,
ul.nav li a:visited {
  background: #45423a;
  color: #a59f8c;
}
ul.nav li a:hover {
  background: #8f8c86;
  color: #fff;
}
body.homepage li.homepage a,
body.archives li.archives a,
body.topics li.topics a,
body.about li.about a,
body.portfolio li.portfolio a,
body.bookmarks li.bookmarks a,
body.impressum li.impressum a {
  background: #5f5d59;
  color: #fff;
  cursor: default;
}

Los geht’s

So funktioniert das Menü also, ganz ohne Javascript, schon seit Monaten. Ich weiss: kein Hexenwerk. Genauso wenig, wie das Javascript, dass man nun nur noch darauf packen muss, damit es smoothed:

Javscript

jQuery(document).ready(function() {
  jQuery(".nav li:not(li." + document.body.className + ") a").hover(
    function() {
      jQuery(this).css("background-color", "#45423a");
      jQuery(this).stop().animate( { backgroundColor: '#8f8c86' }, 500);
    }, function() {
      jQuery(this).stop().animate( { backgroundColor: '#45423a' }, 500);
    }
  );
});

Auffälig vielleicht der Selektionsstring: jQuery(".nav li:not(li." + document.body.className + ") a"). Vorlesen erklärt es: selektiert werden innerhalb von .nav li, die nicht die gleiche Klasse wie der body des Dokuments haben und in denen alle Links, also a. Beim Hover-Event wird dort dann zunächst die Hintegrundfarbe zurückgesetzt (um das Original CSS ausser Kraft zu setzen) und dann die neue Farbe hinzu animiert. Fertig.

Noch keine Kommentare.

Datenschutzhinweis

Daten die in dieses Formular eingegeben werden, werden mit Hilfe des Dienstes welcomments.io verarbeitet. Dabei fallen die in der Datenschutzerklärung dieses Dienstes aufgeführten Daten (IP-Adresse, Browserversion) an, die dort auch gespeichert werden. Gebe keine persönlichen Daten in dieses Formular ein, im Zweifelsfall nutze einen Spitznamen, alles eingegebene wird hier öffentlich angezeigt. Es werden keine Cookies gespeichert, lediglich der Kommentartext wird im Localstorage des Browsers zwischengespeichert.

GitHub-flavored Markdown und einfache HTML-Tags werden unterstützt.

Hinweis…

Diese Seite enthält Videos von Youtube. Diese sind standardmäßig deaktiviert. Falls Du unten auf „Ja“ klickst, werden Daten von Youtube auf Deinen Rechner geladen und so mindestens Deine IP-Adresse an Youtube weiter gegeben. Cookies werden nicht verwendet. Mehr Infos.

Möchtest du Youtube auf dieser Seite aktivieren?