Ursprünglich am 21. Juli 2008 nur als jQuery-Technik veröffentlicht. Jetzt aktualisiert, um CSS3 und eine Kombitechnik einzuschließen, die mo' betta ist.
Ein Garagentor-Menü ist ein Menü, bei dem ein Bild ("die Tür") nach oben gleitet, um etwas dahinter zu enthüllen. Wir werden dies auf zwei Arten tun, mit CSS3 und mit jQuery. Dann werden wir sie zu einer progressiv verbesserten Methode kombinieren, um damit umzugehen.

Die jQuery-Methode
Direkt aus der Box liefert jQuery die animate-Funktion, mit der wir einige CSS-Attribute über die Zeit verformen können. Dinge wie Deckkraft, Schriftgröße, Breite, Länge, Ränder und Polsterung, im Grunde alles, wo Sie den Wert mit einer Zahl festlegen, wird unterstützt. Es gibt jedoch ein paar bemerkenswerte Einschränkungen für diese Funktion, und eine davon ist "background-position".
Glücklicherweise gibt es ein Plugin, das dabei hilft: das Background-Position Animation Plugin von Alexander Farkas. (direkter Link zu JS). Damit können wir einige lustige Dinge tun! HINWEIS: Dieses Plugin scheint gut mit jQuery 1.2.6 zu funktionieren, brach aber, als ich die aktuellste Version 1.4.3 ausprobierte.
Demo anzeigen Dateien herunterladen
1. Erstellen des benötigten Bildes
Wir benötigen hier drei verschiedene Arten von Bildern. Zuerst ein Hintergrundbild für das gesamte Menü selbst. Dies wird ein großes Bild für das gesamte Menü sein, das die Grafik ist, die "enthüllt" wird, wenn die Tür sich öffnet. Sehen Sie sich meine Photoshop-Datei an
Beachten Sie meine Hilfslinien. Ich habe diese als visuelle Referenz für den "sichtbaren Bereich" innerhalb des Garagentors eingestellt. Beachten Sie, dass die Photoshop-Dateien im Download zu Ihrer Information enthalten sind. Die Kombination zu einer einzigen Grafik spart HTTP-Anfragen, wie bei CSS Sprites.
Zweitens müssen wir die Garagentore erstellen, die wir "Rollläden" nennen werden. Diese müssen separate Grafiken sein, da jeder einzeln animiert werden muss. Ich habe dafür eine separate Vorlage erstellt, damit ich wieder Hilfslinien verwenden kann, um die Dinge so zentriert und gut proportioniert wie möglich zu halten.

Zuletzt benötigen wir ein Fenster, das als Garagentorrahmen fungiert. Dies ist die nette Note, die die ganze Idee zusammenhält. Da dies die oberste Ebene sein wird, werden wir dies auf die Ankerlinks selbst anwenden, damit sie mit eindeutigen URLs klickbar sind.

2. Schreiben des HTML-Markup
Natürlich sollte das Markup, egal wie ausgefallen wir unsere Menüs gestalten wollen, sauber und semantisch sein, damit das Menü auch ohne CSS und/oder JavaScript wie ein Menü aussieht und funktioniert.
Hier ist das Menü-Markup
<ul id="garagedoor">
<li id="shutter1"><a href="#1">Link 1</a></li>
<li id="shutter2"><a href="#2">Link 2</a></li>
<li id="shutter3"><a href="#3">Link 3</a></li>
<li id="shutter4"><a href="#4">Link 4</a></li>
</ul>
Die ID des Menüs gibt uns die benötigte Spezifität. Beachten Sie jedoch, dass jeder Rollladen seine eigene ID hat. Das liegt nur daran, dass jeder Menüpunkt seine eigene Türgrafik haben kann, die wir als Haken verwenden werden. Sie könnten hier auch etwas wie :nth-child() verwenden, aber da wir auf gute Cross-Browser-Kompatibilität abzielen, überspringen wir das. Mit ausgeschaltetem CSS haben wir ein sehr funktionales Menü

