Auf der Suche nach einer Bildergalerie für deine Webseite? Dann hab ich hier vielleicht das was du suchst. Ich zeige hier Schritt für Schritt, wie ihr eine ansprechende Bildergalerie mit jeder Menge CSS3-Schnickschnack erstellen könnt. So werden wir folgende CSS3-Eigenschaften nutzen:
transitions
transform
border-radius
box-shadow
- Pseudoklassen
Habt ihr Lust?
Grundeinstellungen für Galerie und Bilder
Zunächst wollen wir einige Grundeinstellungen für die Galerie und Bilder festlegen. Wir werden die Galerie später als Div-Container in unsere Webseite einbinden. Daher müssen wir einige Dinge vorab definieren.
#galerie { /* Hintergrundfarbe */ background:#ffffff; /* Runde Ecken */ -moz-border-radius:10px; border-radius:10px; /* Innenabstand */ padding:20px; /* Breite */ width:700px; /* Außenabstand */ margin:20px auto; }
Die Bilder werden wir als img
einbinden. Auch hier ein paar grundlegende Dinge:
#galerie img { /* Hintergrundfarbe der Bilder */ background:#ffffff; /* Breite der Bilder */ width:150px; /* Außenabstand */ margin:15px 10px; }
Polaroid-Fotos
Wie wär’s mit Bildern im typischen Polaroid-Stil? Dazu ändern wir einfach den Innenabstand:
padding:10px 10px 50px 10px;
Schlagschatten für die Bilder
Die Bilder sollen sich mit einem dezentem Schlagschatten vom Hintergrund abheben:
-moz-box-shadow: 0 0 5px 2px #ccc; -webkit-box-shadow: 0 0 5px 2px #ccc; box-shadow: 0 0 5px 2px #ccc;
Drehung der Bilder
Um der Galerie ein wenig Pepp zu geben, wollen wir die Bilder gedreht anzeigen, sagen wir mit einer Linksdrehung von 2 Grad.
-webkit-transform: rotate(-2deg); /* Saf3.1+, Chrome */ -moz-transform: rotate(-2deg); /* FF3.5+ */ -o-transform: rotate(-2deg); /* Opera */ transform: rotate(-2deg);
Alle Bilder im gleichen Winkel ist langweilig, oder? Wie wäre es, wenn jedes zweite Bild um 2 Grad nach rechts gedreht wäre?
#galerie img:nth-child(2n) { -webkit-transform: rotate(2deg); /* Saf3.1+, Chrome */ -moz-transform: rotate(2deg); /* FF3.5+ */ -o-transform: rotate(2deg); /* Opera */ transform: rotate(2deg); }
Dies erreichen wir mit dem Pseudo-Selektor :nth-child
. In Klammern dahinter wird angegeben, welches Child-Element betroffen ist, in diesem Fall jedes zweite.
Bilder vergrößern
Wenn die Maus über das Bild fährt, wollen wird das Bild skalieren. Für dieses Beispiel nehme ich den Faktor 5. Gleichzeitig soll das vergrößerte Bild gerade, also im Winkel von 0 Grad angezeigt werden.
#galerie img:hover { -webkit-transform: rotate(0deg) scale(5); /* Saf3.1+, Chrome */ -moz-transform: rotate(0deg) scale(5); /* FF3.5+ */ -o-transform: rotate(0deg) scale(5); /* Opera */ transform: rotate(0deg) scale(5); }
Noch ein paar i-Tüpfelchen
Zum Schluss wollen wir unserer Galerie noch ein wenig Pfiff geben. Wer mag kann die Bilder in der Standardanzeige leicht transparent erscheinen lassen. Ich nehme hier mal einen Wert von 80%:
#galerie img { opacity:0.8; }
Die Transparenz soll bei :hover
entfallen. Außerdem soll der Polariod-Stil wegfallen und das Bild rahmenlos angezeigt werden. Zusätzlich wollen wir den Schlagschatten nach rechts unten versetzen.
#galerie img:hover { opacity:1; padding:0; -moz-box-shadow: 2px 2px 2px #888; -webkit-box-shadow: 2px 2px 2px #888; box-shadow: 2px 2px 2px #888; /* Bild soll im Vordergrund angezeigt werden, daher */ position:relative; z-index:1; }
Haben wir noch was vergessen? Richtig. Die Effekte sehen so ziemlich abgehackt aus. Muss ja nicht sein. Wir wollen das animieren, mit dem Befehl transition
:
#galerie img { -webkit-transition: all 0.4s ease-out; /* Saf3.1+, Chrome */ -moz-transition: all 0.4s ease-out; /* FF3.5+ */ -o-transition: all 0.4s ease-out; /* Opera */ transition: all 0.4s ease-out; }
All together now…
Und hier der Code nochmal zusammengefasst.
#galerie { background:#ffffff; -moz-border-radius:10px; border-radius:10px; padding:20px; width:700px; margin:20px auto; }
#galerie img { background:#ffffff; width:150px; margin:15px 10px; padding:10px 10px 50px 10px; opacity:0.8; -moz-box-shadow: 0 0 5px 2px #ccc; -webkit-box-shadow: 0 0 5px 2px #ccc; box-shadow: 0 0 5px 2px #ccc; -webkit-transform: rotate(-2deg); /* Saf3.1+, Chrome */ -moz-transform: rotate(-2deg); /* FF3.5+ */ -o-transform: rotate(-2deg); /* Opera */ transform: rotate(-2deg); -webkit-transition: all 0.4s ease-out; /* Saf3.1+, Chrome */ -moz-transition: all 0.4s ease-out; /* FF3.5+ */ -o-transition: all 0.4s ease-out; /* Opera */ transition: all 0.4s ease-out; }
#galerie img:nth-child(2n) { -webkit-transform: rotate(2deg); /* Saf3.1+, Chrome */ -moz-transform: rotate(2deg); /* FF3.5+ */ -o-transform: rotate(2deg); /* Opera */ transform: rotate(2deg); }
#galerie img:hover { opacity:1; padding:0; position:relative; z-index:1; -moz-box-shadow: 2px 2px 2px #888; -webkit-box-shadow: 2px 2px 2px #888; box-shadow: 2px 2px 2px #888; -webkit-transform: rotate(0deg) scale(5); /* Saf3.1+, Chrome */ -moz-transform: rotate(0deg) scale(5); /* FF3.5+ */ -o-transform: rotate(0deg) scale(5); /* Opera */ transform: rotate(0deg) scale(5); }
Einbinden der Bilder
Wie bindet ihr die Galerie nun in eure Webseite ein? Ganz einfach:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> </head> <body> ... <div id="galerie"> <img src="/images/galerie/bild1.jpg" alt="" /> <img src="/images/galerie/bild2.jpg" alt="" /> <img src="/images/galerie/bild3.jpg" alt="" /> ... </div> ... </body> </html>
Und so sieht das Ergebnis aus
Noch eine kleine Abwandlung
Im gezeigten Beispiel werden die Bilder bei :hover
vergrößert, also wenn wir mit der Maus auf dem Bild bleiben. Nun kann „transition“ aber auch andere Pseudo-Klassen bedienen. Wie wäre es zum Beispiel mit :active
? Damit wird das Bild nur solange vergrößert, wie wir es mit der linken Maustaste anklicken.
So sieht der Code aus:
#galerie img:active { opacity:1; padding:0; position:relative; z-index:1; -moz-box-shadow: 2px 2px 2px #888; -webkit-box-shadow: 2px 2px 2px #888; box-shadow: 2px 2px 2px #888; -webkit-transform: rotate(0deg) scale(5); /* Saf3.1+, Chrome */ -moz-transform: rotate(0deg) scale(5); /* FF3.5+ */ -o-transform: rotate(0deg) scale(5); /* Opera */ transform: rotate(0deg) scale(5); }
und so die Galerie:
Gefällt’s euch?
Du suchst noch mehr zum Thema CSS3? Dann wirf einen Blick auf die Übersichtsseite:
Erst einmal danke für die schönen Tuts.
Du gehst hier auf CSS3 ein nutzt aber HTML4. Wieso nicht XHtml oder Html5?
MFG Matthias
Hab’s mal geändert. Danke für deinen Hinweis.
Gruß Olli
Feine Sache nur leider geht es nicht im Explorer 8 usw nicht. Im Firefox geht es gut vieleicht kennt jemand hir noch ne Lösung
Gruß Maik
Hab die kleine Gallerie etwas abgewandelt in meine Homepage übernommen. Da die oberen Bilder ja nicht mehr vollständig zu sehen waren, mußte ich die Position fürs vergrößerte Anzeigen etwas ändern. Leider funktioniert es nicht in Webkit-Browsern (Google Chrome, Safari) ?
Jemand ’ne Idee ???
Gruß Bernd
Hallo Bernd,
denke es liegt daran, dass du die Bilder bei
:active
fixiert positionierst. Versuch mal die Bilder absolut zu positionieren:Gruß Olli
Mit position: absolute; funktioniert es auch nicht. Werd ich wohl die Gestaltung der gesamten Galerieseite etwas ändern müssen, dass ich position: relative; verwenden kann.
Neues Problem: Mit dem neuen Firefox 19 werden die mit transform: scale(8); vergrößerten Fotos nur noch unscharf dargestellt. Woran könnte das wohl liegen?
Gruß Bernd
Hallo,
ich finde deine Galerie echt super toll und auch deine Anleitung ist prima gelungen.
Jetzt hab ich die Galerie Stück für Stück bei mir eingebaut und natürlich meinen Vorstellungen angepasst, aber dennoch finde ich gerade keinen Weg Bildunterschriften in die Polaroids zu integrieren… Kannst du mir da vielleicht einen Anhaltspunkt geben?
Hallo Vicky,
vielen Dank, freut mich :)
Schau mal in diesen Beitrag. Da habe ich ein Beispiel für eine Bildergalerie mit Bildunterschriften.
Gruß Olli
Hallo Olli,
danke das du so schnell geantwortet hast.
Ich habe versucht das Beispiel mit den Bildunterschriften in die oben beschriebene Galerie ein zu bauen, aber auch das klappt irgendwie nicht… :(
Womit könnte es funktionieren, dass ich Bildunterschriften in die oben beschriebene Galerie (in das Polaroid) einbinden kann? Hast du da vielleicht noch eine Idee oder so eine tolle Anleitung wie oben? Bin nämlich richtig stolz auf die Galerie und möchte jetzt eigentlich ungern eine Andere nehmen.
Liebe Grüße
Hallo Vicky,
habe dir mal auf die Schnelle ein Beispiel erstellt.
Viel Erfolg.
Gruß Olli
Hallo Olli,
ich würde Deine Bildergalerie auch gerne verwenden, aber ich bräuchte noch einen Hinweis, in welche der vielen wordpress-php-Dateien ich den Source-Code von Dir für die Bildergalerie selbst („All together now…“) und für das „Einbinden der Bilder“ einfügen soll…. und ob eine bestimmte Position innerhalb der Datei für das Einfügen relevant ist?
Vielen Dank und Gruß
Tonia
Hallo Tonia,
für WordPress ist die Galerie weniger gedacht/geeignet, da würde ich dir eher zu einem der zahlreichen WordPress-Plugins raten.
Gruß Olli
Hallo, ich finde deine Tuts echt hilfreich.
Ich hätte aber mal noch eine Frage zu diesem Thema.
Ich hab mir deinen Code für die Galerie kopiert und hab meine Bilder für mich eingefügt,
das funktioniert soweit aus sehr gut und sieht richtig schick aus.
Aber jetzt möchte ich gern mehrere Galerien erstellen wo immer nur ein paar Bilder drin sind.
Wie ist es mir zb. möglich eine bestimmte Galerie zu erstellen und diese zb auf das Wort „Bilder“ zu verlinken das ich da drauf komme ?
Hallo Olli,
habe deine Galerie zufällig entdeckt, sie gefällt mir sehr gut.
Da ich relativ am Anfang stehe, weiß ich nicht, wie ich die Fotos in der größeren Auflösung in die Seite bekomme.
Wenn ich mit der Maus auf die Bilder mit der Breite von 150px klicke, erscheint das größere BIld dann natürlich unscharf.
Vielen Dank für deine baldige Antwort.
Gruß Jürgen