
Manchmal benötigt man trotz der Möglichkeit transparente Bilder durch das GIF-Format darzustellen auch transparente PNG-Grafiken, da erst diese über Alphatransparenz verfügen und so ein sauberes Anti-Alaising ermöglichen.
Leider ist eine Darstellung von transparenten PNG Dateien im geliebten IE6 standardmäßig nicht möglich. Da trotz des Versuches von Microsoft mit einem Zwangsupdate auf den Internet Explorer 7 noch viele mit der alten Version im Internet unterwegs sind muss man sich etwas überlegen.
Im Internet kursieren ein paar Ansätze um dieses Problem zu beseitigen. Allerdings nur in Form von Javascript Lösungen, die meist umständlich einzubauen sind oder das konkrete Problem nicht richtig erfassen.
Meine Lösung um transparente PNG-Grafiken im alternden Internet Explorer 6 anzuzeigen funktioniert mit CSS. Nehmen wir an, wir wollen ein transparentes PNG als Hintergrundbild eines Layers definieren.
Vor dem Hack kommt zuerst der Code für andere Browser, die transparente PNG Files unterstützen. Anschließend wird über einen CSS-Hack der IE6 Code eingebunden:
<style type="text/css"> #layer { background-image:url(bild.png); } </style> <!--[if IE 6]> <style type="text/css"> #layer { filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='bild.png', sizingMethod='scale'); background:none; } </style> <![endif]-->
Den Code kann man natürlich auch in eine externe CSS Datei auslagern. In meiner Lösung muss man zusätzlich background:none; setzen, das liegt am zuvor definierten background-image.
Die von mir verwendete Methode mit dem AlphaImageLoader wird offiziell von Microsoft auf einer Support Seite empfohlen. Wer mehr über den AlphaImageLoader erfahren möchte, der sei auf das Internet Explorer Developer Center im MSDN verwiesen.
Leider ist dieser IE 6 Hack nicht standardkonform und wird im CSS Validator durchfallen. Wer allerdings noch eine signifikante Anzahl an IE6 Besuchern hat, sollte den Hack auf jeden Fall benutzen oder notfalls auf transparente GIFs zurückgreifen. Bei mehreren PNG Dateien auf einer Website kann das Einfügen dieses Codes lästig sein, in dem Fall würde ich zu einer globalen Javascript Lösung greifen.

