Newsgroup: it.comp.www.html
Titolo: Trasparenza PNG, IE6 e behavior

Mi sto esaurendo....sto quasi per tornare ai miei bei siti bianchi con 
scritte blu.
Allora IE6 non è compatibile con la trasparenza PNG.
Adesso io ho un'immagine di sfondo del body e il mio menu ha a sua volta 
un'immagine di sfondo però png semitrasparente, in modo che si veda 
l'immagine di sfondo del body. Insomma un classico.
Funziona con FF, con IE7 ma ovviamente non con IE6.
Tra le varie soluzioni, l'unica che mi funziona "parzialmente" è quella 
che fa l'uso di un file di behavior.
Innanzitutto vorrei capire una cosa: i miei css sono in una cartella 
root/css/ non direttamente in root/. Nel file css inserisco
#menu {
...
behavior: url(iepngfix.htc)
}
e il "comportamento" viene caricato solo se metto il file in questione 
in root/ e non in root/css, e se, lasciando in root/ il file scrivo
behavior: url(../iepngfix.htc)
anche non funziona.
Vabbe, cmq mettendelo in root e scrivendo url(iepngfix.htc) dal css che 
sta in root/css/ qualcosa funziona.
In effetti la trasparenza adesso si "vede" anche su IE6, ma i link del 
menu non sono cliccabili dal mouse, in pratica c'è una sorta di layer 
trasparente che non permette al mouse di cliccare i link (questo succede 
sempre solo su IE6). Con tab però i link si raggiungono e posso essere 
"cliccati" con l'invio.
Il behavior funziona applicando l'attributo filter allo style. In 
effetti ho visto da parecchie parti che la soluzione potrebbe essere 
semplicemente aggiungere al foglio di stile la riga
#menu {
...
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader 
(src="nomefile.png",sizingMethod="scale")
}
ma a me non funziona mai.
Invece con il file htc (che sembra fare proprio questo) mi funziona (a 
parte i link, si intende).
Vi riporto per completezza lo script presente nel file htc (ne ho 
trovati altri di behavior, ma questo è l'unico che mi funziona)
<public:component>
<public:attach event="onpropertychange" onevent="doFix()" />
<script type="text/javascript">
// IE5.5+ PNG Alpha Fix v1.0RC4
// (c) 2004-2005 Angus Turnbull 
http://www.twinhelix.com
// This is licensed under the CC-GNU LGPL, version 2.1 or later.
// For details, see: 
http://creativecommons.org/licenses/LGPL/2.1/
// This must be a path to a blank image. That's all the configuration 
you need.
if (typeof blankImg == 'undefined') var blankImg = 'blank.gif';
var f = 'DXImageTransform.Microsoft.AlphaImageLoader';
function filt(s, m)
{
 if (filters[f])
 {
  filters[f].enabled = s ? true : false;
  if (s) with (filters[f]) { src = s; sizingMethod = m }
 }
 else if (s) style.filter = 
'progid:'+f+'(src="'+s+'",sizingMethod="'+m+'")';
}
function doFix()
{
 // Assume IE7 is OK.
 if (!/MSIE (5\.5|6\.)/.test(navigator.userAgent) ||
  (event && !/(background|src)/.test(event.propertyName))) return;
 var bgImg = currentStyle.backgroundImage || style.backgroundImage;
 if (tagName == 'IMG')
 {
  if ((/\.png$/i).test(src))
  {
   if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
    style.width = offsetWidth + 'px';
   filt(src, 'scale');
   src = blankImg;
  }
  else if (src.indexOf(blankImg) < 0) filt();
 }
 else if (bgImg && bgImg != 'none')
 {
  if (bgImg.match(/^url[("']+(.*\.png)[)"']+$/i))
  {
   var s = RegExp.$1;
   if (currentStyle.width == 'auto' && currentStyle.height == 'auto')
    style.width = offsetWidth + 'px';
   style.backgroundImage = 'none';
   filt(s, 'crop');
   // IE link fix.
   for (var n = 0; n < childNodes.length; n++)
    if (childNodes[n].style) childNodes[n].style.position = 'relative';
  }
  else filt();
 }
}
doFix();
</script>
</public:component>
Chi è che mi aiuta un pochino?? :....|
Grazie
Bye
Il Bove 
--
Newsgroup robomoderato - gli articoli vengono approvati automaticamente

 Allora IE6 non è compatibile con la trasparenza PNG.
Non è corretto:
IE6 supporta le trasparenze ad indice (un colore viene mappato come 
trasparente) mentre supporta solo parzialmente (attraverso filtri 
proprietari) le trasparenze alpha. In questultimo caso da notare che non 
è possibile agire sulle immagini in background (la proprietà dei fogli 
di stile, i css).
Se non ti servono in background, puoi usare uno dei tanti hack che trovi 
in giro. Se ti servono in background devi riportarti in qualche maniera 
in una situazione non-background.
Ricapitolando:
- trasparenze indice -> no problem
- trasparenze alpha (non bg)-> si usa un hack (ce ti risparmi la suppa 
dei filtri - esemmpio: 
http://dean.edwards.name/IE7/
) oppure i filtri 
proprietari MS
- trasparenze alpha in bg -> non funziona, devi riportarti al punto sopra.
Per un banale esempio:
http://arteag.altervista.org
-- 
doh!


 Allora IE6 non è compatibile con la trasparenza PNG.
Non è corretto:
IE6 supporta le trasparenze ad indice (un colore viene mappato come 
trasparente) mentre supporta solo parzialmente (attraverso filtri 
proprietari) le trasparenze alpha. In questultimo caso da notare che non 
è possibile agire sulle immagini in background (la proprietà dei fogli 
di stile, i css).
Se non ti servono in background, puoi usare uno dei tanti hack che trovi 
in giro. Se ti servono in background devi riportarti in qualche maniera 
in una situazione non-background.
Ricapitolando:
- trasparenze indice -> no problem
- trasparenze alpha (non bg)-> si usa un hack (ce ti risparmi la suppa 
dei filtri - esemmpio: 
http://dean.edwards.name/IE7/
) oppure i filtri 
proprietari MS
- trasparenze alpha in bg -> non funziona, devi riportarti al punto sopra.
Per un banale esempio:
http://arteag.altervista.org
-- 
doh!


 ha scritto nel messaggio 
news:es3olp$dsd$1...@newsread.albacom.net...

Innanzitutto grazie, perché grazie all'ultimo esempio ho capito perché 
usando direttamente filter:progid:ecc.ecc. io non ci riuscivo.
Ovviamente perché sono una capra e calcolavo i riferimenti relativi alle 
immagini a partire dal punto sbagliato.
Allora, IE6 non supporta le trasparenze Alpha, e se le supporta (con 
l'uso del filter:ecc.ecc) non le supporta come background.
Quindi devo usare un workaround. Immagino che se metto un div menu finto 
con il filter sotto il div menu vero e proprio, dovrei risolvere il 
problema link...aspe...ok, funziona.
Però adesso ho il problema che avendo inserito l'immagine di sfondo solo 
attraverso il filter, FF non vede più nessun background (perché se la 
inserisco anche nel div menu vero siamo punto e a capo :-DD).
Mi toccherà fare un css apposta per IE6 e precedenti :...( vabbè tutto 
sommato non è un sacrificio infattibile)
Bye e grazie
Il Bove 


 sommato non è un sacrificio infattibile)
È una gran rottura di marroni, altroché ;-). Ma quando ne esci sono 
soddisfazioni.
Non so se aggiunge qualcosa, ma qui ci trovi spunti interessanti:
http://tinyurl.com/35n89o
Buona fortuna
-- 
doh!


 ma a me non funziona mai.
Idem.
Prova quello che ti ho scritto e facci sapere..
Ciao
-- 
Alan
"Ci spiace, ma il lucro è indispensabile."
http://www.qreate.net
