PDA

Pogčedajte punu verziju : PNG kao background


jasmanac
14. 04. 2006., 01:21
Svi znamo koliko je tesko naterati .png sliku da radi u exploreru preko CSS background-a. Najzad resenje koje upravo resava gore pomenuti problem.

if (navigator.platform == "Win32" && navigator.appName == "Microsoft Internet Explorer" && window.attachEvent) {
window.attachEvent("onload", alphaBackgrounds);
}

function alphaBackgrounds(){
var rslt = navigator.appVersion.match(/MSIE (\d+\.\d+)/, '');
var itsAllGood = (rslt != null && Number(rslt[1]) >= 5.5);
for (i=0; i<document.all.length; i++){
var bg = document.all[i].currentStyle.backgroundImage;
if (itsAllGood && bg){
if (bg.match(/\.png/i) != null){
var mypng = bg.substring(5,bg.length-2);
document.all[i].style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader (src='"+mypng+"', sizingMethod='scale')";
document.all[i].style.backgroundImage = "url('/images/x.gif')";
}
}
}
}

Morate samo imati jedan blanko transparentni .gif fajl 1x1px i kao sto vidite on je konkretno u ovom slucaju smesten u folderu "images" ali samo promenite putanju ako zelite da ga premestite na neku drugu lokaciju.

Ima nekih sitnih bug-ova kada se koristi u nekim ekstremnim situacijama dok u 95% slucajeva radi savrseno.

Podrzane su verzije explorera 5.x pa navise. Malo li je :D

:1081:

Dragan Babić
14. 04. 2006., 02:13
Da li ovaj sistem pravi problem sa neklikabilnim linkovima koji se nalaze u elementu na čiju pozadinu se utiče ovim JSom? Ukoliko ne znaš za bug pogledaj ovu test stranicu (http://www.dnevnikeklektika.com/css/alpha_transp/)

nixa
14. 04. 2006., 02:14
Svaka ti se dala ..:1036:

ovo ide na top :)

ivanhoe
14. 04. 2006., 06:30
ovo je u stvari ona klasicna png fora samo primenjena na currentStyle.backgroundImage jel da?

Super fora, ne bih se setio priznajem...bravo za ovo :)

@Dragane, ovaj tvoj primer meni nesto cudno radi, samo prvi primer radi u FF (na druga 2 nema slike), dok mi s u IE sve slike vide, ali link ne radi, kao sto kazes... inace FF je 1.5.0.2 frisko skinut pre pola sata :D

Ilija Studen
14. 04. 2006., 07:14
Jedini problem koji zadaju je što sve "aktivno" (link, kontrola, anything) što staviš u blok koji ima transparentnan PNG kao background u IE (učitan pomoću AlphaImageLoader filtera) gubi aktivnu funkciju. Potrebno je dodati još jedan unutrašnji blok i relativno ga pozicionirati i onda nema tog problema. Prljavo ali radi posao.

Inače sam primetio da transprantni PNG kao background danas zadaje više problema nego što pruža zauzvrat. Koristio sam ga samo zato što sam morao...

Blood
14. 04. 2006., 10:19
Inače sam primetio da transprantni PNG kao background danas zadaje više problema nego što pruža zauzvrat. Koristio sam ga samo zato što sam morao...

Eto tebi nove tebe za blog :)

Inace, ja sam do sada koristio ovo i radi lepo(za moje potrebe):


* html #transparent {
filter:progid:DXImageTransform.Microsoft.AlphaImag eLoader(src="../gfx/div_bg.png", sizingMethod="scale");
}

Dragan Babić
14. 04. 2006., 10:23
@ ivanhoe:
Da, loše sam ilustrovao, FF treba da vidi samo prvi jer druga dva pre alphaImageLoadera imaju pravilo background:transparent; da bi "otkazao" originalnu sliku za IE, FF to vidi ali ne razume loader, pa ne prikaže ništa naravno.
Jednostavno loše sam ilustrovao, rekao da ću popraviti čim nađem vremena, ono vraga...

suma sumarum:

Dakle ima li razlike izm. ovog JSa i alphaImageLoadera u CSSu?