Man kann PNGs mit z. B. Photoshop so abspeichern, dass sie immerhin wie GIFs transparent sein können, Alpha-Transparenzen gehen auf diese Weise nicht. Und es geht auch nur bei 8-Bit-PNGs. Man muss sich dazu eine Farbe aussuchen, die man als transparent markiert und dann geht es ganz ohne irgendwelche CSS- oder JS-Tricks. Vor dem Hintergrund kann man aber berechtigt fragen, warum man dann nicht gleich ein GIF nimmt.
Kim, das Problem bei den GIFs oder PNGs mit definierter Hintergrundfarbe ist, dass eine Überlagerung auf einem inhomogenen, kontrastreichen Hintergrund unsauber aussieht.
Eine weitere Alternative findet sich auch unter:
http://webfx.eae.net/dhtml/pngbehavior/pngbehavior.html
"warum man dann nicht gleich ein GIF nimmt"
weil gif kein freies format ist.
auch 8-bit pngs ohne alpha-channel sind im ie 6 übrigens nicht transparent. gerade getestet.
hallo, ich habe hier überraschenderweise ein PNG, dass sowohl im IE6 als auch im FF mit Transparenzabstufungen funktioniert, unglaublich! Jetzt versuche ich seid einigen Stunden ein Tool zu inden, mit dem man PNGs für beide Browser kompatibel macht, vergeblich
HAt jemand ne Ahnung? http://shots.snap.com/images/v2.5.5/theme/silver/bg/bg_320×347_bl.png
Wladi: Bei mir zeigt FF es mit korrektem Alphakanal an, IE6 zeigt es jedoch mit weisser Hintergrundfarbe.
Bitte beachten:
zwischen progid: und DXImageTransform darf KEIN Leerzwichen stehen, sonst funtionierts nicht!
also:
filter:progid:DXImageTransform
statt:
filter:progid: DXImageTransform
Danke fuer den Tipp. Genau das was ich gesucht hab.
endlich mal ne lösung die einfach und effektiv is! thx
hatte schon überlegt ne browserweiche vorzuschalten die alle ie user blockt und auf die möglichkeit hinweist, dass es auch andere browser gibt
Vielen Dank für diese Hack! Hab den gleich eingebaut und hat super funktioniert
(wers sehn will betrachtet meine webseite in nem ie6 ;D )
Hallo
Ich habe mir mal das durchgelesen und finde das prima. Danke dafür.
Nur noch eine Frage hierzu: Kann man das nicht für alle png coden, so das man nicht für jede png eine Zeile benötigt!?
Vielen Dank für die Lösung.
Hat mir sehr geholfen.
Hallo,
vielen Dank für die einfache und Funktionierende Lösung.
wichtig ist noch zu wissen das pfad relativ zur html datei stehen muss und nicht zur css datei…. darüber bin auch ich gestolpert… jaja mickysoft machts umständlich wie immer…
Von sämtlichen Google Ergebnissen, war das doch wirklich am hilfreichsten um das Problem zu verstehen. Durch die Kommentare der anderen Leser, wurden für mich alle fragen geklärt. wäre vielleicht ganz gut, wenn du dein Code-Beispiel daraufhin noch ergänzen könntest
aber andererseits, sollen sich die leser auch mal mühe geben
DANKE!
Hallo,
in dem Bereich eingebundene Linkgrafiken funktionieren danach leider (bei mir) nicht mehr…
was mache ich denn, wenn der css-code in einer externen css-dateien steht?
wie baue ich da die css weiche ein?
Hier eine Javascript-Funktion, die automatisch über alle Images geht und PNG – Images so mit dem DX Filter auf den IE 6.0 anpasst.
Hoffe diese Funktion hilft jemandem.
Beste Grüße
Hallo jungs, ich habe es mit dem css “hack”
auch mal ausprobiert und jetzt kommt der hamma bei dem ich echt hilfe benötige…
local unter xamp funktioniert alles einwandfrei, unter allen explorern, aber sobald ich es auf meinen webspace schiebe verkackt es einfach mal komplett, das heißt es gibt dann gar kein hintergrund im ie 6 (im firefox immer noch alles top) könnt ihr mir sagen woran das liegen könnte? verzweifel hier langsam!!!
über jede antwort dankbar!
Ich habe gerade etwas sehr sehr seltsames festgestellt.
Wenn ich ein PNG mit einer Auflösung von 72,009 DPI mit der Zeile:
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=’bild.png’, sizingMethod=’crop’);
laden will, funktioniert der AlphaImageLoader nicht!
Wenn ich die Auflösung auf Exakt 72.000DPI herunter nehme funktioniert die o.g. Zeile problemlos.
Ich finds immer wieder seltsam!!!
Kann mir nicht helfen, der Code funktioniert NICHT. Definitiv nicht – mit allen Variationen die genannt worden sind.
Jedenfalls nicht für ein div-hintergrund auf einem body Hintergrund. Das Ergebnis ist das das man sich denken kann durch background none – es wird nichts dargestellt
Der Hack funkionierte nach dem Ausprobieren “ein bisschen”, aber nicht umfassend und perfekt. Eine Lösung, die man nicht aus dem Auge lassen sollte, wäre aus meiner Sicht die Erstellung nicht-transparenter pixelgenauer Grafiken, die den Hintergrund jeweils übernehmen. Das kostet zwar Mühe, funkioniert aber auf alle Fälle.
Statt conditional comments geht auch ein kleiner Hack für den IE6:
BSP:
/* Weiche exklusiv für den besten aller Browser - IE 6 */ @media all{ * html b\ody #container-irgendwas{ wie oben;} } /* ende ie6*/klappt einwandfrei.
Hallo Robert,
danke für die Ergänzung. Der Tipp hat nur einen Hack verwendet. Wie man dem Internet-Explorer nun den Code unterschiebt war nicht Inhalt des Posts, sondern wie man transparente PNG-Grafiken dem IE6 beibringt
Aber wie gesagt; Danke für die Ergänzung.
Michael, deine Lösung funktioniert perfekt. Leider gibt es dabei einen kleinen Schönheitsfehler
Der CSS-Validator ist gar nicht glücklich mit so einer Lösung.
bin zufällig auf diese Seite gestoßen und bin sehr überrascht was es hier
alles für interessante Themen gibt. Werde jetzt öfters mal vorbeischauen.
Hallo Leutz,
wie es in Foren leider oft der Fall ist, wird zwar Hilfestellung geleistet, aber meist unvollständig oder schlichtweg falsch, weil man es eben nicht besser weiß. Deshalb habe ich noch einmal das Thema zusammengefasst und hoffe das es hiermit für alle verständlich wird und dabei auch vollständig und richtig dokumentiert ist:
1. Link zum Thema Microsoft IE6:
http://support.microsoft.com/?kbid=294714
2. Der Code in deiner HTML Datei sieht z. B. so aus:
<div id="Loginmenu-01"></div>oder in PHP:
3. In deiner CSS-Datei muss dann folgendes erscheinen:
Beide Einträge sind in der CSS notwendig, der erste für alle Browser außer IE, der zweite gilt nur für den IE (* html)!
Gruß Ren:)
Um das in Tabellen anzuzeigen müsst ihr die position auf relativ stellen!
mfg michael
Wenn ihr wollt das gleich die korrekte Grösse eueres Bildes angezeigt wird könnt ihr sizingMethod=’image’ setzen.
Gruss
Tonsi
Vielen Dank … bei mir funktioniert dieser Hack einfach wunderbar.
Ich habe das gleiche Problem wie Beckers, leider auch noch keine Lösung dafür gefunden. Kann jemand helfen?
Vielen vielen Dank für diese einfache Hilfe!
Unglaublich dass es sofort und ohne Probleme funktioniert hat.
Langsam verliere ich den Glauben an das Gute im IE. Kann doch nicht sein, daß man für diesen Browser immer nacharbeiten muss. besten Dank für die Lösung. Hat wunderbar geklappt
Immer wieder das gleiche Problem – PNGs auf Webseiten, warum macht man uns Entwicklern das Leben so schwer…?
Kleines Problem mit dem hack…leider lassen sich meine Links im IE die im Div stehen nicht mehr anklicken…könnte das etwas mit dem Filter zu tun haben? (Werden angezeigt aber lassen sich nicht anklicken…
http://www.daltonlp.com/view/217
Funktioniert das eigentlich auch mit Teiltransparenzen oder nur mit Volltransparenzen, wie man sie vom Gif-Format kennt? Wird also ein abgestufter Alpha-Kanal verwendet? Kenne mich mit den Microsoft’schen Filtern nicht aus und versuche sie eigentlich wo es eben geht zu vermeiden.
Allerdings ist es sehr praktisch, wenn man teiltransparente Bilder über verschiedene Hintergründe legt und damit mit einer einzige Graphik einen Effekt über mehrere Bildelemente legen kann. Schliesslich braucht man dann weniger Bilder übertragen und spart ggf. Requests.
Übrigens sind die Patente seit 2006 abgelaufen, so dass einer Verwendung von dieser Seite her nichts mehr im Wege steht.
Hi,
Ich hab zwar keine transparenten png´s aber dafür transparente gif´s verwendet und als Background hab ich in der CSS Datei dann die png´s angegeben. Grund: Der Benutzer soll die Icons auswechseln können.
Im IE7, IE8, Netscape und Firefox funktioniert das wie gewollt.
Im IE6 aber haben die Icons einen leicht blau schimmernden Hintergrund… kann mir einer sagen wodurch der hervorgerufen wird und wie ich den weg bekomme? hier die Icons und ein Code ausschnitt aus der .css und .aspx datei
http://img12.imageshack.us/img12/1774/iconsy.jpg
http://img109.imageshack.us/img109/9915/cssu.jpg
http://img18.imageshack.us/img18/5180/aspxa.jpg
danke für den supertip! manchmal gehts so einfach und man steht vor einer wand..
Der Grund, transparente PNGs anstelle von GIFs zu benutzen ist ganz klar, dass PNG echtes Alpha-Blending, also quasi-stufenlose Transparenz von völlig deckend bis völlig durchsichtig unterstützt (tatsächlich sind 256 Abstufungen möglich, was in der Praxis ausreicht).
In GIF gibt es stattdessen nur eine 1-Bit-Transparenzmaske: jedes Pixel im GIF ist entweder 100% deckend oder 100% transparent, aber nichts dazwischen. Der Unterschied ist signifikant, wenn transparente Bilder z. B. über einen Hintergrund mit wechselnden Farben gelegt werden sollen. GIF-Transparenz kann immer nur für eine Hintergrundfarbe berechnet werden, darauf funktioniert sie dann gut, da Photoshop et al. das Alphablending simulieren, indem sie die entsprechenden Übergangsstufen errechnen. Sobald der Hintergrund aber ein anderer ist, werden sofort unschöne Treppen und Blitzer sichtbar.