Droped Shadows - Bilder-Schatten mit CSS simuliert
05.10.2005 | CSS | 19 Kommentare | Print

Bilder mit einem automatisch generierten Schattenwurf stehen immer noch hoch im Kurs. Bedingt durch eine Safari-Bug fand ich zufällig bei meinem Redesign eine Lösung, die mit purer CSS auskommt und somit zusätzliche Bilder überflüssig macht.
Bilder mit automatischem CSS-Schatten haben in den letzten Jahren zu den unterschiedlichsten Artikeln und Veröffentlichungen inspiriert und Anlass gegeben. So war auch für mich neben anderen die Veröffentlichung von CSS Drop Shadows Inspiration und Anregung für die Bilder-Schatten. Ursprünglich war es nicht meine Absicht, diesen keinen weiteren Artikel hinzuzufügen. Zuschriften von Lesern belegen aber immer wieder, dass das Interesse an solchen Lösungen ungebrochen scheint.
Ausgangspunkt: ein Safari-Bug
Doch nach der Anschaffung meines iMac sah ich in der neuen Safari-Version 2.0 einen Bug, der mir gar nicht gefallen wollte. Auf der rechten Seite des Bildes zeigte sich ein zusätzlicher weißer Streifen. Der eigentlichen Ursache bin ich schlussendlich nicht auf den Grund gegangen. Im Rahmen des Redesigns hatte ich eine Idee, die auf die Grundidee abwandelte und ganz auf CSS setzt.
Feedback verfeinert Lösung
Im Eifer des Gefechtes war mir trotz aller Tests ein Detail aus dem Fokus geraten. Das Feedback von Robert zu diesem Thema machte mich nicht nur auf einen IE-Bug aufmerksam. Dank seinem Hinweis konnte ich die Lösungsmöglichkeit noch weiter verfeinern. Dieser Beitrag soll diesen kleinen Code-Schnipsel nun einfach vorstellen, einem Praxistest unterziehen und zur Diskussion stellen.
Grundidee: einfach vereinfachen
Ausgangspunkt war der Gedanke, den Perfektionsanspruch der Lösung zugunsten einer einfachen ballastfreien schlanken CSS-Lösung zurückzustellen. Statt zusätzliche Grafiken einzusetzen verwende ich einen hellen CSS-Schatten, der bewusst ohne Gradient in der Darstellung auskommen muss.
- <p class="ii r">
<img src="http://domain.de/bild.jpg" alt="" /></p>
Kompatibel sollte die Lösung sein, einfach zu ändern per CSS. In meinem Weblog trägt jeder beliebiger Movable Type Beitrag ggf. auch den Bildcode. So wird er in einen Absatz eingebettet, der mit einer CSS-Anweisung den eigentlichen Bildschatten simuliert.
- * {
- margin:0;
- padding:0;
- }
- #content .ii{
- margin-left:4px;
- float:left;
- background:#efefef;
- }
- #content .ii img{
- position:relative;
- top:-4px;
- left:-4px;
- background:#fff;
- padding:4px;
- border:1px solid #ccc;
- }
- #content .r{
- margin:8px 0 10px 10px;
- float:right;
- }
Wer die Lösungen vergleicht, erkennt schnell das gleiche Grundmuster. Statt der Zusatzgrafik dient einfach ein hellgrauer Hintergrund. So einfach die Lösung zu Beginn war, sie stellte sich als trügerisch heraus.
Robert Hartl machte mich darauf aufmerksam, dass der IE mal wieder aus der Reihe tanzte. Er stellte den Schatten ohne Versatz dar. Die Lösung für den IE lag näher als vermutet.
- position:relative;
Die relative Positionierung des Bildes überredet den IE verbunden mit einer Anpassung der damals existenten margin-Anweisung die Bilder wie erwünscht darzustellen.
Fazit
Die beschriebene Variante steht derzeit im praktischen Test hier im Weblog. Aus Zeitgründen habe ich einen kompletten (modernen) Cross-Browser-Vergleich noch nicht abgeschlossen. Bereits gesehen und getestet im:
- Internet Explorer 6 Win, Firefox 1.03 Win, Opera 8.02 Win, Netscape 7.02, Avant Browser 10 Win, Slimbrowser 4.00 Win
- Firefox 1.04 Mac, Safari 2.0, Camino 0.9, Opera 8.5 Mac
Robert hat den Internet Explorer 5 getestet.
Alle hilfreichen Tests, Hinweise und Anregungen rund um die Alltagstauglichkeit dieser Detail-Lösung sind herzlich willkommen und ausdrücklich erwünscht. Ob Anregung, Idee zum Weiterdenken oder einfach nur Interesse am Nachnutzen – jeder mag es nehmen wie er es mag.
War der Artikel für Euch wertvoll? Wollt Ihr Euch den Beitrag als Bookmark merken?
Einfach RSS-Feed abonnieren oder das Lesezeichen mit anderen Menschen teilen:
Kommentare und verweisende Trackbacks
zum Beitrag: Droped Shadows - Bilder-Schatten mit CSS simuliert
Kommentare
1 | macx schreibt am 06.10.2005, 08:40:
Deine Lösung ist natürlich nicht die Variante mit der Softrundung, die ich beim Lesen der Überschrift erwartet hatte. Was mich generell an solchen Ansätzen stört, ist das zusätzliches Markup, welches ausschliesslich als Designelement genutzt wird. Ich hatte noch keine Zeit es auszuprobieren, aber sind :before und :after nicht dafür geeignet, Schatten - in welcher Form auch immer - zu werfen. Ich habe lieber ein schlankes Markup, als den Zwang, IE-Kompatibilität bei Gestaltungselementen herzustellen.
Dein Schatten sieht übrigens unter Firefox 1.5 Beta 2 auf dem Mac gut aus!
2 | Jörg schreibt am 06.10.2005, 08:53:
Hallo David, der einzige zusätzliche Markup ist die CSS-Klasse, die ich zur Formatierung nutze. Alles andere ist im normalen Code von MT eh schon enthalten. So gesehen wundert mich Dein Argument schlanker Markup, da ich genau dieses Ziel ja mit der Vereinfachung im Sinn hatte und dafür die Softrundung geopfert habe.
Danke für den Test mit Firefox 1.5 beta 2! :)
3 | Manuela schreibt am 06.10.2005, 11:29:
Danke für das kleine Tutorial, Jörg. Der Schattenwurf gefällt mir ehrlich gesagt besser als der des Originals. Noch schöner und schlanker wäre es, wenn die Klassen auf das Bild selbst angewendet werden könnten:
<img src="http://domain.de/bild.jpg" alt="" class="ii r" />
Ich habe nicht probiert, ob das geht, würde aber den Absatz sparen.
4 | macx schreibt am 06.10.2005, 11:34:
Ups, mit dem verhunzten Markup meinte ich natürlich die verschachtelten DIV-Beispiele für weiche Schatten, die du hier nicht ansprichst. Nein, dein Markup ist sehr schmal, ausgezeichnet.
Ich habe dein Beispiel mal aufgegriffen und mit mit :after experimentiert. Da sich :after aber nicht auf das img selbst, sondern nur auf den Paragraphen anwenden lässt, ist dein Vorschlag schon die bessere Lösung.
5 | macx schreibt am 06.10.2005, 11:36:
@Manuela: Den Paragraphen können "wir" uns nicht sparen, da Jörg mit dem weißen Abstand vom Bild zum Rahmen arbeitet.
6 | Jörg schreibt am 06.10.2005, 12:35:
@Manuela und David:
Den Absatz kann ich mir auch aus einem anderen Grund EBEN NICHT ersparen (leider!): Das Bild steht in Movable Type in einem beliebigen Beitrag und wird anstelle von Text gepostet. MT fügt den Absatz ein, ohne mich zu fragen. So bleibt der Bild-Einsatz flexibel.
Alternative wäre lediglich die separate Ansteuerung eines Bildes über ein Feld oder die Verbindung von Bild-Dateinamen mit URL oder Titel des Beitrages.
Beides ist mir zu kompliziert und als Kompromiss nicht geeignet, so dass die vorgestellte Lösung in der Tat für mich das Minimum ist.
Ich bin aber gespannt, ob es nicht noch andere Möglichkeiten gibt.
Welche Ideen habt Ihr dazu? Lerne immer gern dazu! :))
7 | Manuela schreibt am 06.10.2005, 18:00:
@Jörg: Jetzt hast Du mich neugierig gemacht: Wie stellst Du denn Deine Bilder in MT ein? So wie sich das anhört, speicherst Du sie ja nicht "einfach so" im Beitrag mit, oder? Dank im Voraus!
8 | Jörg schreibt am 06.10.2005, 18:15:
@Manuela: Da gibt es eigentlich keine großen Geheimnisse. Warum auch?
Ich arbeite im Text mit Textile2. Das Bild steht folglich in Textile-Code am Anfang des Beitrages und wird dann von MT in einen o.g. Absatz eingefügt. Deshalb kann ich diesen auch nicht entfernen. Immer HTML zu schreiben war mir einfach zu unübersichtlich und zu schlecht zu lesen. Ich wollte mich aufs Schreiben konzentrieren.
Bisher bin ich mit dieser Art Lösung recht gut gefahren.
Wie zukunftsstabil diese allerdings ist, wird sich zeigen.
Kann durchaus sein, dass ich da recht allein auf weiter Flur arbeite, keine Ahnung. Für mich passt es sehr gut.
Bei manchen Beiträgen gibt es Bilder, also einfach ein Zeile mehr, bei anderen eben nicht. Da die Bilder floatend formatiert sind, ergibt sich dann das sichtbare Layout, wobei links- und rechtsbündig einfach kleine Zusätze zum Bildcode darstellen.
9 | Manuela schreibt am 06.10.2005, 18:39:
Danke Dir für die Erläuterungen, Jörg. Ich dachte mir schon sowas. Da ich meine Bilder in HTML einbinde, ist das für mich steuerbar, was MT daraus macht. Allerdings hast Du Recht damit, dass HTML sehr unübersichtlich aussschaut im Admin-Interface. Da ich fast nur mittels Mars Edit poste und so eine HTML-Farbkodierung habe, ist das jedoch nicht so ein Problem.
10 | Verena schreibt am 11.01.2006, 00:11:
@Jörg: Ich habe das Ganze auch einmal ausprobiert, jedoch in einem Tabellenlayout. Im Firefox sieht es wunderbar aus. Jedoch fehlt im IE 6.0 der weiße Rahmen. Ich bin nur Laie, vlt hast du ja daher eine Lösung für mich. Bin sehr beeindruckt von dieser Form, da es doch sehr einfach eingebunden wird.
11 | Jörg schreibt am 11.01.2006, 00:19:
@Verena: Wenn Du denselben Code in einer Tabelle einsetzt, kann es sein, dass Du die CSS anpassen musst, denn dann werden je nach Quellcode unter Umständen andere Befehle nötig. Ohne Quellcode, liebe Verena aber keinen Chance. Ist wie Schattenboxen. Hast Du mal eine URL? :))
12 | Peter schreibt am 21.05.2006, 15:44:
Hallo,
wollte euer probeweise mal benutzen, jedoch funzt es weder im FF 1.5.0.3 noch mit IE7b2.
komisch
13 | Jörg schreibt am 21.05.2006, 16:05:
@Peter: Nun, ich schreibe gerade im FF 1.5.0.3, da sehe ich alles. IE7 nutze ich prinzipiell nur für den Kundentest, außerdem ist der für mich momentan kein Kriterium, der soll erst mal veröffentlicht werden. Dann sehen wir weiter.
Viel wahrscheinlicher scheint zu sein, dass Du, wie andere vor Dir, einfach kopiert und etwas vergessen hast. Der Fehler liegt immer dort, wo Du ihn nicht suchst, vielleicht sogar bei Dir? :))
14 | Christian schreibt am 28.06.2006, 17:47:
Hallo,
toll was du da programmiert hast. In Safari unter MacOS X 10.4.6 funktioniert es prächtig.
Nun wollte ich es unter FF 1.5.0.4 probieren, da läuft es leider nicht. Der Rahmen und der Shadow wird zwar angezeigt, aber darin befindet sich kein Bild. Es sieht so aus, als wenn er nicht checkt, dass er das Bild umschliessen soll.
Was kann ich da machen?
Gruß
Christian
15 | Jörg schreibt am 28.06.2006, 18:19:
@Christian: Bei meinem Firefox 1.5.0.4 funktioniert es bestens. Ich weiß nicht, was das verkehrt läuft. Auch kenne ich keinen Grund, warum ausgerechnte der FF 1.5.0.4. keine Grafiken mehr erkennen soll.
BTW, die Einfachheit der Lösung und insbesondere auch die Technik sollte ja gerade Anlass sein, dass es in allen Browsern funktioniert.
16 | Maex schreibt am 30.07.2006, 21:08:
Hoi! Habe unterschiedliche Bilder, also manche portrait und manche landscape. Bei dem Versuch die in eine Tabelle (4×4 Bilder) einzubinden, habe ich das Problem, dass die portrait Bilder links an den Rand klatschen. Ich schaffe es jedoch nicht, die Bilder in die Mitte zu bekommen (wohl wegen dem float:left im DIV, das den drop shadow realisiert).
Hast Du da auch einen Trick fuer mich? Danke!
17 | Susanne schreibt am 21.08.2006, 16:49:
Hallo!
Ein grosses Dankeschön für diesen schönen CSS-Code!
Ich habe das ganze noch mit einem hover-Effekt kombiniert und es funktioniert wunderbar. Getestet mit IE6, Opera9, Firefox 1.5.06, Mozilla 1.7.11. Für den Hover-Effekt benötigt der IE allerdings das wunderbare Script csshover.htc.
Herzliche Grüsse!
Susanne
18 | Alexander schreibt am 26.11.2006, 17:19:
Hallo. Bei meiner google Suche nach meinem kleinen Problemchen bin ich auf die obrige Lösung gestoßen. Mein Problem ist wesentlich simpler - dennoch bisher ungelöst. Ich möchte einfach nur einen 1px rahmen um meine Bilder haben.
Ansatz:
img {
padding: 2px;
border: 1px #999 solid;}
Der FF macht das wunderbar, dem IE6 ist es egal und pappt den Rahmen direkt ans Bild.
Kennt vielleicht hier jemand die Lösung?
Thx,
Alex
19 | Christoph Hautzinger schreibt am 23.12.2007, 13:06:
Also im FF 2 unter Linux sieht es super aus!
Trackback-URL: http://www.einfach-persoenlich.de/m33/etb.cgi/340
Einfach persönlich kommentieren:
Kommentare des Beitrages per RSS-Feed verfolgen?
Mit dem RSS-Kommentar-Feed kannst Du die Kommentare dieses Beitrages einfach persönlich verfolgen und im Blick behalten, einfach:


