w0rri0r: PNG-Problem IE und MousOver

hallo,
ich mache grade meine ersten arbeiten mit transparenten PNG-Grafiken!
Nur macht mir der Internet Explorer 6 dabei Probleme!
( > siehe hier > http://homepage.ntlworld.com/bobosola/ mit IE öffnen)

mittlerweile habe ich dieses CSS-Script gefunden:
img {
 filter:expression(
 this.napalmLoaded
 ? "" :
 (
  this.src.substr(this.src.length-4)==".png"
  ?
  (
   (!this.complete)
   ? "" :
    this.runtimeStyle.filter=
    ("progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+this.src+"')")+
    (this.onbeforeprint="this.runtimeStyle.filter='';this.src='"+this.src+"'").substr(0,0)+
    String(this.napalmLoaded=true).substr(0,0)+
    (this.src="src/blank.png").substr(0,0)
   )
   :
   this.runtimeStyle.filter=""
  )
 );
         vertical-align: middle;
         border-width: 0px;

und das funktionier auch ganz ordentlich nur es klappt nicht zusammen mit dem MouseOver-JavaScript:

<script language="JavaScript">
<!--

Normal1 = new Image();
Normal1.src = "src/link/news_nor.png";
Highlight1 = new Image();
Highlight1.src = "src/link/news_hov.png";

function Bildwechsel(Bildnr,Bildobjekt) {
 window.document.images[Bildnr].src = Bildobjekt.src;
}
//-->
</script>

die Grafiken sind am anfang transparent, wenn man mit der Maus drübergeht allerdings nicht mehr (grauer Hintergrund bei beiden bildern)

ich weiss leider nicht was ich da jetzt weiter machen kann :(
hoffentlich kann mir jemand helfen

gruß w0rri0r

  1. Hi,

    eines gleich vorab, damit keine falschen Hoffnungen entstehen: Ich kann dir keine Lösung für das Alpha-Transparenz-Problem im IE anbieten (weiß nicht, ob es überhaupt wirklich eine gibt), sondern nur ein paar zusätzliche Denkanstöße.

    Die CSS-Filter, die beim IE für den Effekt nötig sind, werden intern offensichtlich als ActiveX verwaltet. Das heißt, sobald ActiveX im IE deaktiviert wird (was ja sogar Microsoft oft empfieht, aus gutem Grund), dann stehen auch diese Filter nicht mehr zur Verfügung.
    Darüber hinaus verwendest du im Stylesheet expression(), was letzten Endes nichts anderes als ein ins Stylesheet eingebettetes Javascript ist. Also funktioniert auch das nicht, sobald Javascript deaktiviert ist.

    Die Menge der IE-Nutzer, die du mit deiner Lösung erreichst, wird damit schon ziemlich klein. Ist es deiner Ansicht nach dann überhaupt noch den Aufwand wert?

    <script language="JavaScript">
    <!--

    Fehler: Das vorgeschriebene type-Attribut fehlt. Den Kommentar am Script-Anfang darfst du mittlerweile auch in den Ruhestand schicken.

    Normal1 = new Image();
    Normal1.src = "src/link/news_nor.png";
    Highlight1 = new Image();
    Highlight1.src = "src/link/news_hov.png";

    function Bildwechsel(Bildnr,Bildobjekt) {
    window.document.images[Bildnr].src = Bildobjekt.src;
    }

    Das sieht für meine Augen ineffizient aus. Warum erzeugst du anfangs erst die image-Objekte, wenn du nachher doch wieder nur auf die src-Eigenschaft zugreifst? Da könntest du innerhalb von Bildwechsel() auch direkt den Namen einsetzen, anstatt ein image-Objekt zu bemühen.
    Alternativ könntest du die Zuweisung in

    window.document.images[Bildnr] = Bildobjekt;

    ändern. Dann ergibt es Sinn, die image-Objekte vorher zu generieren und auf Vorrat vorzuhalten.

    ich weiss leider nicht was ich da jetzt weiter machen kann :(

    Ich schlage vor, gar nicht so einen Aufwand zu treiben, und dem IE einfach ein GIF anstatt des PNGs vorzusetzen. Das lässt sich mit Conditional Comments ganz gut realisieren. Dann haben IE-User auch den normalen Transparenzeffekt, aber eben keinen weichen Übergang, sondern pixelige Kanten. So what?

    Schönen Sonntag noch,
     Martin

    --
    Wenn der Computer wirklich alles kann,
    dann kann er mich mal kreuzweise.
    1. Hallo,

      Die Menge der IE-Nutzer, die du mit deiner Lösung erreichst, wird damit schon ziemlich klein. Ist es deiner Ansicht nach dann überhaupt noch den Aufwand wert?

      Hm, denkst du _wirklich_, dass _so_ wenig sind? Dürfte ich dich da um eine ungefähre Prozentzahl bitten, von der Du denkst wie viel Prozent der IE User da noch übrig bleiben?

      Ich persönlich schätze mal, dass wenn wir 100% IE-User haben, dann haben mindestens 90% derer ActiveX und JavaScript eingeschalten und können von den Bemühungen m0rri0rs profitieren.

      Grüße
      Jeena Paradies

      --
      Ruby on Rails - mein erstes mal | Jlog | Gourmetica Mentiri
      1. Hi Jeena,

        Die Menge der IE-Nutzer, die du mit deiner Lösung erreichst, wird damit schon ziemlich klein. Ist es deiner Ansicht nach dann überhaupt noch den Aufwand wert?
        Hm, denkst du _wirklich_, dass _so_ wenig sind? Dürfte ich dich da um eine ungefähre Prozentzahl bitten, von der Du denkst wie viel Prozent der IE User da noch übrig bleiben?

        ich habe keine Prozentangabe zur Hand - aber ist es nicht so, dass beim IE6 unter XP/SP2 per Defaulteinstellung ActiveX aus Sicherheitsgründen deaktiviert ist? Ich meine, ich hätte das mal gelesen. Und dann wäre der Anteil wahrscheinlich doch recht hoch.

        Ich persönlich schätze mal, dass wenn wir 100% IE-User haben, dann haben mindestens 90% derer ActiveX und JavaScript eingeschalten und können von den Bemühungen m0rri0rs profitieren.

        Was Javascript angeht, will ich dir gern zustimmen - bei ActiveX habe ich meine Zweifel. Es sei denn, mein oben geäußertes Halbwissen wäre nicht wahr.

        Schönen Sonntag noch,
         Martin

        --
        Ich bin 30. Ich demensiere apokalyptisch.
          (Orlando)
        1. Hallo Martin.

          ich habe keine Prozentangabe zur Hand - aber ist es nicht so, dass beim IE6 unter XP/SP2 per Defaulteinstellung ActiveX aus Sicherheitsgründen deaktiviert ist?

          Das nicht, aber wenn eine nicht als vertrauenswürdig eingestufte Site ein ActiveX–Objekt initialisieren möchte, erscheint die berühmt–berüchtigte gelbe Leiste am oberen Rand des Viewports und fragt, ob das Objekt aktiviert werden soll.

          Einen schönen Sonntag noch.

          Gruß, Ashura

          --
          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
          „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
          [HTML Design Constraints: Logical Markup]
    2. Hi there,

      Die CSS-Filter, die beim IE für den Effekt nötig sind, werden intern offensichtlich als ActiveX verwaltet. Das heißt, sobald ActiveX im IE deaktiviert wird (was ja sogar Microsoft oft empfieht, aus gutem Grund), dann stehen auch diese Filter nicht mehr zur Verfügung.

      Warum ist das offensichtlich? Möglicherweise wurde das beim IE7 geändert, das kann ich nicht beurteilen, weil ich den IE nur zum Testen verwende und ich mit Betaversionen eben nicht teste, beim IE6 jedenfalls kann man die FIlter nicht "abdrehen", auch nicht wenn man die ActivX in allen Zonen deaktiviert. Btw, was für einen Sinn würde es für den Browserhersteller auch machen, so fundamentale Funktionalitäten auszulagern?

      Die Menge der IE-Nutzer, die du mit deiner Lösung erreichst, wird damit schon ziemlich klein. Ist es deiner Ansicht nach dann überhaupt noch den Aufwand wert?

      <script language="JavaScript">
      <!--

      Fehler: Das vorgeschriebene type-Attribut fehlt.

      Glaubst Du, daß mehr IE-Nutzer Javascript aufdrehen, wenn er das type-Attribut reinschreibt?

      Ich denke die Lösung mit den IE-FIltern ist durchaus praktikabel, da ich nicht annehme, daß der Seite eine große Funktionalität verlorgengeht, wenn irgendein Element darin nicht wirklich halbtransparent ist...

      1. Hallo,

        Die CSS-Filter, die beim IE für den Effekt nötig sind, werden intern offensichtlich als ActiveX verwaltet.
        Warum ist das offensichtlich?

        Weil mein IE diese CSS-Filter nur anwendet, wenn ich ActiveX zulasse (was ich normalerweise nicht mache).

        Möglicherweise wurde das beim IE7 geändert, das kann ich nicht beurteilen, ...

        Das kann ich auch nicht beurteilen, weil ich normalerweise nur den 5.5er, ab und zu widerwillig den 6er verwende.

        Btw, was für einen Sinn würde es für den Browserhersteller auch machen, so fundamentale Funktionalitäten auszulagern?

        Die große Gruppe der Filter- und Überblendeffekte (der AlphaImageLoader ist ja nur einer aus einem ganzen Rudel) halte ich keineswegs für fundamental, sondern ordne sie eher in die Kategorie "Spielerei" ein - die meisten davon realisieren ja nur verschiedene Übergangs- und Überblendeffekte beim Aufruf neuer Seiten. Dass der AlphaImageLoader sich nun eignet, um der fehlenden PNG-Alphatransparenz nachzuhelfen, ist IMHO eher ein zufälliger Nebeneffekt.

        <script language="JavaScript">
        Fehler: Das vorgeschriebene type-Attribut fehlt.
        Glaubst Du, daß mehr IE-Nutzer Javascript aufdrehen, wenn er das type-Attribut reinschreibt?

        Nö, aber der Quelltext hätte einen formalen Fehler weniger.

        Ich denke die Lösung mit den IE-FIltern ist durchaus praktikabel, da ich nicht annehme, daß der Seite eine große Funktionalität verlorgengeht, wenn irgendein Element darin nicht wirklich halbtransparent ist...

        In diesem Punkt kann ich dir voll zustimmen.

        Schönen Abend noch,
         Martin

        --
        Auf jeden Menschen auf der ganzen Welt entfallen statistisch gesehen etwa 3000 Spinnen, wie Wissenschaftler jetzt festgestellt haben.
        Wer will meine haben? Denn ich will sie bstimmt nicht.