3. Das CSS
Hier zeige ich Ihnen die gesamte CSS-Datei und weise Sie dann unten auf einige Dinge hin
#garagedoor {
margin: 50px auto;
list-style: none;
background: url(../images/menu-bg.jpg);
width: 800px;
overflow: auto;
}
#garagedoor li {
width: 200px;
height: 100px;
display: block;
float: left;
}
#garagedoor li#shutter1 {
background: url(../images/shutter-africanplains.jpg) no-repeat;
}
#garagedoor li#shutter2 {
background: url(../images/shutter-reptiles.jpg) no-repeat;
}
#garagedoor li#shutter3 {
background: url(../images/shutter-aviary.jpg) no-repeat;
}
#garagedoor li#shutter4 {
background: url(../images/shutter-arcticzone.jpg) no-repeat;
}
#garagedoor a {
width: 200px;
height: 100px;
display: block;
background: url(../images/window.png) no-repeat bottom center;
text-indent: -9999px;
}
Der Menühintergrund wird auf die UL selbst angewendet. Dann wird jedes Listenelement auf eine bestimmte Breite und Höhe gesetzt (gleiche Höhe für jede einzelne "Enthüllungs"-Grafik) und nach links gefloatet (für ein horizontales Menü). Die ID-Werte der LI-Elemente werden nur verwendet, um die separaten Hintergrundgrafiken anzuwenden. Die Ankerlinks sind, wie oben erwähnt, die oberste Ebene und verwenden daher die Fensterüberlagerung. Diese müssen als Blockelemente eingerichtet, mit Breite und Höhe versehen und mit text-indent vom Bildschirmrand verschoben werden.
4. Das jQuery-JavaScript
Zuerst binden wir die neueste Version von jQuery auf unserer Seite ein, sowie das Plugin, das ich oben in diesem Artikel verlinkt habe. Dann können wir das benötigte jQuery-JavaScript schreiben, um den Garagentor-Effekt zu erzielen.
$(function() {
// Set CSS for old versions of Firefox (Required to use the backgroundPosition js)
$('#shutter1').css({backgroundPosition: '0px 0px'});
$('#shutter2').css({backgroundPosition: '0px 0px'});
$('#shutter3').css({backgroundPosition: '0px 0px'});
$('#shutter4').css({backgroundPosition: '0px 0px'});
// Animate the Shutter
$("#garagedoor a").hover(function(){
$(this).parent().stop().animate({backgroundPosition: '(0px -100px)'}, 500);
}, function() {
$(this).parent().stop().animate({backgroundPosition: '(0px 0px)'}, 500);
});
});
Dann binden wir das "hover"-Ereignis an jeden der Ankerlinks des Menüs. Wenn das Hover-Ereignis über diesen Links auftritt, findet jQuery das Elternelement und führt die Hintergrundposition-Animation auf diesem Element durch. In unserem Fall das LI-Element, mit den eindeutigen Rollläden. Mit der Callback-Funktion des Hover-Ereignisses (z. B. wenn die Maus das Gebiet verlässt) animieren wir den Rollladen zurück in Position.
Wir verwenden hier auch die `.stop()`-Funktion von jQuery, um den Aufbau der Animationswarteschlange zu verhindern (schnelles Überfahren und Verlassen eines Elements mit der Maus führt dazu, dass sich die Garagentür immer wieder öffnet und schließt, auch wenn Sie bereits weggefahren sind). Die Verwendung von .stop() verhindert auch, dass die Animation vollständig abgeschlossen wird, wenn die Maus vor Abschluss der Animation wegbewegt wird. Wenn Sie daran interessiert sind, dies so zu ändern, dass die Garagentüranimation jedes Mal *vollständig* ausgeführt wird, verwenden Sie dieses Plugin.
Und da haben wir es, ein schick aussehendes Menü mit einem ziemlich coolen Animationseffekt mit jQuery!
Demo anzeigen Dateien herunterladen
Die CSS3-Methode
Wir haben gerade die Verwendung von jQuery zur Realisierung des Garagentor-Effekts besprochen. jQuery ist gut geeignet (obwohl fast jede JavaScript-Bibliothek Animationshelfer hat), da es die Animation browserübergreifend funktionieren lässt. Wenn wir dieses Garagentor-Menü als progressive Verbesserung unserer Website betrachten würden, könnten wir dasselbe mit CSS3 erreichen, insbesondere mit der `transition`-Eigenschaft. Übergänge sind mehr als fähig, die gleichen einfachen Animationen durchzuführen, für die wir jQuery verwendet haben.
Mit der Basis, die wir bereits von der jQuery-Methode haben, können wir sie sehr einfach in die CSS3-Methode umwandeln.
- Entfernen Sie das gesamte JavaScript
- Ändern Sie das CSS der Listenelemente, um die `transition`-Eigenschaft einzuschließen
- Fügen Sie ein Hover-Ereignis hinzu, um die Hintergrundposition zu ändern
#garagedoor li {
width: 200px;
height: 100px;
display: block;
float: left;
-webkit-transition: background-position 0.6s ease;
-moz-transition: background-position 0.6s ease;
-ms-transition: background-position 0.6s ease;
-o-transition: background-position 0.6s ease;
transition: background-position 0.6s ease;
}
#garagedoor li:hover {
background-position: 0 -100px !important;
}
Update: In früheren Versionen dieses Artikels habe ich einige Vendor-Präfixe für Übergänge weggelassen. Zum Beispiel habe ich -o- weggelassen, weil die aktuelle Version von Opera zu der Zeit Übergänge unterstützte, aber nicht auf der `background-position`-Eigenschaft (seltsam). Ich habe es wieder hinzugefügt, weil es jetzt funktioniert. Aber die wichtigere Botschaft ist, ich hätte es wahrscheinlich schon früher hinzufügen sollen, da es offensichtlich nur eine Einschränkung war, die in Zukunft behoben werden würde.
Kombination von CSS3 und jQuery
Die angenehmste Methode, eine solche Technik meiner Meinung nach zu realisieren, ist die Verwendung von CSS3, wo es unterstützt wird, und ein Rückfall auf eine JavaScript-Methode. Der beste Weg, dies zu handhaben: Modernizr! Modernizr ist eine kleine JavaScript-Bibliothek, die Sie auf Ihren Seiten einbinden können, um zu identifizieren, was der Browser verarbeiten kann.
In unserem Fall müssen wir wissen, ob der Browser CSS-Übergänge unterstützt. Modernizr fügt dem html-Element auf der Seite eine Klasse namens `csstransitions` hinzu, wenn dies möglich ist. Wir ändern also den Selektor für den CSS-Übergänge-spezifischen Code
/* Modernizer Enabled */
.csstransitions #garagedoor li {
-webkit-transition: background-position 0.6s ease;
-moz-transition: background-position 0.6s ease;
-ms-transition: background-position 0.6s ease;
-o-transition: background-position 0.6s ease;
transition: background-position 0.6s ease;
}
.csstransitions #garagedoor li:hover {
background-position: 0 -100px !important;
}
Dies stellt sicher, dass Browser, die den Übergang nicht unterstützen, diesen gar nicht erst versuchen. Für diese Browser werden wir einen jQuery-basierten Fallback durchführen. Möglicherweise verwenden Sie jQuery bereits aus anderen Gründen auf Ihrer Seite. In unserem Fall ist das nicht so, also sagen wir, dass wir jQuery nur laden wollen, wenn es für den Fallback benötigt wird.
Mit Modernizr konditionieren wir unseren Code
if (!Modernizr.csstransitions) {
// do fallback stuff
}
Der Trick hierbei ist, dass das Laden eines Skripts innerhalb von JavaScript etwas knifflig ist, insbesondere da wir jQuery noch nicht verwenden können. Wir werden diese Idee des dynamischen Ladens nutzen. Wir werden
- Testen, ob jQuery geladen ist
- Wenn nicht (beim ersten Lauf nicht)...
- – Laden Sie das Skript, indem Sie es ins Dokument schreiben
- – Gehen Sie zu #1
- Wenn jQuery geladen ist...
- Laden Sie das Hintergrundposition-Plugin
- Code für die Animation
Hier ist das Laden
var jQueryScriptOutputted = false;
function initJQuery() {
if (typeof(jQuery) == 'undefined') {
if (!jQueryScriptOutputted) {
jQueryScriptOutputted = true;
// Primitive way of loading scripts (no library yet)
document.write("<scr" + "ipt src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></scr" + "ipt>");
}
setTimeout("initJQuery()", 50);
} else {
// jQuery way of loading scripts
$.getScript('js/jquery.backgroundPosition.js', function() {
// Set CSS in Firefox (Required to use the backgroundPosition js)
$('#shutter1').css({backgroundPosition: '0px 0px'});
$('#shutter2').css({backgroundPosition: '0px 0px'});
$('#shutter3').css({backgroundPosition: '0px 0px'});
$('#shutter4').css({backgroundPosition: '0px 0px'});
// Animate the Shutter
$("#garagedoor a").hover(function() {
$(this).parent().stop().animate({backgroundPosition: '(0px -100px)'}, 500);
}, function() {
$(this).parent().stop().animate({backgroundPosition: '(0px 0px)'}, 500);
});
});
}
}
if (!Modernizr.csstransitions) {
initJQuery();
}
Viel Spaß
Sie kennen das Spiel, Leute. Tun Sie, was immer Sie wollen, am besten verwenden Sie es in einem großen Unternehmensprojekt ohne Namensnennung und werden Sie reich.
Das ist sehr cool, ich werde das auf jeden Fall behalten und irgendwo verwenden!
Hoppla! Auf IE7 funktioniert nur die erste Tür!
Wirklich schöner Effekt, aber Josep Viciana hat Recht, unter IE funktioniert nur die erste Tür.
Ja, extrem cool, aber wie andere schon gesagt haben, IE7 stürzt bei allem außer der ersten Tür ab.
Zeile 23, Zeichen 16, 'undefined' ist null oder kein Objekt (passiert, wenn man über die zweite oder nachfolgende Türen fährt)
Es hat offensichtlich Angst vor der Schlange :-)
Extrem cooler Effekt, aber wie Josep sagt, hat er einen Fehler. Er zeigt auch nur 'was' sich hinter Tür #1 verbirgt' in FF2.
Öffnet nur die erste Tür in FF2 und MSIE7 auf XP Pro SP3.
Lustiges Verhalten in FF3. Die Textlinks "Link1", "Link2" usw. werden immer noch angezeigt und die Türen öffnen sich nur, wenn man über die Textlinks fährt und nicht über den gesamten Block?
Dieses Problem in IE 7 und FF2 sollte behoben sein.
Ja! Funktioniert jetzt großartig unter XP-SP3 FF3! Das ist großartig! Ich werde es bald benutzen. Danke!
Hallo Chris, wurde es Dugg (digg'd)? Ich versuche schon über eine halbe Stunde, diesen Artikel zu lesen. Bin froh, dass ich es endlich geschafft habe.
Ich bewege meine Maus 5 Mal über die Bilder und wieder weg, und sie animieren immer noch, obwohl ich meine Maus wegbewegt habe :D
Ja, es scheint einen Fehler zu geben.. du hast das Maus-Ereignis nicht ignoriert, wenn du gerade dabei bist, die Garagentür zu öffnen/schließen.
Fahre einfach 10 Mal schnell mit der Maus über die Tür und dann weg....
Kann nicht verstehen, worüber sich alle aufregen. Es ist ein großartiges Stück Coding und funktioniert absolut einwandfrei in Firefox 3.0.1, Opera 9.27, Safari für Windows 3.1.2 (525.21). Maxthon 2.1 und IE7 7.6.6006.18000, alles unter Windows Vista.
Das war ein CSS-Ah-ha-Moment, danke.
coole Technik, funktioniert gut in Mozilla
Bellissimo
Coole Sache!!!
Kleine Verbesserung: Sie könnten die Animation stoppen, wenn die Maus wegfährt, falls sie noch aktiv ist.
Du bist einer meiner Favoriten!
Das ist das coolste Menü, das ich in meinem kurzen Leben gesehen habe. Ich suche schon nach einem Menü, bei dem sich das Hover-Bild mit der Maus bewegt, wenn man durch das Menü navigiert. Hast du das schon mal gesehen?
Chris, ich würde empfehlen, .stop() einzufügen, wie zum Beispiel
$(this).parent().stop().animate(
@Benjamin: Aha, sehr gut. Das Live-Beispiel wurde aktualisiert und funktioniert jetzt viel besser. Hilfreiche Vorschläge sind immer besser als Schreie wie "es ist kaputt!" =)
Was für ein großartiges Tutorial. Dies ist meine erste Antwort auf ein Tutorial. Ich war beeindruckt. Aber andererseits bin ich in letzter Zeit wirklich von jQuery beeindruckt. Tolles Tutorial. Ich habe mich abonniert.
Vielen Dank,
Jarod
Gute Arbeit, Chris!!
Du hast mich endlich dazu gebracht zu sagen: gut, ich habe darauf gewartet, dass einer deiner Beiträge mich beeindruckt! Großartige Arbeit, schöner Effekt, gut geplant, gut dokumentiert, von einem Designer/Entwickler zum anderen – klopf dir auf die Schulter – der beste bisher! Mach weiter so, ich hoffe nur, ich kann deinem Beispiel folgen und endlich meinen Blog nutzen.
Schöne Kommentarbox auch! Bin froh, dass ich sie endlich benutzt habe!
Wirklich schöner Effekt! Ich liebe JQuery, es ist so einfach, etwas zu bekommen, das so gut aussieht wie etwas, das in Flash gemacht wurde.
Ich liebe das Menü wirklich.
In meiner Debugging-Installation von IE6 sehe ich nur hellblaue Hintergrundfarbe mit abgerundeten Eckboxen (vielleicht, weil es PNG-Bilder sind). Und beim Überfahren mit der Maus ein kurzer Schein des Hintergrunds, wahrscheinlich ein Hover-Glitch?
Tolle Technik und als Plugin mit den behobenen Fehlern wäre es einfach genial.
krank und schick. Gute Arbeit mal wieder.
Chris, wenn du den Bounce-Effekt einbauen könntest, würde das wirklich etwas hermachen.
Ich muss Sie hier zitieren, aber... habe ich nicht nach einem Arsch-Schuss gefragt?
tolles Zeug!!, auch Cross-Browser :D
Sehr genial. Würden Sie ein vertikales erstellen?
Danke dafür, Chris, es wird in mein Blog-Redesign integriert, um meine neuesten Arbeiten zu präsentieren.
Nochmals vielen Dank!
Hallo,
Ich habe die Dateien heruntergeladen und als ich die Seite geöffnet habe, bekomme ich in IE6 (XP) keine Folien oder so etwas.
Es funktioniert zwar in Mozilla.
Könnte mir jemand helfen, es so anzupassen, dass es in IE6 und IE7 funktioniert?
Danke im Voraus,
Harry
Hey, aber es funktioniert nicht in IE6??
*Überraschung*
Das Problem mit IE6 liegt nicht am Skript oder der Technik, sondern daran, dass dies auf transparenten PNGs basiert. Beheben Sie das mit einer der unzähligen Möglichkeiten, und es sollte in Ordnung sein.
Das ist großartig, aber schade, dass es nicht in ** IE6 funktioniert.
Kann das bitte jemand herausfinden?
Und wo sind die Skriptaktualisierungen für IE6????
Hat jemand eine Lösung für den Fehler bei IE gefunden?
Zeile 23 Zeichen 16 – Undefinierter bla bla bla....
weil ich 8 Boxen brauche... jede Hilfe wäre sehr willkommen
Alle anderen Browser funktionieren gut... aber nicht IE... bitte, bitte, bitte helfen Sie....
Ich denke wirklich, dass IE6 inzwischen ziemlich veraltet ist und Besucher dieser Seite, die sich beschweren, dass die Routine nicht funktioniert, sollten auf die neueste Version von IE von der Microsoft-Website aktualisieren.
Das würde viele Seufzer und Stöhnen ersparen.
Persönlich habe ich festgestellt, dass die Routine in ALLEN am häufigsten verwendeten aktuellen Browsern funktioniert.
Gordon Tatler – Ich bin mir nicht sicher, ob Sie sich auf meinen Beitrag beziehen, aber ich spreche von IE7.
Können Sie 8 Boxen haben und sie funktionieren alle gut?
4 Ich bin ok.... 8, nicht.... irgendeine Idee oder Lösung, die Sie vorschlagen können?
Gordon, ich nehme an, Sie sind kein Webentwickler. Leider gibt es viele Leute, die IE6 verwenden. Wenn wir eine Website erstellen, müssen wir uns auch darum kümmern. Sie verfehlen also völlig den Punkt.
Ich bin Webentwickler und wir haben IE6 komplett aufgegeben. Wir haben einen Sniffer eingebaut, der besagt, dass Sie, wenn Sie IE6 verwenden, ein Upgrade benötigen. Er ist jetzt 2 Versionen zurück. Ich persönlich denke, es ist Zeit für ein Upgrade (oder besser noch, ganz von IE wegzuwechseln), da Ihnen viele wirklich großartige Dinge entgehen. IMHO
Oh Mann. Habe gerade seinen Kommentar von '08 gesehen. Ha ha. Ups. Ich hoffe, Sie sind inzwischen weitergezogen!
ElvisParsley: Nein, ich bin kein Webentwickler und kenne daher möglicherweise nicht alle Feinheiten der Webentwicklung und Abwärtskompatibilität.
Allerdings war ich bis zu meinem kürzlichen Ruhestand Netzwerkadministrator mit über 100 Computern unter meiner Kontrolle. Wann immer neue Betriebssysteme, Anwendungen oder Browser veröffentlicht wurden, habe ich sie immer gründlich getestet und, sofern sie meine Tests bestanden und für die Funktion des Netzwerks notwendig waren, habe ich sie vollständig bereitgestellt. Daher wurden alle meine Computer mit der neuesten Technologie auf dem neuesten Stand gehalten.
Ich glaube, die Microsoft-Update-Seite sollte IE automatisch auf Version 7 aktualisieren – wahrscheinlich später in diesem Jahr auf Version 8, also ist die Frage, warum es immer noch so viele "da draußen" gibt, die IE6 verwenden? Aktualisieren sie ihre Computer nicht regelmäßig (sie sollten es wirklich tun)? Oder ist das nur ein wahrgenommenes Problem – ich frage, da meine eigenen Webstatistiken einen rapiden Rückgang der IE6-Besucher auf eine fast vernachlässigbare Zahl zeigen, wobei IE7, Firefox und Opera die Top 3 Positionen einnehmen.
Die Frage, die mich interessiert, ist: Wie weit sollte Abwärtskompatibilität gehen? Warum bei IE6 aufhören? Was ist mit IE 5.5, IE5, IE4...? Es muss irgendwo eine Grenze geben. Selbst Microsoft gibt irgendwann auf!
Kommentare?
Oh, und übrigens. Hat jemand schon den neuen Google Chrome Browser ausprobiert? Er ist verfügbar unter http://www.google.com/chrome/ und dieses Menü funktioniert auch darin.
Weiß jemand, was ich an diesem Skript ändern muss, damit es als PHP-Datei läuft? Mit anderen Worten, wenn ich die .html-Datei in .php umbenenne, was muss ich ändern, damit es funktioniert? Denn diese Änderung hat meines kaputt gemacht :)
Um das Problem, dass nur ein Fenster geöffnet wird, zu beheben, fügen Sie im jQuery, das Sie von dieser Seite kopieren, nach dem;
$(‘#shutter1’).css({backgroundPosition: ‘0px 0px’});
addieren
$(‘#shutter2’).css({backgroundPosition: ‘0px 0px’});
$(‘#shutter3’).css({backgroundPosition: ‘0px 0px’}); $(‘#shutter4’).css({backgroundPosition: ‘0px 0px’});
werden alle Ihre Fenster geöffnet, ich hoffe, das hilft, großartiges Menü übrigens.
Hallo zusammen
Ich bin neu hier, wollte nur sagen, wie beeindruckt ich von dieser Website und den verwendeten Techniken in CSS bin, die mich am meisten faszinieren.
Absolut großartige Arbeit, hoffe, dass ich eines Tages dieses Niveau erreiche lol.
CHEERS :)
Chris,
DEMO funktioniert super unter FF3,
aber überhaupt nicht in IE6 (unter XP sp2).
Es werden nur 4 leere Felder angezeigt.
Entwickler wissen es besser und verwenden IE7, aber
viele tausend Benutzer verwenden immer noch IE6...
Gibt es eine Möglichkeit, eine Korrektur für IE6 zu finden?
HILFE! Nimmt jemand die Herausforderung an?
Mir ist aufgefallen, dass wenn Sie die Dateien von oben auf der Seite herunterladen, anstatt von unten, die in den Kommentaren besprochenen Korrekturen nicht umgesetzt sind. Insbesondere das Problem "nur die erste Registerkarte funktioniert in IE".
Um dies zu beheben, ändern Sie
$('#shutter1')
zu
$('.shutter')
Dadurch wird der Stil auf alle Rollläden per Klasse statt auf einen einzelnen Rollladen per ID angewendet.
Das andere Problem, dass die Rollläden oder das BG-Bild in IE6 nicht angezeigt werden, ist ein PNG-Transparenzproblem. Ich fand, dass dieser kleine Kerl den Trick für mich getan hat
http://jquery.andreaseberhard.de/pngFix/
Ich hoffe, das hilft einigen Leuten, dieses großartige Beispiel zu nutzen. Vielen Dank für das Tutorial. Ich werde es vielleicht auf Edinboro’s Site verwenden
http://www.edinboro.edu/test/testnav/testnav.dot
Es scheint, dass die `text-indent`-Eigenschaft zum Ausblenden des Linktextes den Link in IE6 vom Funktionieren abhält. Ich versuche herauszufinden, wie ich das beheben kann. Mein erster Gedanke war, den Text durch ein transparentes GIF zu ersetzen, aber mir gefällt sehr gut, wie das Menü zurückfällt, so dass jemand, der einen Screenreader verwendet, es immer noch nur als Liste sieht. Ich könnte vielleicht Alt-Text auf dem transparenten GIF verwenden, aber nicht so schön.
Hat jemand eine bessere Lösung dafür gefunden?
Sie könnten den Underscore Hack versuchen.
Hallo! Ich habe Ihr Menü geliebt. Ich möchte eine Funktion einfügen, die bei einem `onclick`-Ereignis ausgelöst wird, sodass das Garagentor für den Link, den ich angeklickt habe, geöffnet bleibt und alle anderen geschlossen bleiben. Wenn Sie auf ein anderes Tor klicken, bleibt dieses offen und schließt das erste Tor. Das wäre ziemlich cool. Können Sie vorschlagen, wie ich das erreichen kann? Oder können Sie die Änderungen einbauen.
Das ist ein brillanter Effekt. Ich werde ihn in Zukunft verwenden müssen. Danke.
Hallo Chris,
Zuerst wollte ich sagen, wie viel Inspiration ich von Ihrer Seite bekomme!!!
Ich wollte andere wissen lassen (um ein paar Stunden Zeit zu sparen), dass der Link zum jquery.backgroundPosition.js (oben) etwas veraltet ist. Es sollte bekannt sein, dass die Verwendung des Codes von diesem Link zu Animationsproblemen führt (könnte aber auch an meinem Styling liegen). Die beste Option ist, zum "Demo" zu gehen und "Firebug" zu verwenden, um den Code von jquery.backgroundPosition.js anzuzeigen und zu kopieren.
Nochmal Chris, viel Respekt!
Hallo, ich versuche das Skript in einem `div`-Tag, aber es funktioniert nicht, wenn `div` im CSS-Skript ohne Attribut angezeigt wird. Dieses Problem tritt bei Firefox 1.9.0.3257 auf, während es bei IE 7 problemlos funktioniert.
Das Hintergrundbild wird um ein Pixel vom linken Rand verschoben.
Irgendwelche Vorschläge?
Danke
Nicola
Hallo Chris,
Erstaunlicher Effekt. Gut gemacht.
Ich bin neu in CSS und jQuery und es funktioniert unter IE, Safari & Chrome. Sieht auch in FF gut aus, bis ich auf einen Link klicke und dann das Hintergrundbild wieder erscheint. Irgendwelche Ideen, was ich falsch mache?
Kann unter http://www.thedanesbakery.ie/wip/index2.htm eingesehen werden
Das gefällt mir, es ist auch ein schöner Artikel Chris. Nur eine Sache stört mich, ich weiß, dass Sie das mit CSS3 tun können (immer noch nicht browserübergreifend kompatibel), aber warum sollten wir das in CSS tun wollen? Es sieht mit jQuer (JavaScript) viel flüssiger aus. Ich verstehe es einfach nicht, oder ist es nur zu Lernzwecken?
Hallo Chris, ich mag diesen Effekt. Schön und einfach, aber ich bin mir mit der Verwendung von Modernizr etwas unsicher.
"Dies stellt sicher, dass Browser, die den Übergang nicht unterstützen, diesen gar nicht erst versuchen."
Ich war der Meinung, dass Browser jegliches CSS, das sie nicht verstehen, ignorieren oder irre ich mich? Wenn ich Recht habe, warum die `.csstransitions`-Klasse verwenden, die von Modernizr generiert wird, weil sie nicht vorhanden ist, wenn JavaScript deaktiviert ist. In Anbetracht dessen, dass Sie CSS3-Übergänge verwenden, warum sollten Sie sich auf JavaScript verlassen? Zum Beispiel, wenn ich das Beispiel in Safari mit deaktiviertem JavaScript aufrufe, funktioniert es nicht, obwohl ich weiß, dass es die CSS3-Übergangseigenschaft unterstützt. Es ergibt für mich keinen Sinn, es sei denn, ich verpasse etwas.
Ich kann verstehen, wenn ein Browser es nicht unterstützt und die Klasse `.no-csstransitions` ausgibt, weil Sie dann mit jQuery (oder der Methode `!Modernizr.csstransitions`, wie Sie es demonstriert haben) gezielt animieren können.
Ist das nicht eine bessere Lösung? Andy Clarke verwendet Modernizr auf die gleiche Weise in seinem neuen Buch, Hardboiled Web Design, daher ist es durchaus möglich, dass ich etwas übersehe.
Vielen Dank,
Tom
Danke, dass du das zur Sprache gebracht hast, Tom.
Die Idee ist, dass Sie sicherstellen möchten, eine Situation zu vermeiden, in der ein Browser versucht, die Animation BEIDE Wege durchzuführen. In meinen Tests führt dies zu seltsamen, ruckeligen, kaputt wirkenden Animationen.
Du wirfst jedoch einen guten Punkt auf, was moderne Browser mit deaktiviertem JavaScript angeht, die die Animation gar nicht ausführen. Hier ist eine Lösung dafür.
1) Füge die Klasse „csstransitions“ zum HTML-Element hinzu.
2) Entferne im Fallback-JavaScript diesen Klassennamen.
Hallo Chris,
Großartiger Beitrag, wie üblich. Ich habe mehr oder weniger in die gleiche Richtung gedacht wie Tom: Modernizr zugunsten des jquery.support-Objekts fallen zu lassen, um zu erkennen, ob der Browser CSS-Übergänge unterstützt. Auf diese Weise könnten Sie sogar die Klasse „csstransitions“ weglassen.
Und wie Tom sagte, die CSS-Regeln, die ein bestimmter Browser nicht versteht, werden nicht ausgeführt.
Oder übersehe ich etwas?
Dieser Typ (und andere) hat eine nette Erweiterung für das jquery.support-Objekt geschrieben.
(Ich habe nichts davon bisher verwendet oder getestet, aber nehmen wir an, es funktioniert alles)
Auf jeden Fall, mach weiter so. Dein Blog ist einer der wenigen, die ich wirklich im Auge behalte.
Hey Chris, das scheint unter Chrome 5.0.375.127 nicht zu funktionieren.
Ich bin mir nicht einmal sicher, wie ich das testen soll, da Chrome sich selbst automatisch aktualisiert. Chrome ist bis Version 7 stabil und 8 oder 9 in Entwicklung, daher mache ich mir darüber keine großen Sorgen. Möglicherweise hast du es während eines kurzen Moments ausprobiert, in dem ich es kaputt gemacht habe...
Ja, vielleicht... Aber das Positive daran ist, dass ich entdeckt habe, dass mein Chrome sich nicht selbst aktualisierte und ich mich im Steinzeit-Chrome-Alter befand. :P Also hat mich das darauf hingewiesen, dass ich es aktualisieren muss, haha. Danke dafür.
Sehr schöne Idee und Anwendung von CSS und jQuery, aber in meinem Browser (Firefox 3.6.12) habe ich festgestellt, dass er sich auf den jQuery-Fallback verlässt, und ich habe zwei Dinge zur Funktionalität der Seite bemerkt.
1) Die linkeste „Garagentür“ funktionierte wesentlich reibungsloser als die rechteste, und ich bemerkte allmähliche Abnahmen der Geschmeidigkeit im Übergang. Gibt es dafür einen Grund?
2) Randnotiz: Der View-Source-Button scheint überhaupt nicht zu funktionieren – er öffnet eine leere schwarze Box mit der Option zum Schließen, aber es wird keine Quelle angezeigt.
1) Scheint mir reibungslos, aber Animationen wie diese können meiner Erfahrung nach echte CPU- und Speicherfresser sein. Vielleicht möchten Sie prüfen, ob das Schließen anderer Anwendungen oder das Neustarten Ihres Browsers hilft.
2) Ich bin mir nicht sicher, was mit Fx 3.6 und der Quellcodeansicht los ist. Es ist jedoch nicht entscheidend, das ist nur ein lustiges kleines Add-on für Demoseiten. Tatsächlich habe ich das Wort „fancy“ dort eingefügt, um anzudeuten, dass es sich um ein fortschrittliches Feature handelt. Wenn Sie den Quellcode benötigen, schauen Sie sich den obigen Artikel für Codebeispiele an oder laden Sie das gesamte Paket herunter.
Großartige Arbeit. Danke fürs Teilen.
Funktioniert weder im Safari 5 noch im Chrome 8dev unter Win XP.
Funktioniert sowohl im Safari 5 als auch im Chrome 8 dev auf einem Mac... Ich weiß nicht, was ich dir da sagen soll, ich bezweifle wirklich, dass die Plattform etwas damit zu tun hat. Vielleicht hast du JavaScript ausgeschaltet?
Tolles Tutorial, danke fürs Teilen, Chris!
Danke fürs Teilen dieser Beispiele!
Ja, Chris, das ist absolut großartig!
Ich liebe das absolut. Ich liebe deine gründliche Erklärung und auch deinen Humor.
Ich möchte das bald für eine Website verwenden. Du bist ein Kerl und du rockst mit deinem Schwanz maximal heraus.
Holla!
Dieser Effekt ist nicht auf Menüs beschränkt, wir haben bereits denselben Effekt auf unserer Portfolioseite verwendet hier: http://rtcamp.com/portfolio/skills/themes/
Das ist cool! Ich kann nicht glauben, dass ich mir das ausgedacht habe! ;)
Das hast du tatsächlich, zumindest in meiner Welt =)
Tolles Beispiel. Ich hatte gerade Modernizr gefunden und suchte nach einem Beispiel, das zeigt, wie es funktioniert. Gutes Ding.
Hat IE6 gerade die 10-Jahres-Marke überschritten, seit Microsoft selbst ihn nicht mehr unterstützt?
Das gesagt, es ist eine ständige Spannung: An welchem Punkt beeinträchtigt Rückwärtskompatibilität die Funktionen einer schicken neuen Website für relativ wenig Ertrag?
Wie immer sollte die anmutige Degradation die Antwort sein. Ich bin sicher, mit ein wenig Herumspielen wäre es möglich, für IE6 oder darunter zu einem einfachen Hover-Zustand zu degradieren.
Danke dafür, Mann, ich werde versuchen, es in meine neueste Blogentwicklungsarbeit einzubauen.
Danke – besonders für die Erklärung von Modernizr! Ich habe mich gefragt, wie ich dieses Skript am besten nutzen kann.
Was für ein cooles kleines Feature. Viel besser mit dem integrierten CSS3. Schade wegen des Opera-Problems.
Ich genieße wirklich die CSS3- und Modernizr-Methode, danke, und ich bin mir nicht sicher, ob dies die erste Integration des Fancy-View-Source ist, aber nett. LT
Sehr schön, ich mache mir immer Sorgen um diese Art von „Effekten“, da ich einfach weiß, dass Kunden eine archaische Maschine mit Netscape 4 finden werden und es nicht funktionieren wird!
Hmm, es scheint, dass der jQuery-Fallback etwas inkonsistent ist. Ich benutze Firefox 3.5.13 unter XP und beim ersten Aufrufen der Demo ging es zu CSS3. Firefox 3.5.13 unterstützt die CSS3-Animationen nicht (zumindest meine nicht), dann ging ich ein paar Mal über die verschiedenen Links in der Erklärung zurück und es funktionierte immer noch nicht. Dann klickte ich auf den letzten Link (ohne zu merken, dass es sowieso alles dieselbe Seite war :P) und der jQuery-Modus sprang an und es funktionierte großartig. Ich habe die Seite aktualisiert und sie ging zurück in den CSS3-Modus.
Funktioniert gut in
FireFox 3.6.1 2Sehr nett und reibungslos. Ich würde mir keine Sorgen mehr um IE6 machen.
Hallo
Darf ich fragen, wofür Overflow in diesem Skript funktioniert?
Ich glaube, es macht keinen Unterschied.
@Chris Coyier: jQuery 1.2.6 irgendjemand? Vielleicht sollte man das zu 1.4.3 ändern oder es /1.4/ oder /1/ machen.
Wie ich im Beitrag sagte, funktioniert das Hintergrundposition-Plugin nicht mit 1.4.3 (aktuell zum Zeitpunkt des Schreibens). Daher muss entweder dieses aktualisiert oder eine andere Lösung gefunden werden.
Garagentür-Stil-Menü IE6 kein Effekt
Ich habe eine frühere Version des Sliding-Door-Effekts modifiziert, die unter IE6 sowie FF und Chrome funktioniert. Siehe http://cybertrain.info/.
Es setzt auf Quirks-Modus, indem es keinen Doctype bereitstellt.
Schlecht, ich weiß, aber es funktioniert.
Hallo! Wirklich schönes Tutorial und leicht verständlich, obwohl ich nur ein Anfänger bin :)
Ich möchte nur wissen, wie ich es zentrieren kann. Weil ich nur zwei Menüs brauche und sie immer links positioniert sind. Ich weiß wirklich nicht, wie ich diese beiden Menüs in der Mitte positionieren soll.
Vielen Dank :)
Hallo! Ich habe es gerade schon herausgefunden :D