jasmanac
14. 04. 2006., 10:38
Da li ovaj sistem pravi problem sa neklikabilnim linkovima koji se nalaze u elementu na čiju pozadinu se utiče ovim JSom? Ukoliko ne znaš za bug pogledaj ovu test stranicu (http://www.dnevnikeklektika.com/css/alpha_transp/)

Ne razumem? Probaj da stavis position: relative linku?

Ilija Studen
14. 04. 2006., 11:15
Dakle ima li razlike izm. ovog JSa i alphaImageLoadera u CSSu?

Nema. Ovaj JS gore projuri sve elemente stranice i ukoliko naleti na PNG stavljen kao background image resetuje ga sa transparentnim gifom i stavi alphaImageLoadera filter. Ovo (bi trebalo da) radi samo u IE (zbog document.all).

Btw, relativno pozicioniranje rešava probleme sa aktivnim kontrolama (linkovi, polja formi itd) koji se nalaze u bloku sa transaprentnim PNGom (kao što rekoh gore).

Tema za blog? Ovo podrazumeva malo istraživanja, a ja sam se celoj materiji posvetio taman toliko da je hacknem da radi ;) Sigurno ima još par trikova koje ne znam.

krcko
20. 04. 2006., 14:58
sto se tice linkova koji ne rade u bloku sa transparentnim pngom negde sam procitao da slicica (taj png) mora da bude nekih od sledecih dimenzija: 1x1, 1x2, 1x3, 1x4, 1x7, 1x10, 2x1, 2x2, 3x1, 3x2, 4x1, 4x2, 7x2, 10x2 da bi link radio... mada nisam to isprobavao..

Dragan Babić
20. 04. 2006., 15:25
Jeste, to je fora, inače i ovaj metod pravi istu frku sa aktivnim kontrolama.
Jednostavno sav taj rizik mi je još uvek prevelik... IE će od mene nastavtiti da dobija ružnjikave nazubljene grafike, a ako je ciljna grupa u većini IE korisnika onda batališ alpha fenseraj i kraj priče...

ivanhoe
20. 04. 2006., 20:25
koliko sam citao IE7 beta podrzava png alfa kanal (macintosh verzija je valjda tu podrsku imala odavno), tako da ova cela prica ionako nece jos dugo da bude bitna... bice novih bagova da se lomatamo sa njima :)

Ilija Studen
20. 04. 2006., 20:39
Ova priča će biti aktuelna još godinu i po, dve što je po meni dosta. Za nove bugove nema brige, posali su im TM.

godza
21. 04. 2006., 12:17
Ova priča će biti aktuelna još godinu i po, dve što je po meni dosta. Za nove bugove nema brige, posali su im TM.
Mislis da ce samo biti aktuelna godinu i po? Nekako mislim da period koji ce da prodje dok IE6 ne padne ispod 10% (u korist IE7) najmanje 3-4 godine!

ivanhoe
21. 04. 2006., 13:59
^^ pored automatskog windows update-a koji MS toliko forsira? Mislim da ce se vrlo brzo po pojavi 7-ce pojaviti WinXP SP 3 koji ce da bude required i koji ce imati IE7 u sebi naravno, i eto 90% korisnika odmah... videcemo... da vidimo prvo sta ce da bude sa IE7 uospte :)

godza
21. 04. 2006., 14:32
^^ pored automatskog windows update-a koji MS toliko forsira? Mislim da ce se vrlo brzo po pojavi 7-ce pojaviti WinXP SP 3 koji ce da bude required i koji ce imati IE7 u sebi naravno, i eto 90% korisnika odmah... videcemo... da vidimo prvo sta ce da bude sa IE7 uospte :)
Nisam siguran iskreno, i dan danas oko 10% procenata koristi IE5, a svi znamo koliko je IE5 star.

modeus
01. 05. 2006., 16:13
to je zato sto IE5 dolazi default uz WinXP, ako se ne varam (a mislim da se varam). Imas jos dosta ljudi koji imaju Win98 (chitavih 8 godina mator).

Sa druge strane, mislim da ce IE7 biti deo SP3, a naravno i deo nove Viste.

Ilija Studen
01. 05. 2006., 16:21
WinXP dolazi sa IE6. Dalje, ako me sećanje dobro služi Win 2K dolazi sa IE5 a Millennium Edition sa IE5.5

modeus
01. 05. 2006., 16:23
Verujem da je tako..

kodi
11. 05. 2006., 21:39
u majku mu ..

dobra stvar, nego od kako sam ubacio ovo (http://www.brainjar.com/dhtml/drag/) je prestalo da radi :1092: :mad: :mad:


edit : ne radi u IE 6.0, u ff i dalje drag-uje

kodi
11. 05. 2006., 22:03
detaljnije objasnjenje

<div id="over" >
<div class="head">
<div style="position:relative;margin:0px auto;float:left;text-align:left;"> TITLE </div>

<div style="position:relative;float:right;">
<a href="#" onMouseDown="dragStart(event,'over','160','90');" ><img src="/images/drag.gif" title="move" alt="move"></a>
<a href="#" onClick="hide('over');" ><img src="/images/close.gif" title="close" ></a>
</div>
</div>
</div>


ovo je CSS


#over{
border:solid 1px black;
width:500px;
height:450px;
position:absolute;
left: 90px;
top:160px;
background-image:url('/images/trans33.png');
z-index:-1;

}


#over div.head{
font:normal 9px verdana;
height:22px;
margin:0px;
padding-left:8px;
border-bottom:solid 1px black;
text-align:right;
background:#dcdcdc;
}

#over div.head img{
border:none;
}


u FF-u sve radi u IE radi close i to samo kad kliknem na oznacheno mesto
(vidi sliku)

http://img460.imageshack.us/img460/9259/ap28rl.jpg (http://imageshack.us)

j

bojan_bozovic
11. 05. 2006., 22:07
Bah! Ako i ne radi, napravite poseban CSS za IE7 a poseban za IE6 i gotovo. HTML i CSS su i napravljeni da se stvar degradira u starihjim browserima, evo ovako


<style type="text/css"
div.navigation {
background:transparent url("images/bg.png");
}
</style>
<!--[if lte IE 6]>
<style type="text/css"
div.navigation {
background:transparent url("images/bg.gif");
}
</style>
<![endif]-->


@kodi

Batali AlphaImageLoader, ima bagove sa aktivnim elementima, cak i uz velicine PNG koje bi trebalo da rade. ja koristim resenje gore, IE7 je super, IE6 nije lose.

Probaj ovako Kodi:


<style type="text/css"
div.providno {
background:transparent url("images/bg.png");
}
</style>
<!--[if lte IE 6]>
<style type="text/css"
div.providno {
background:black;
}
</style>
<![endif]-->


IE6 ce da ti prikaze div sa crnom pozadinom. Malo li je? IE7 je vec na oficijalnoj MS download strani. Uvek moze u <body></body>
<!--[if lte IE 6]>
<p>We have detected that you use Internet Explorer 6 or earlier. While this site runs on IE 6, it makes use of lateset technology in Internet Explorer 7. You may upgrade your browser at <a href="http://www.microsoft.com/windows/ie/default.mspx">Microsoft web site.</a> Thank you!</p>
<![endif]-->

Jer vidi ovde http://www.microsoft.com/windows/ie/default.mspx

conica
28. 09. 2006., 21:04
Moram da ozivim ovu temu, posto se upravo susrecem sa jednim problemom.

Naime, u drop down meniju je trans png pozadina. Odradjeno je sve kako treba za IE, ali od recimo 10, donjih 5 prikaze kao linkove. Od 5, donja 3 itd.
Procitala sam da se to resava tako sto se div-u koji sadrzi filter postavlja z index tako da bude ispred svih ali mi to ne radi.

Jel neko imao slican problem?

ivanhoe
29. 09. 2006., 02:04
nisam imao taj problem, ali probaj da ubacis taj div u iframe (mada to nije bas SEO friendly...) cuo sam da to pomaze kod nekih problema sa z-indexom, kad ti treba da je nesto skroz gore...

conica
13. 12. 2006., 22:16
resila sam problem, ali nisam postovala resenje
mislim da ga je neko vec spomenuo ranije...za IE je bitna dimenzija png fajla u pixelima..ja sam konkretno iskoristila 7x1px posto mi je trebao gradijent. sreca pa ie siri taj png na sirinu div-a :)

