С одной стороны, у нас схема data:URI
, которая поддержана W3C и распознается всеми браузерами, кроме IE. С другой стороны, у нас IE, который понимает mhtml
и с которым работают 70% наших пользователей. Мы объединим эти два решения, благо они оба используют base64-представление картинок.
Задача первая: объединить оба назначения стилевых правил, чтобы они не конфликтовали друг с другом. Решается это очень просто с помощью либо отдельного CSS-файла для IE (через условные комментарии), либо CSS-хаков (последнее предпочтительнее, ибо позволяет загружать всего один CSS-файл). В итоге в CSS-файле мы имеем примерно следующее:
/* Content-Type: multipart/related; boundary="_" --_ Content-Location: 1 Content-Transfer-Encoding: base64 iVBOR.. */ ul li { background: #fff url(data:image/png;base64,iVBOR...) 0 0 no-repeat; } * html ul li { background-image: url(mhtml:http://site.ru/main.css?20081010!1); } *+html ul li { background-image: url(mhtml:http://site.ru/main.css?20081010!1); }
Данная конструкция позволяет вывести фоновое изображение в base64-кодировке для всех (ну или 99,9%) браузеров. Почему в конце содержатся 2 разных CSS-селектора с одним объявлением? Первое предназначено для IE6 и предыдущих версий, второе — для IE7. Объединить через запятую их нельзя.