"Propagando Soluções"

PNG transparente no Internet Explorer 6

Filed under: Desenvolvimento web, HTML, CSSAdriano de Oliveira Gonçalves | 7 de Março de 2008 @ 22:04:24 (Views: 2158)

Esses dias aprendi no trabalho uma coisa muito útil: fazer funcionar a transparência de imagens PNG no Internet Explorer 6. Vou mostrar aqui como fazer.

png1.jpgO PNG (Portable Network Graphics) é um formato aberto de imagens que veio na década de 90 para substituir o antigo GIF, que é um formato proprietário. Tanto o GIF quanto o PNG permitem criar imagens com pixels transparentes, ou seja, que permitem ver o que está ao fundo de onde a imagem é colocada. A diferença é que o PNG é muito mais avançado, permitindo usar uma gama muito maior de cores por imagem (o GIF suporta apenas palhetas de 256 cores) e compressão sem perda de qualidade.

Além disso, um dos principais atrativos do novo formato é que ele permite que as imagens tenham pixels com valor alpha (transparência). Esse controle permite criar áreas da imagem translúcidas ou degradês de transparência. Com isso é possível criar efeitos bem legais.

Aí vem a má notícia: o Internet Explorer, pesadelo dos desenvolvedores e designers de CSS, não reconhecia essa transparência. As áreas transparentes ou translúcidas ficavam cinza (que feio né?). A versão 7 do Internet Explorer já funciona corretamente com o PNG, mas como ainda tem muito IE 6 rodando por aí, lá vai uma solução para esses casos:

<HTML>
<HEAD>
 <TITLE>Novo Documento</TITLE>
 <style>
         BODY
         {
             background-image: url(teste2.gif)
         }
         #divpng{
                 width: 420px;
                 height: 300px;
                 background-image: url(degrade1.png); /* Essa linha é para os browsers que entendem PNG direito */
                 _background-image: none; /* Essa é pra o IEca 6, pra ele não ler o PNG padrão */
                 filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='degrade1.png', sizingMethod='scale'); /* Essa coloca um filtro pra o IEca ler o PNG */
         }
 </style>
</HEAD>
<BODY>
    <div id="divpng"></div>
    Fica bonitinho, não? :)
</BODY>
</HTML>

Segue o arquivo com algumas imagens de exemplo.

Só tem um problema: não adianta colocar links dentro da área onde esse efeito foi colocado, que eles não vão funcionar com IE6. A culpa não é minha… :P Outra coisa IMPORTANTE: diferente do background-image, no filter você deve colocar a url da imagem em relação à página HTML, e não ao arquivo CSS, caso contrário não irá funcionar.

Valeu a dica, Carol!

8 Comentários

  1. Comentário by Marcelo Meniquelli:

    Cara, muito valiosa a sua dica, foi a unica que funcionou e a mais simples. Valeu!!!!!

  2. Comentário by O Destino:

    Pois é. Estou tentando salvar o IE6 e descobrir uma forma de ligar os links, pq 20% da população ainda usa essa desgraça.

  3. Comentário by diego:

    vc sabe me dizer pq a img não ficou na resolução normal e sim no tamanho da DIV?

  4. Comentário by Adriano de Oliveira Gonçalves:

    Olá Diego, boa noite!
    Tenta mudar a propriedade sizingMethod. De acordo com o manual da MSDN, essas são as opções:

    crop - Corta a imagem pra caber no objeto.
    image - Padrão. Aumenta ou reduz o objeto pra ficar do tamanho da imagem.
    scale - Estica ou encolhe a imagem, para preencher todo o objeto até às bordas.

  5. Comentário by Marcelo Costa:

    Olá, quero agradecer este post.
    Faz algum tempo que estava procurando corrigir isto no IE6 mas sempre achava “soluções” que usavam js só e como não manjo de javascript não tinha conseguido.
    Este post resolveu minha vida.
    muito obrigado

  6. Comentário by Sidney:

    Cara desde que voce nao precise usar o repeat no background rola na boa alguem tem alguma solução pra usar o repeat do CSS nesse background ae ?

    Grato

    Sidney

  7. Comentário by allanppss:

    cara, vlwwwwww

    showww IE 6 quebra as pernas ^^

    flww

  8. Comentário by estenio:

    muito bom baralho vo até fazer uma festa caramba!!!!!!!!!!!

Deixe um comentário


:: Adriano de Oliveira Gonçalves, 2004-2008 - contato@adrianoweb.com.br ::

Xoops PhP MySql ApaChe FireFox RSS