Dionis6
27. 02. 2007., 17:01
konacno nesto korisno a da nije neki od svih onih web konvertora..

zhille
24. 11. 2007., 06:14
Zar onaj IE7 script Dean Edwardsa nije reshio taj problem??? To je ona ista skripta koja natera IE6 i nizhe da podrzhe min-width i max-width, gomilu CSS2 pravila, kao i neke od CSS3 pravila tipa opacity( nazhalost :( nece da natera IE da podrzhi border-radius)...

U dokumentaciji pishe da ako imate tu skriptu na serveru, treba samo da dodate "-trans" na ime fajla pre ".png", lupam - bg-trans.png. Mozda to bolje radi? Da li je neko imao iskustva s tim. Ja tu IE7 skriptu koristim uveliko ali nisam se nikad zezao s PNG pozadinom.

Nisam imao priliku to da isprobam jer kad god koristim PNG u kombinaciji s JPGom, glupi IE drugachije prikazhe boje u PNG fajlu.

Mladjo
02. 05. 2008., 15:40
Ja sam ovo resavao na sledeci nacin. Recimo png je background u headeru. Styling header kao normalno:

#header {
padding:0;
background-color: transparent;
background-image: url(images/header.png);
background-repeat: no-repeat;
background-position: left top;
height: 75px;
width: 930px;
}

Posle toga ako je ie6 u head sekciji

<!--[if lte IE 6]>
<link rel="stylesheet" type="text/css" href="pathtofile/fixed.css" />
<![endif]-->

I na kraju fix. Path do image treba da je apsolute.

#header {
background-image: none;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader (src='http://www.apsolutepath.com/images/header.png'),sizingMethod='scale');
}

Paimonia
25. 05. 2008., 06:37
Nisam siguran iskreno, i dan danas oko 10% procenata koristi IE5, a svi znamo koliko je IE5 star.

Одакле ти ово?

kodi
25. 05. 2008., 07:27
od pre par godina....

daj iskuliraj sa dizanjem mrtvih tema :D

vladv
31. 07. 2008., 13:25
jel neko koristi Jquery PNG fix (http://jquery.andreaseberhard.de/pngFix/) ?

coppe
06. 01. 2009., 22:18
Ja sam stvar rešio sa: http://www.dillerdesign.com/experiment/DD_belatedPNG/

aleck
22. 01. 2009., 10:10
Ja sam koristio na par sajtova iepngfix (http://www.twinhelix.com/css/iepngfix/), pošto nemam nijedan drugi skript pa bi ubacivanje jQueryja samo zbog toga bio overkill.

Možeš na http://vina.vacic.rs/ da vidiš kako radi. :)

kodi
22. 01. 2009., 10:39
a radi savrseno :)

ZoranPerin
10. 08. 2009., 11:49
Obično koristim iepnxfix ili DD_belatedPNG.

Iepngfix mi je draži zbog jednosatvnije implementacije, ali generalno pravi problem sa transparentnim png-ovima kada ih treba pozicionirati u pozadini (mislim na background i pozicije slike).

DD_belatedPNG je OK, s tim da moraš da navedeš koje elemente treba da fixira.

Sve u svemu, završe posao, ali je tužno što se još uvek obrćemo oko browsera starog 7-8 godina

Bojan Zivanovic
17. 08. 2009., 19:24
Ja na par sajtova koristim supersleight, ima i jquery plugin.
(http://allinthehead.com/retro/338/supersleight-jquery-plugin)

Jedini problem je sto ne radi background-repeat (to su neki problemi karakteristicni za sve te biblioteke), tako da sam na jednom od sajtova (nrbg.rs) pozadinu morao da konvertujem u jpg (generalno se trudim da ne koristim png tamo gde nije potrebno. PNG fixovi ipak uticu na performanse)

Mladjo
11. 11. 2009., 19:36
Ja koristim ovo:
http://labs.unitinteractive.com/unitpngfix.php
Mada
<!--[if lt IE 7]>
<script type="text/javascript" src="unitpngfix.js"></script>
<![endif]-->
Kod mene na wordpress temama ne radi nego moram da stavim conditional
<!--[if IE]>