В последнее время появилось не мало способов корректно использовать формат PNG в дизайне сайтов. Не вдаваясь в детали скажу что формат PNG был разработан в свое время на смену формату GIF, в то время еще защищенному авторскими правами (сейчас уже свободному).
PNG корректно поддерживается всеми современными браузерами, кроме до сих пор доминирующего (здесь я всплакнул) Internet Explorer 6. То есть IE6, конечно поддерживает (читай воспроизводит) PNG, но не поддерживает полупрозрачность. А это, на равне с поддержкой 16-ти миллионов цветов, основное преимущество PNG над GIF.
Справедливости ради, стоит заметить что отказаться от GIF
в пользу PNG не получится, так как PNG не поддерживает анимацию,
да и вес иногда оставляет желать лучшего.
Недавно, борясь со сложной версткой, в которой присутствовали иконки с тенями на фоне хитрого градиента я подумал, а почему бы не задействовать PNG? И полез рыть Сеть. Оказалось что есть несколько способов внедрить сей замечательный формат. Я конечно поделюсь ссылками на найденое, но здесь приведу описание самого простого на мой взгляд способа “включения” PNG в дизайн сайта.
Этот способ, в отличии от других не использует javascript, a основан на .htc скрипте, который нужен нам только для IE 6 и IE 5.5 для корректного отображения полупрозрачности. Скрипт никак не повлияет на остальные браузеры.
Все что нужно сделать для того чтобы скрипт заработал, это прописать в css-файле для IE6 вот эту строку:
img {
behavior: url(iepngfix.htc)
}
Если вы не используете отдельный файл стилей для Интернет Эксплорера с помощью Conditional Comments, рекомендую использовать Star HTML хак:
* html img {
behavior: url(iepngfix.htc)
}
Затем положить сам файл iepngfix.htc туда где вам удобно, в пределах домена (скрипт не может быть вызван с другого домена в целях безопасности), и изменить путь к нему в CSS.
Еще один момент. Для корректной работы скрипта нужен однопиксельный прозрачный blank.gif, который можно взять здесь или сделать самому.
Если однопикслельный gif лежит не в той же папке что и .htc скрипт, то необходимо открыть iepngfix.htc, в начале файла найти строку
// This must be a path to a blank image. That's all the configuration you need.
if (typeof blankImg == "undefined") var blankImg = "blank.gif";
И изменить имя файла и путь к нему. Вот и все. Никаких дополнительных настроек и кода не нужно.
Можно спокойно использовать PNG и как картинки и как фоновое изображение в дизайне ваших сайтов.
В случае использования PNG для фоновых изображений, можно смело позиционировать его, повторять по обеим осям, в общем все как обычно.
Сайт разработчика скрипта не изобилует обьяснениями, но они почти и не нужны
Пользуйтесь на здоровье.
Войти
RSS-подписка
Читать в ЖЖ
Яndex-Лента
В Google Reader

