Еще один способ решения проблем полупрозрачных PNG в IE6 — DD_belatedPNG.

DD_belatedPNG использует VML вместо AlphaImageLoader. Соответственно способ не обладает минусами присущими применению фильтра. Инструмент позволяет использовать свойства background-position и background-repeat, а также псевдо-класс :hover. Ссылки и элементы форм в блоке с полупрозрачным фоном остаются кликабельны.

Демо

Использовать скрипт очень просто:

  • Скачайте javascript файл (сжатая версия — 7Kb).
  • Подключите его к странице.
  • Укажите какие элементы необходимо исправить.
<!--[if IE 6]>
  <script src="DD_belatedPNG.js" type="text/javascript"></script>
  <script type="text/javascript">
    DD_belatedPNG.fix('.png-elem');
  </script>
<![endif]-->

Для fix() требуется указать CSS селектор исправляемого элемента. Если необходимо исправить несколько элементов, нужно указать их через запятую.

На первый взгляд хорошая альтернатива IE PNG Fix, который я использовал раньше.

P.S. На днях ко мне обратился Руслан и предложил взять интервью для своего блога о блогах. Собственно читайте кому интересно. До меня кстати интервью давал Dimox.

48 комментариев к статье «Полупрозрачные PNG в IE6 с помощью DD_belatedPNG»:

  1. Непременно пригодится. В закладки.

  2. Михаил:

    значит мистер инкогнито – это у нас Руслан, который ak*uba? =)

  3. [...] View post: Полупрозрачные PNG в IE6 с помощью DD_belatedPNG « AI: HTML, CSS и мног… [...]

  4. ilia:

    Что-то у меня в ie6 не работает демо пример, вы сами хоть проверяли?

    http://s55.radikal.ru/i148/0908/09/264b76579163.jpg

  5. читатель:

    блин, я вот недавно ридер почистил, из 45 блогов оставил 7. твой в их числе. один из самых полезных блогов которые я когда либо встречал.

  6. у меня как то не сработало.. возможно что то не учла, хотя проверила код.. радует то что падает количество пользователей шестой версии, и думаю что после Винь7 станет их еще меньше.. так что еще годик и редко кого встретишь за шестеркой

  7. Пробовал. Помогает:).Зачёт

  8. asse:

    пол года как пользуюсь этим скриптом. Нареканий нет. Удобно и эффективно

  9. Иногда возникают проблемы в IE6 когда фон отображается кусками в сложной вёртске, в остальном уже месяца 4 работает нормально у меня.

  10. DD_belatedPNG.fix(‘.png-elem’); – вот это лучше в конец скрипта прописать, поскольку пока скрипт не загрузится, прозрачности не будет.
    Да и код страницы красивее.

  11. Пупкин:

    Вася, вырежи PNG гамму, юзай например TweakPNG или любую другую прогу. Не позорьтесь.

  12. andre:

    А как же быть когда необходимо создать Rollover?
    Фотовая картинка для IE6 прописывается ведь через vmlBg при загрузке страницы.
    Есть мысли на этот счет?

    • Alex:

      Посмотрите на демо страницу, там есть пример с :hover у ссылки.

      • andre:

        я говорю о Rollover, т.е. когда при наведении на картинку (png) появляется другая картинка, которая в одном спрайте, т.е. меняется position-relative.

        в Вашем примере (.png-link:hover{background:red} ) background-image заменяется background-color

        • Alex:

          Сделать спрайт фоном, не подойдёт?

          • andre:

            я фоном и делаю.
            Только вот position-relative не меняет картинку для ie6 при эффекте ролловера. Насколько я понял, position-relative для ie6 работает только при загрузке страницы и записывает созданный vml через vmlBg

            • Alex:

              Если спрайт в качестве фона, то тогда нужно менять не позиционирование а расположение фона у ссылки. Добавил в примере спрайт у ссылки, посмотрите.

  13. andre:

    да уж, опечатался, конечно же я применяю расположение фона background-position
    Не могли бы Вы у себя в примере не заменять одну картинку на другую, а менять background-position у фоновой картинки. Т.е. надо вначале сделать спрайт состоящий из двух картинок, и при наведении менять видимую область спрайта.
    Вот именно это у меня и не получается сделать.

  14. andre:

    в официальных примерах грузится быстро, но там не применяется background-position при :hover, а у Вас сейчас применяется. Возможно в нем причина

    • Alex:

      Сомневаюсь что проблема в этом, как уже заметил у меня скорость загрузки не изменилась. Думаю если бы скрипт обладал подобным минусом, о нем было бы написано.

      • andre:

        А я где то уже читал о том, что скрипт себя некорректно ведет, когда установлено несколько версий ie одновременно. Это как раз мой случай. У Вас сколько IE стоит?

  15. Роман:

    Спасибо большое, все работает отлично!

  16. Dido:

    о, спасибо, искал альтернативный метод прозрачности пнгшки!

  17. Серафим:

    Все работает. Спасибо. Гораздо лучше, чем IE PNG Fix. Отлично пашет с бэкграундами.

  18. Capa:

    а подскажите, пожалуйста, можно ли прописать скрипту отрисовку пнгхи, которая стоит на бг, например, в a:hover span?

  19. Использую DD_belatedPNG для некоторых прозрачных png на сайте http://asia.site-plus.ru. Похоже все работает. Если обновить страницу, то все прозрачные картинки отображаются нормально, но если кликнуть по ссылке еще раз, то прозрачные png, обработанные DD_belatedPNG не отображаются.

    Никто не сталкивался с подобной проблемой? Как это решается.

    Для примера можно посмотреть страницу: http://asia.site-plus.ru/ru/about/

  20. Du33:

    отлично решение , спасибо
    До этого использовал PNG Behavior ….

  21. Тимур:

    Есть баг у этого скрипта: создайте несколько одинаковых дивов с одним и тем же классом, и идущими подряд, друг за другом. В класс пропишите фоновое изображение. Подключите скрипт к диву… В итоге получится что фоновое изображение появится только в первом диве, остальные дивы будут пустыми.
    Надеюсь этот баг быстро поправят.

  22. Тимур:

    Покопав код скрипта понял как этот баг обойти (не исправить, а именно обойти), чтоб всё работало как часы. Вот код с использованием фреймворка jQuery:
    $(function(){
    var els, a;
    els = $(‘*’);
    for(a=0; a<els.length; a++) {
    DD_belatedPNG.fixPng(els[a]);
    }
    }

  23. maks_programmist:

    Найден баг: скрипт не срабатывает,если PNGшка назначена фоном для ячейки таблицы.

Оставь комментарий: