Как вставить прозрачный и полупрозрачный png в ie6


Вставляем полупрозрачную картинку png в ie.

Суть проблемы

Очень часто дизайнеры используют в своих макетах различные тени, свечения и прочие элементы с полупрозрачными областями. При вёрстке это выливается в сложности, связанные с тем, что полупрозрачность png воспринимается не всеми браузерами. Одним из непонимающих альфа-канал является любимый internet explorer 6. В итоге приходится избавляться от png-полупрозрачности, что явно неудобно в большинстве случаев.

Решение проблемы с png бэкграундом для ie

Бэкграунд png будем вставлять через стили css отдельно для ie6 и отдельно для остальных браузеров. В html-коде нам бпонадобится отдельный блок div с id="png-image".

Пример

#png-image {
     height:200px;  /* значение высоты и ширины указываем как размер картинки*/
     width:210px;
     background: url(image.png);  /* пишем бэкграунд для нормальных браузеров */
     -background: none;  /* убираем бэкграунд для ie6 */
     -filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='image.png', sizingMethod='scale');  /* подгружаем полупрозрачный png для ie6 */
}
Вот как это выглядит:
<div id="png-image">

Этот png вставляется как фон для блока.
Такие элементы дизайна, как тени или свечения следует делать таким способом.
При изменении размеров блока с id="png-image" полупрозрачный png будет растягиваться или сжиматься вместе с блоком.
 

Полупрозрачный png в виде картинки

Если же прозрачная или полупрозрачная png-картинка не является элементом дизайна, то показать её в ie 6 можно следующим образом. В html-код вставляем обычный тег img с атрибутом style:
<img src="img/png-image.png" width="200" height="100" style="behavior: url(img/png.htc);"> <!-- этот style прописываем для любого полупрозрачного png -->
Создаем файл png.htc следующего содержания и сохраняем его в папке img:
<public:component>
<public:attach event="onpropertychange" onevent="propertyChanged()" />
<script>
var supported = /MSIE (5\.5)|[6789]/.test(navigator.userAgent) && navigator.platform == "Win32";
var realSrc;
var blankSrc = "img/transparent.gif";
if (supported) fixImage();
function propertyChanged() {
   if (!supported) return;  
   var pName = event.propertyName;
   if (pName != "src") return;
   if ( ! new RegExp(blankSrc).test(src))
      fixImage();
};
function fixImage() {
   var src = element.src;
   if (src == realSrc) {
      element.src = blankSrc;
      return;
   }
   if ( ! new RegExp(blankSrc).test(src)) {
      realSrc = src;
   }  
   if ( /\.png$/.test( realSrc.toLowerCase() ) ) {
      element.src = blankSrc;
      element.runtimeStyle.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "',sizingMethod='scale')";
   }
   else {
      element.runtimeStyle.filter = "";
   }
}
</script>
</public:component>
Также понадобится прозрачная gif-картинка transparent.gif. Её нужно сохранить в папке вместе с png.htc.
Так наш png смотрится в ie6 и других браузерах:
полупрозрачный png
А этот png вставляется тегом img, а не бэкграундом.
 

Поделиться ссылочкой: