von Andy Pillip

Eine Responsive Gallery im Zick-Zack Muster mit CSS3 gestalten

CSS für eine Galerie, in der sich Fotos und einfarbige Bilder erst 2-spaltig, dann 3-spaltig im Zick-Zack-Muster anordnen

Mit dem CSS3-Selektor :nth-child lässt sich jedes 2. Bild in einer Galerie umsortieren, sodass je nach Bildschirmgröße ein Zick-Zack-Muster über 2 oder 3 Spalten entsteht.

Für die Corporate Design Agentur Design Direction haben wir ein Design umgesetzt, bei dem sich in einer Bildergalerie Fotos und Symbole im Zick-Zack abwechseln sollten.

Unser Ziel war, die Galerie auch responsive zu gestalten, dabei werden auf kleinen Bildschirmen nur 2 Bilder pro Zeile mit einem links/rechts-Muster angezeigt, bei größeren dann 3 im Mitte/außen-Muster, was auf beiden Größen einen schönen Effekt ergibt:

Bei zwei Spalten steht jedes 2. einfarbige Bild rechts, jedes 4. steht links. Bei drei Spalten ist jedes 2. Bild einfarbig, es steht also in jeder geraden Zeile ein einfarbiges in der Mitte, in jeder geraden Zeile ein Foto.

Responsive Gallery CSS

Dass Layouttabellen eine schlechte Idee sind, ist seit mindestens 13 Jahren verbreitete Meinung. Trotzdem verwenden sogar moderne Online-Shops eben solche nach wie vor, um 3 Produkte pro Zeile an zu zeigen.

Ganz klar eigentlich, dass für eine flexible Produkttabelle auf eine Tabelle verzichtet werden muss, um auf mobilen Geräten mit kleinen Bildschirmen die Produkte untereinander statt nebeneinander anzuzeigen.

Ich gehe also von einer Liste statt einer Tabelle aus, in der Links tabellarisch angeordnet werden:

ul {
  margin: 0; padding: 0; padding-left: .5em;
  overflow: hidden; height: auto; /* contain all floating children */
  }
  ul li {
    float: left;
    width: 14em; height: 10em;
    margin: 0 .5em .5em 0;
    }

Nachdem die Breite der ul immer noch auf auto steht, rutschen die li-Elemente nebeneinander, sobald Platz ist.

li-Elemente umsortieren

Basis für unsere Zick-Zack-Galerie ist, dass das Bild in jedem 2. li-Element einfarbig ist.

Auf kleinen Bildschirmen ist also jetzt dafür zu sorgen, dass jedes 2. Foto (also Elemente 3, 7, 11, …) rechts statt links steht. Mit dem nth-child-Selektor geht das relativ einfach:
ul.thumbs li:nth-child(4n+3) {
  float: right;
  }

Zur Erklärung: die zu formatierenden Elemente werden bestimmt, indem das n in der Formel von 0 startend ins Positive erhöht wird. Das erste selektierte Element ist also das 3. (n=0), das nächste ist das 7. (n=1).

Für größere Bildschirme, auf denen 3 Elemente pro Zeile platziert werden, muss diese Regel wieder aufgehoben werden, denn es entsteht bereits ein Zick-Zack-Muster, weil jedes 2. Element ein einfarbiges ist:

@media screen and (min-width: 43.5em) { /* 3 li haben Platz */
  ul.thumbs li:nth-child(4n+3) {
    float: left;
    }
  }

4 und mehr pro Zeile

Natürlich ließen sich auch noch Regeln ergänzen, die bei 4 oder mehr Elementen pro Zeile für ein Zick-Zack-Muster sorgen. Allerdings sieht das Ganze ab einer gewissen Breite nicht mehr gut aus,

Eine Maximalbreite kann über den body festgelegt werden, oder ganz einfach durch eine Begrenzung der Listenbreite:

ul {
  max-width: 43.5em; /* max. 3 Elemente pro Zeile */
  }