PNG transparente no IE6 (6)

dezembro 11th, 2009 by Luan Garcia, sobre Css.

Como aplicar corretamente este filtro, e qual a melhor maneira de usá-lo.

Como todos já estamos carecas de saber, o nosso querido amigo IE6, não nos dá suporte ao nosso grande aliado png.

Existem algumas formas mais comuns de se faze-lo funcionar no ie6, na sua maioria, por javascript. Porém, este não vai ser meu foco hoje. Vou propor a solução usando apenas css, ou seja, os filtros para ie6.

Muita gente usa, pouca gente consegue fazer funcionar, e muitos não entendem como funciona o mecanismo, mas há pouco tempo eu descobri o porque as vezes a desgraça não funcionava, e a partir daí, meus problemas com png acabaram.

Primeiramente e antes de mais nada, eu aconselho a usar uma condicional apenas para o ie6. Sendo assim, apenas o ie6 vai ler o trecho do codigo que irá conter os filtros de css para fazer com que o png fique transparente. Para quem não sabe, as condicionais são if’s, que determinam qual navegador vai conseguir ler o trecho de código que está dentro.

O código que faz isso acontecer é o seguinte:

<!–[if IE 6]>
<link href="css/comum.css" rel="stylesheet" type="text/css" media="screen" />
<![endif]–>

Ou seja, apenas o IE6 vai interpretar este arquivo de css. O resto dos navegadores vai entender como um comentário simples. Apenas ele precisa interpretar este código que faz com que o png fique transparente, os outros navegadores (IE7+, ff, opera, chrome etc..) ja possuem suporte ao png.

Bom, chega de papo furado vamos ao que interessa.

No css normal, usa-se o backgroun da seguinte forma:

CSS: (css/comum.css)
h1 {background: url(../img/logo.png) no-repeat 0 0;
width: 480px;
height: 110px;
}

Obs.: Este filtro não aceita imagem repetida em y ou x (ie6), tem que se usar a imagem inteira.

E no css que apenas o ie6 irá ler:

CSS: (ie6.css)
h1 {background: url(../img/logo.png) !important;
background: none;
filter: none !important;
filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src=’img/logo.png‘,sizingMethod=’image’);
}

Bom..agora vamos a lógica. Levem em conta minha estrutura de pastas, onde index.html está na raiz e tanto o css quanto as imagens estão em pastas com seus respectivos nomes.

Reparem que o caminho da imagem do background esta diferente do caminho da imagem do filtro. Muitas vezes não funciona porque não sabemos colocar certo o caminho do filtro. É bem simples, na verdade a referência que o filtro usa para chegar até a imagem, é o proprio html (se o html esta na raiz, entao o caminho fica img/logo.png, ao contrário do css que tem que voltar um nível parar acessar a pasta da imagem). Se é do próprio html então ele nao precisa subir um nivel para chegar a imagem (neste caso). Logo, isso é o grande “x” de se usar o filter.

E é isso galera, é bem simples na verdade. Já tomei muita surra por causa disso e acho interessante compartilhar com vocês. Abaixo está o link para fazer o download do meu exemplo e ir acompanhado ao tutorial.

Link do exemplo

Obs.: Não postei o código html pois ocuparia muito espaço, além de não ser o essencial.

Flw galera..abs!

6 Respostas para “PNG transparente no IE6”

  1. Vlw mesmo pelo tutorial sempre usa-sa javascript pra fazer a transparencia e com o filtro deu certo vlw ^_^

  2. luan garcia disse:

    Ah, e teste no ie6 original por favor..nada de ie6 portable, multipes ies ou ie tester r srs abs!

  3. luan garcia disse:

    Luiz, funciona sim. Tanto funcionar que o exemplo que esta para download, esta funcionando. Se voce seguiu tudo direitinho, não tem porque dar errado, em todo caso posso olhar seu código se quiser. abs!

  4. Marcos Evangelista disse:

    Não conseguí fazer funcionar ao fazer um image replacemente num h1 com link (h1 a)

    Quando se coloca o display:block, este anula a transparência do PNG.

    Tem alguma solução para este caso?

  5. Luiz disse:

    Não funciona

  6. Luka Moraes disse:

    Eta! Mais uma dica fantástica! Pena que não dá pra usar repeat! =/

Deixe um comentário

*
  • RSS
  • Twitter
  • Facebook