Avatar billede kimdolleris Nybegynder
19. juni 2006 - 14:38 Der er 12 kommentarer og
1 løsning

PNG fix - men med CSS tilgang

Hey!

Jeg vil gerne bruge png-formatet på mit site da det jo er rart når noget skal være transparent. Har dog et lille problem med det.

Jeg har fundet et gangske udemærket "fix" der kan ordne det til Explorer - og det virker fint. Det skal være være hardcoded i form i IMG-tag for at det kan ses. Jeg vil gerne bruge min png som gentagende baggrund så det bliver lagt i med CSS. Her er lidt kode:

----------------------------

// PNG FIXER - pngbehavior.htc

<public:component lightWeight="true">
<public:attach event="onpropertychange" onevent="propertyChanged()" />
<public:attach event="onbeforeprint" onevent="beforePrint()" for="window"/>
<public:attach event="onafterprint" onevent="afterPrint()" for="window"/>
<script>

/*
* PNG Behavior
*
* This script was created by Erik Arvidsson (http://webfx.eae.net/contact.html#erik)
* for WebFX (http://webfx.eae.net)
* Copyright 2002-2004
*
* Version: 1.02
* Created: 2001-??-??    First working version
* Updated: 2002-03-28    Fixed issue when starting with a non png image and
*                      switching between non png images
*          2003-01-06    Fixed RegExp to correctly work with IE 5.0x
*          2004-05-09  When printing revert to original
*
*/

var supported = /MSIE ((5\.5)|[6789])/.test(navigator.userAgent) &&
                navigator.platform == "Win32";

var realSrc;
var blankSrc = "blank.gif";
var isPrinting = false;

if (supported) fixImage();

function propertyChanged() {
    if (!supported || isPrinting) return;

    var pName = event.propertyName;
    if (pName != "src") return;
    // if not set to blank
    if (!new RegExp(blankSrc).test(src))
        fixImage();
};

function fixImage() {
    // get src
    var src = element.src;

    // check for real change
    if (src == realSrc && /\.png$/i.test(src)) {
        element.src = blankSrc;
        return;
    }

    if ( ! new RegExp(blankSrc).test(src)) {
        // backup old src
        realSrc = src;
    }

    // test for png
    if (/\.png$/i.test(realSrc)) {
        // set blank image
        element.src = blankSrc;
        // set filter
        element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft." +
                    "AlphaImageLoader(src='" + src + "',sizingMethod='scale')";
    }
    else {
        // remove filter
        element.runtimeStyle.filter = "";
    }
}

function beforePrint() {
    isPrinting = true;
    element.src = realSrc;
    element.runtimeStyle.filter = "";
    realSrc = null;
}

function afterPrint() {
    isPrinting = false;
    fixImage();
}

</script>
</public:component>

----------------------------

// CSS KODE
img {
    behavior:url("pngbehavior.htc");
}

#Venstre_side {
    background-image:url(../img/venstre_side.png);
    background-repeat:repeat-y;
    width:29px;
}
----------------------------¨

Spørgsmålet er så ... hvordan får jeg det omskrevet til at kunne bruge ved hjælp af css-IDs?

(Ikke codehaj btw)
:D

/Kim
Avatar billede spaceus Nybegynder
19. juni 2006 - 15:21 #1
din #Venstre_side skal vel også bare bruge den behavior ellers forstår jeg ikke spørgsmålet
Avatar billede kimdolleris Nybegynder
19. juni 2006 - 16:20 #2
Jah.. Det troede jeg nemlig osse! Men det virker ikke... Det er derfor jeg tænker at man kan omskrive/tilføje lidt til/i pngbehavior.htc-filen.

Det er som om at den behavior ikke kan vedhæftes uden det er et IMG-tag eller ihvertfald SRC. Jeg forstår ikke koden selvom den ser rimelig simpel ud.
Avatar billede spaceus Nybegynder
19. juni 2006 - 17:04 #3
hmm, ok kan du så ikke tilføje den når du skaber billedet
der er en element.addBehavior() funktion ala

var tImg = document.createElement("img")
tImg.src =kilden

tImg.addBehavior("pngbehavior.htc")
Avatar billede kimdolleris Nybegynder
20. juni 2006 - 09:57 #4
Okay.. hvordan/hvor vil du skriv det i så?

:)
Avatar billede spaceus Nybegynder
20. juni 2006 - 10:22 #5
nu ved jeg jo ikke hvordan din side ser ud, men et forslag

i dit <body onload="addBehave();">

og så i
<head>
<script>
function addBehave()
{
var images = new Array()
images = document.getElementsByTagName("img")
for(var i =0;i<images.length;i++)
{
 
}
}
</script>
</head>
.. må løbe leg lidt med det ;)
Avatar billede kimdolleris Nybegynder
20. juni 2006 - 10:40 #6
tak... leger lidt :)
Avatar billede kimdolleris Nybegynder
20. juni 2006 - 13:01 #7
æv... det er for hardcore for mig.. kan sq ikke gennemskue det.. håber én kan komme på en samlet løsning. :D
Avatar billede spaceus Nybegynder
21. juni 2006 - 12:40 #8
hmmm, nå ja ok det ellers ikke noget jeg gør i men så skidt da smid din kode og så retter vi den til
Avatar billede kimdolleris Nybegynder
21. juni 2006 - 13:19 #9
Spaceus - du er en knag...

Koden er ikke ændret i forhold til koden i toppen - kunne simpelthen ikke gennemskue det - så jeg gik tilbage til udgangspunktet :)
Avatar billede spaceus Nybegynder
22. juni 2006 - 06:56 #10
tilbage ved tasterne ;) prøvede du at smide det kode stykke i din html fil ?

så skal du jo have det første kode i for løkken... Jeg paster lige ;)

function addBehave()
{
var images = new Array()
images = document.getElementsByTagName("img")
for(var i =0;i<images.length;i++)
{
  images[i].addBehavior("pngbehavior.htc")
}
}

Og så kører den onload.. <body onload="addBehave">

det vil jeg da tro virker, ellers må vi jo lave et hex ;)
Avatar billede kimdolleris Nybegynder
22. juni 2006 - 09:06 #11
hmm.. har du mon misforstået ... :)

Det jeg gerne vil er at tilføje billederne igennem css fx:
#venstreside {background-image: url(mitPNGbillede.png);} - Altså ingen <IMG>-tag - rent CSS.

Så vidt jeg kan se (ret mig hvis jeg tager fejl :)) så fortæller din funktion at hver gang der er et IMG-tag skal den bruge "pngbehavior.htc" til at bestemme hvordan og hvorledes? hvilket jo denne gør:
img {behavior:url("pngbehavior.htc");}

eller tager jeg fejl? :O) TAK for hjælpen:)))
Avatar billede spaceus Nybegynder
22. juni 2006 - 09:18 #12
ach du lieber, ja det bare mig der har misforstået ;)

jeg tror det du leder efter er noget server side hvor du løber et bibliotek igennem for .png filer f.eks

php, asp, java
Avatar billede kimdolleris Nybegynder
01. oktober 2006 - 12:27 #13
Denne skal vist lukkes.. hehe
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester