Thiemos Archiv
- Friday, 2004-10-01 17:35

Galerien mit CSS gestalten.
Oder: Bulletproof Thumbnail Galleries.
So etwas brauche ich relativ häufig: Eine Liste kleiner Vorschaugrafiken (techn.: Thumbnails), die oft auch noch anzuklicken sind und an die sich rechts jeweils ein beschreibender Text anschließt. Das sieht dann zum Beispiel so aus. Doch wie ist das zu konstruieren, so dass es einerseits möglichst wenig, möglichst eleganten Code erfordert, andererseits aber mit möglichst vielen Browsern funktioniert?Früher habe ich das mit sogenannten »blinden« Tabellen gemacht (zu sehen zum Beispiel noch hier). Aus heutiger Sicht ganz mieser Stil. Also CSS. Nach einigem Probieren mit diversen Browsern (besonders gemein, aber auf meiner »muss«-Liste: Opera 6) sieht meine empfohlene Lösung nun wie folgt aus. Zuerst der HTML-Teil:
<p class="screenshot">
<img src="bild.jpg" width="200" height="150" alt="">
Beschreibung des Bildes.<br clear="left">
</p>In einem normalen Absatz (
<p>), welcher der CSS-Klassescreenshotzugeordnet ist, stehen das Bild und der dazu gehörige Text einfach hintereinander, getrennt durch wenigstens ein Leerzeichen oder einen Zeilenumbruch. Das ist wichtig, um auch bei abgeschaltetem CSS eine kleine Lücke bzw. Sprechpause zu bekommen.Das Bild selbst ist so attributiert, wie es sein sollte:
widthundheighthelfen dem Browser, zumindest das HTML schon vor dem Laden des Bildes richtig darstellen zu können. Der Alternativtextaltwurde in diesem Fall bewusst leer gelassen, da der Text neben dem Bild sämtliche Informationen liefert, das Bild dagegen nur zierenden Charakter hat. Ein optionalertitlekönnte in einem kleinen gelben Tooltipp-Fenster zum Beispiel erläutern, dass es sich um ein Bildschirmfoto handelt.Auf das im Moment merkwürdig erscheinende
<br clear="left">gehe ich gleich noch ein.Die Stylesheet-Angaben sehen so aus:
.screenshot img {
float: left;
margin: 0 2ex 1ex 0;
border: 1px solid #CCC;
padding: 4px;
background-color: #222;
}
.screenshot {
clear: left;
margin: 4ex 0 2ex 0;
}Der erste Regelsatz gilt für alle Bilder innerhalb von Screenshot-Objekten. Die wichtigste Angabe ist dabei das
float: Das Bild wird auf der linken Seite positioniert und alles Folgende – in unserem Fall unser Text – »fließt« rechts um das Bild herum und geht danach unter dem Bild weiter. Ein Außenabstand (margin) von rechts zwei und unten einer Buchstabenbreite (Maßeinheitex) sorgt dafür, dass der Text nicht doch wieder direkt am Bild klebt (das Leerzeichen von vorhin wird durch dasfloatüberlagert und bewirkt nichts mehr).Zusätzlich verpassen wir unserem Bild einen dünner Rahmen (
border), rücken diesen ein wenig vom Bild weg (padding) und füllen den entstandenen Freiraum mit Farbe (background-color).Der zweite Regelsatz gilt für den umgebenden Textabsatz. Die Angabe
clearsorgt dafür, dass jedes vorhergehendefloatabgeschlossen wird. Das ist wichtig, denn sonst »fließen« auch die Bilder um ihre Vorgänger herum und es entstehen lustige Kaskaden. Allerdings kann das komplizierter sein, als es klingt. Wenn nämlich der umgebende Code der Web-Seite bereitsfloatverwendet, zum Beispiel für die Navigationsleiste, dann unterbrichtclearim schlimmsten Fall auch das. In meinem Fall klappt es jedoch: Die Navigation verwendetfloat: right;, mitclear: left;werden jedoch nur linksseitige Positionierungen abgeschlossen.Die letzte Angabe gibt den Absätzen nach oben hin einen großzügigen Abstand (
margin) von vier Zeichenbreiten. Der Abstand von zwei Zeichen nach unten hat eigentlich keine Bedeutung, da von sich berührenden Außenabständen, die eigentlich Mindestabstände sind, immer der größere verwendet wird. Die2exwirken jedoch beim alleruntersten Absatz in der Liste.Wozu nun das schon erwähnte
<br clear="left">? So komisch das klingt: Es für Mozilla notwendig. Vieleicht liegt es daran, dass er etwas zu standardkonform ist. Wenn der Text niedriger ist als das Bild, wirken die eben erläuterten Außenabstände nur auf den Text und schließen das Bild nicht mit ein. Das führt dazu, dass zwischen den Bildern viel zu wenig Abstand entsteht (nur das1exaus dem vorherigen Regelsatz). Der manuelle Zeilenumbruch sorgt dafür, dass der Textabsatz in jedem Fall mindestens die Höhe des Bildes hat. Da das schlecht zu erklären ist, hier ein Beispiel (der negative Effekt, bei dem zwischen den ersten beiden Bildern fast gar kein Abstand ist, ist nur in Mozilla-verwandten Browsern zu sehen, IE und Opera haben kein Problem damit).Besonders merkwürdig ist hierbei, dass eine reine HTML-Angabe (missbilligt und seit »HTML 4.01 strict« verboten) eine CSS-Eigenschaft beeinflusst. Immerhin: Es funktioniert. Alternative Lösungsvorschläge sind willkommen.
Mein Endergebnis zeichnet sich dadurch aus, dass es völlig unabhängig von der Größe des Browserfensters ist (einfach ausprobieren und das Fenster immer weiter verkleinern). Im Extremfall wandert der Text einfach komplett unter das Bild – und bleibt auf diese Weise lesbar.
Getestet ist diese Lösung mit Internet Explorer 5.0 und 6.0 (SP2), Mozilla 1.6, Firefox 0.9.2 sowie Opera 6.0 und 7.50. Einzig IE 5.0 hat ein Problem: Der Bildrahmen klebt ohne Abstand (
padding) direkt am Bild. Aber das ist nicht schlimm. Im Idealfall bemerkt der Besucher diesen »Darstellungsfehler« gar nicht.- 2004-10-01 19:55
- Hmmm... so was ähnliches mache ich ganz gern mit <img (...) align="left|right">, das geht dann auch ohne CSS noch fast genauso gut, nur die Abstände ums Bild sind dann nicht mehr einstellbar.
- T$
- 2004-10-01 19:57
- Den "negativen Effekt" gibt es auch beim IE6 (evtl. auch 5.5?), wobei ich jetzt nicht genau weiß unter welchen Umständen ("standardkonformer" Modus?).
- T$
- 2004-10-01 20:30
- align ist ebenfalls seit "HTML 4.01 strict" verboten. Das ist zugegebenermaßen etwas fadenscheinig, schließlich mache ich das Gleiche, aber ich bin ja auch noch auf der Suche nach der perfekten CSS-Lösung.
- Thiemo
- 2004-10-02 12:55
- Gibt es eigentlich von diesem Bild hier noch mehr bezaubernde original Aufnahmen? -> wildmag.de/pic/picknick.jpg (naja, die Frage müsste ich dann eigentlich an "the Update" stellen)
- diver
- 2004-10-03 21:39
- Meinst du das Mädel im Vordergrund? Ich glaube, von der "unbekannten Schönen" gab es keine weiteren Bilder.
- Thiemo
Kommentare zu diesem Beitrag können per E-Mail an den Autor gesandt werden.