(проголосовали: 13, рейтинг: 3.92 из 5)
> Справедливости ради, стоит заметить что отказаться от GIF
> в пользу PNG не получится, так как PNG не поддерживает
> анимацию,
Поищи в интернете что-нибудь про mng.
Комментарий by Vladimir Rusinov — Июль 15, 2007 @ 2:07 am | Цитировать
использование .htc файлов конечно удобное дело, но в моем случае неприменимо, т.к. имеет очень досадный недостаток - невозможно в CSS файле подключать .htc файл с другого домена, так что фраза “Затем положить сам файл iepngfix.htc туда где вам удобно и изменить путь к нему в CSS” не совсем верна… куда удобно не получится.
У меня все что связано с графикой хранится на поддомене images.* …
Комментарий by Vladimir Sobolev — Июль 15, 2007 @ 2:42 am | Цитировать
Да чего там искать? Я о нем даже упоминать не хотел. Формат, который на данный момент поддерживается только Konqueror’oм…
ну .htc вроде не совсем графика, можно было бы и к скриптам отнести… Дополнил статью.
Комментарий by neutrino — Июль 15, 2007 @ 9:02 am | Цитировать
А почему никто не говорит про APNG он уже вроде бы как работает на альфах FF.
Ещё не придумали фильтр для IE чтобы APNG показывал ?
Или как всегда microsoft замедляет технологические продвижения?
Комментарий by m_vitaly — Июль 15, 2007 @ 9:12 am | Цитировать
Да ну это все не серьезно. По крайней мере пока.
Комментарий by neutrino — Июль 15, 2007 @ 9:17 am | Цитировать
Здорово, спасибо за инфу, попрактикуем и этот способ
.
Комментарий by Dimox — Июль 15, 2007 @ 5:41 pm | Цитировать
to Dimox
Напишешь потом как успехи
Комментарий by neutrino — Июль 15, 2007 @ 5:44 pm | Цитировать
Время анимации в GIF ушло безвозвратно для этого есть Flash.
Насчет веса это вообще-то не правда есть два вида PNG, PNG8 в котором используется палитра в 256 и который в 99 случаях из 100 дает файл меньших размеров чем GIF иногда значительно меньших и PNG24 который жмет без потери качества и поэтому всегда больше GIF.
Подробная информация по ссылкам:
Креативное использование полупрозрачных PNG в веб-дизайне
PNG8 против GIF
Комментарий by Евгений — Июль 15, 2007 @ 7:03 pm | Цитировать
разве в мозилле mng не поддерживается?
помнится у ещё Phoenix троббер был в мнг нарисован
Комментарий by Огоньков — Июль 15, 2007 @ 8:59 pm | Цитировать
to Евгений
Процитирую одного из участников беседы в ru_webdev из приведенной тобой ссылки:
Тоже самое относится и к Flash. Не всегда и не везде.
Комментарий by neutrino — Июль 15, 2007 @ 10:29 pm | Цитировать
Mozilla перестала поддерживать mng.
Комментарий by neutrino — Июль 15, 2007 @ 10:32 pm | Цитировать
в этом утверждении нет ни одного аргумента, даже обсуждать нечего.
Вот вам пример:
В шапек этого сайта использован sprites.gif (почему у него такие размеры это другой вопрос)весит он 8 716 байт, я пережал его в png8 получилось 1 213 байт, проверить можете сами, если не верите мне.
Если вам нужна анимация то, конечно, png8 не заменит gif, в остальных случаях стоит отдать предпочтение png8.
Комментарий by Евгений — Июль 16, 2007 @ 10:38 am | Цитировать
to Евгений
Так никто и не спорит. Часто png предпочтительнее, но не всегда.
И уж тем более неуместна фраза “Время анимации в GIF ушло безвозвратно для этого есть Flash”.
Поэтому и обсуждать нечего. Не всегда и не везде.
Комментарий by neutrino — Июль 16, 2007 @ 10:43 am | Цитировать
Да, согласен.
Но вернемся к теме статьи, нужно обратить внимание на тот важный момент, что IE6 нормально работает с двоичной (как в gif либо пиксель прозрачен, либо нет) прозрачность в png, проблемы только с альфа-каналом, которого в gif вообще нет. Это значит что прозрачный gif можно заменить прозрачным png8 без всяких скриптов, а вот если нужны более сложные эффекты (полупрозрачность, склаживание границ) то нужно брать png-24 (PhotoShop не умеет создавать png-8 альфа-каналом) и прибегать к различным скриптам.
Комментарий by Евгений — Июль 16, 2007 @ 10:52 am | Цитировать
и FF3.0a =)
Комментарий by Zigzag — Июль 18, 2007 @ 4:05 pm | Цитировать
Хм… Я немного погуглил, и нашёл замечательный ЯваСкрипт подключаешь файлом и все ПНГ работают без никакого шаманства. Просто вставить одну строчку с файлом подкючения .js и всё.
Но: по моему, он фоны не берёт. Т.е. если пнг на фоне, то альфа будет опять не корректно работать
Комментарий by D1ma — Июль 24, 2007 @ 3:58 am | Цитировать
Сплошное расстройство
Буду продолжать юзать этот скрипт.
Комментарий by neutrino — Июль 24, 2007 @ 9:29 am | Цитировать
Картинки то отображаются, а вот фоновые изображения - нет.
Комментарий by Дима — Август 14, 2007 @ 6:21 pm | Цитировать
Не знаю, не знаю, я лично проверял. Проверьте все еще раз.
Комментарий by neutrino — Август 14, 2007 @ 11:49 pm | Цитировать
есть одно но. данный скрипт решает проблему с img, а что если я png фоном кладу?
Комментарий by трин — Август 16, 2007 @ 10:19 am | Цитировать
А вы попробуйте сначала. Скрипт работает и для фоновых изображений.
Комментарий by neutrino — Август 16, 2007 @ 10:24 am | Цитировать
Что то не получается ни позиционировать, ни повторять. Это действительно возможно?
Комментарий by mityan — Август 26, 2007 @ 2:20 pm | Цитировать
body {
background-image:url(’checkerboard.gif’);
}
.square {
width:500px;
height:500px;
border:1px solid #000;
behavior: url(iepngfix.htc);
background:url(’opacity.png’) repeat-x 100% 100%;
}
Не работает ни позиционирование, ни повторение. Как быть?
Комментарий by Ринат — Сентябрь 15, 2007 @ 2:41 pm | Цитировать
Ринат, код проглотился движком. Покажи пример.
Комментарий by neutrino — Сентябрь 15, 2007 @ 10:47 pm | Цитировать
хм…. к сожалению, с .htc файлами некоторых постигнет большой облом…
HTC components in XP Service Pack 2
HTC components in XP Service Pack 2 (2)
Комментарий by HeNuS — Октябрь 8, 2007 @ 5:53 pm | Цитировать
>Этот способ, в отличии от других не использует javascript,….
>Затем положить сам файл iepngfix.htc туда где вам удобно
Автор у вас противоречия. Не стоит дурить публику.JS - есть JS в каком бы файле он не записывался…
Комментарий by PVasili — Октябрь 28, 2007 @ 10:29 am | Цитировать
PVasili
htc != js
Комментарий by neutrino — Октябрь 28, 2007 @ 11:06 am | Цитировать
не работает прозрачность на фоновых пнг в обычных таблицах=(((( всю голову уже поломал =((((
Комментарий by дига — Январь 10, 2008 @ 12:03 pm | Цитировать
позор на мои седины, забыл td в css прописать. работает все. Спасибо )
Комментарий by дига — Январь 10, 2008 @ 12:50 pm | Цитировать
Данный метод имеет все же один серьезный недостаток - .htc не “кушается” валидатором. Именно по этой причине мне пришлось отказаться от данного хака в свое время.
Хотя было бы здорово, если кто-нибудь пофиксит .htc файлик на предмет W3C валидности.
Комментарий by Евгений Сивоконь — Январь 13, 2008 @ 9:30 am | Цитировать
а чем хуже AlphaImageLoader Filter ? http://msdn2.microsoft.com/en-.....32969.aspx
Комментарий by bobrob — Февраль 1, 2008 @ 3:52 pm | Цитировать
Этот метод с .htc скриптом работает не корректно в некоторых случаях, например, отменяет значение position=”relative” у блоковых элементов, не работает для элемента формы input type=”image”. Проверял в IE 6.0.2900, придется использовать другой способ с яваскриптом, у AlphaImageLoader который предлагает Microsoft еще больше ограничений на использование
В который раз поминаю IE недобрым словом!
Комментарий by desig — Февраль 10, 2008 @ 3:21 pm | Цитировать
Покажите хоть один пример где это работает, вы сами то проверяли? Ни позиционирование, ни повторение НЕ РАБОТАЕТ!
За статью конечно спасибо, но очень меня огорчили несоответствия в описании с реальным использованием…
Комментарий by desig — Февраль 10, 2008 @ 8:46 pm | Цитировать
СПАСИБО!!!!
Комментарий by Екатерина — Март 19, 2008 @ 2:08 pm | Цитировать
Хороший метод, пользуюсь.
Только есть вопрос: можно ли использовать его при подмене одного png-изображения на другое использованием псевдокласса :hover, есстественно в IE6? Сколько не бился, не получается…
Комментарий by Даниил — Апрель 9, 2008 @ 2:45 pm | Цитировать
Респектище!
Комментарий by markers — Апрель 10, 2008 @ 12:13 pm | Цитировать