Градиент на фоне и лишняя картинка

html css web-разработка

При разработке сайта возникла необходимость поставить одному из элементов фоновый градиент.
Прописываю в css следующий код:
background: #e8e3d5 url(../img/submenu_gradient.png) top repeat-x;
background: -moz-linear-gradient(top, #fff,#e8e3d5);
background: -webkit-gradient(linear,0 50%,0 100%,from(#fff),to(#e8e3d5));
Этот код делает ровно то, что от него требуется: в мозилле и сафари он рисует правильный градиент средствами самого браузера, остальным же ставит на фон картинку. Но меня немного смущает, что правило, идущее первым, всё равно обрабатывается всеми браузерами, и эту картинку загружают в том числе и мозилла и сафари, которым она просто не нужна. Как лучше сделать, чтобы правильные браузеры игнорировали это правило и картинку не грузили?

Примечание:
L.Ar'e, так условные комментарии работают только для браузеров от Microsoft. Для других всё намного хитрее. То есть, вы предлагаете прописать стили явно для каждого браузера без умолчаний?

Примечание:
Franchesko, обратите внимание:
1) любая картинка — это плюс одно лишнее http-соединение с сервером. Ненужная нагрузка.;
2) даже в 1px картинка будет весить больше, чем три-четыре строки кода css;
3) чем больше раз необходимо произвести отображение картинки (а в случае с шириной 1px это как правило сотни раз), тем больше нагрузка на браузер. IE так вообще подвисает на подобных задачах. Проведите эксперимент: замостите картинкой в 1px*1px всё рабочее пространство окна браузера. Подождите, пока браузер это отобразит. Посмотрите на индикатор загрузки процессора (слабонервным не смотреть!), в случае IE сходите, попейте чаю. Не за этим приходит посетитель на сайт;
4) вопрос был поставлен так, цитирую: «Как лучше сделать, чтобы правильные браузеры игнорировали это правило и картинку не грузили?». Это означает, что не устраивает ситуация, когда загружается картинка лишний раз. Это ощначает, что ищется способ полностью отказаться от загрузки ненужного контента. Это означает поиск решения в целях оптимизации производительности. Ответ «откажись от оптимизации» не является правильным ответом на данный вопрос.

Примечание:
k_max, но всё же это уже не решение средствами css.
Ответы:
Можно сделать наподобие этого
 <!--[if IE 7]><link rel="stylesheet" href="ie7.css" type="text/css" media="screen" /><![endif]-->
а в этом css будет стиль для конкретного браузера.
Самому прада не приходилось с таким сталкиваться
Тогда у меня нет вариантов. Может действительно обойтись картинкой?
а теперь, товарищи знатоки… Внимание, вопрос!
Какой браузер первым научился рисовать градиент на фоне?

а вот и не угадали. Не сафари, и не хром. А всеми любимый Internet Explorer.
Поэтому добавляем в css такую строку:
filter: progid:DXImageTransform.Microsoft.gradient(enabled='true', startColorstr='#ffffff', endColorstr='#e8e3d5', GradientType=0);
и обращаем особое внимание на то, что IE не понимает в таких случаях сокращённых записей цветов. То есть, нельзя #fff вместо #ffffff.
Теперь градиент рисуют сафари, хром, ИЕ и ФФ последней версии.
Остаётся Опера. Для неё одной можно сделать отдельно картинку:
@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) {
#element {
background: #e8e3d5 url(../img/submenu_gradient.png) top repeat-x;
}
}
Минус этого решения в том, что неохваченными остаются старые версии ФФ, konqueror и всякая экзотика на неизвестных науке движках.
Полагаю допустимым для них сделать вместо градиента сплошную заливку фона первой строкой в css.
Итого, полностью код должен быть такой:
че ты париш. сделай градиент в 1 пиксель и залей как тебе надо. картинкой.
А если генерить CSS файл(к примеру средствами PHP) для каждого браузера отдельно. Вроде как (хотя не знаю) браузер отправляет заголовок USER-AGENT: BROWSER NAME **** (в общем что-то там). Поэтому заголовку определяете браузер и генерите CSS-код, если браузер поленился "сказать" кто он, то отправляете картинку.
> k_max, но всё же это уже не решение средствами css.
Да Вам не угодить :)))
background: #999; /* for non-css3 browsers */


14 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.