| Bug fix: trasparenza delle immagini PNG in Internet Explorer |
|
|
|
| mercoledì 09 maggio 2007 | ||||||
|
Attenzione: 1 agosto 2008. Ormai propongo di usare la plugin pngfix di Jquery, quindi i metodi spiegati in questa pagina li ritengo obsoleti. Per maggiori info consultare il sito http://jquery.andreaseberhard.de/pngFix/ Il formato PNG è uno standard W3C già da molti anni, permette immagini di ottima qualità in due versioni: 8 bit e 24 bit, ha una buona compressione, si presta per utilizzi web, e la trasparenza delle PNG 24 può dare grandi soddisfazioni a chi sviluppa siti web. Però le PNG hanno trovato un grosso ostacolo nella loro diffusione, un bug di visualizzazione in Internet Explorer nelle versioni precedenti alla 7. PNG a 24 bit, una caratteristica davvero utile.Queste immagini hanno una peculiarità: permettono trasparenze migliori delle GIF (che sono limitate a 256).Ad esempio posso mettere senza problemi la mia PNG 24 sopra uno sfondo chiaro, uno scuro, oppure sopra un'immagine colorata ed ottengo sempre una sfumatura impeccabile. Le applicazioni web possono essere molteplici: ombre o bagliori esterni ai loghi, fotografie che sfumano su altre ecc... Internet Exlporer nelle versioni precedenti alla 5.5 non riesce a vedere correttamente le PNG, e non abbiamo alcun rimedio. Ma per la 5.5 e 6 possiamo utilizzare un hack che corregge il problema, è possibile tramite un css, un javascript, ed una immagine Gif trasparente di 1x1 pixel. Ringraziamo http://www.twinhelix.com per la soluzione. PASSO 1. Inserire nell'head della pagina o nel file css la seguente riga, è sufficiente assegnare i marcatori img e div.
img, div { behavior: url(iepngfix.htc); }
PASSO 2. Inserire il file "iepngfix.htc" nella posizione che abbiamo appena definito (nell'esempio è la stessa cartella dove abbiamo la pagina o il css). Il file contiene le seguenti righe: <public:component>
PASSO 3. Nello script troviamo una variabile "blankimg" contiene il path della gif trasparente, dobbiamo crearne una ed inserirla nel nostro sito. Fatto questo le PNG in tutto il sito sono sistemate da IE 5.5 in su. Nota: controllare bene di non sbagliare i path ai file: css, htc, gif trasparente. Ho fatto uno zip con i file da utilizzare, potete scaricarlo qui: Altra soluzioneCi sarebbe un altro script che risolve le png normali, ma anche quelle di background, e quelle con mappe. Grazie a Youngpup (http://www.youngpup.net ) e Drew McLellan (http://www.allinthehead.com ) Il principio è lo stesso, inserire i javascript presenti nello zip, e l'immagine gif trasparente. Attenzione! Utilizzando questi script di norma funziona tutto, ma in un caso ho riscontrato un grosso problema (era fatto in doctype Xhtml 1.1) ma non ho indagato la causa degli errori che mi dava IE6. Inserendo uno di questi script il sito smetteva di funzionare, andava in conflitto con molti elementi della pagina: campi delle form bloccati, collegamento dei link eliminato, testo non selezionabile. L'evenienza potrebbe ripetersi quindi usate doctype differenti (ad esempio 1.0 transitional) e come sempre... testate bene. Aggiungi ai preferiti (188) | Visualizzazioni: 11634
1. 31-01-2008 21:29 Sito perfecto! ![]() Ospite 2. 06-08-2008 10:08 Grazie Grazie risolto un gorsissimo Problema Ospite 3. 12-03-2009 22:06 grazie!!! grazie. Stavo diventando matto e quasi avevo pensato di cambiare la grafica del sito. Con questo hack ho potuto risolvere il problema. ![]() Ospite 4. 27-03-2009 09:42 ... però sconsiglio... Questo hack in ogni caso lo sconsiglio vivamente, io non lo utilizzo più da molto tempo. Sebbene il pngfix sembri risolvere il problema con IE6, molto spesso accade che provochi vari effetti collaterali nel rendering della pagina: immagini sballate e altri elementi come links, forms inutilizzabili. Quindi per avere una png "semi-corretta" ritengo inopportuno rendere instabile l'intero sito. Cosa propongo in alternativa: A) fare i furbi usando css diversi con i background dei div: mettiamo la png in quello default, e una gif o jpg preparata ad hoc per il css di ie6 (si veda la tecnica dei commenti condizionali). Così senza hack js diamo a IE6 il downgrade che vuole. B) invece di inserire una png inserire un swf. Infatti mettendo la png in un flash che fa da mero contenitore il tutto funziona a meraviglia, le trasparenze vengono mantenute, anche in IE6 se si tratta di swf (usando il wmode=transparent). In base al caso oggi io uso queste due tecniche. Ospite Scrivi Commento
Powered by AkoComment Tweaked Special Edition v.1.4.6 |
||||||
| < Prec. |
|---|