Я пытаюсь показать некоторые изображения на странице, где они должны отображаться в оттенках серого, за исключением случаев, когда при наведении мыши они плавно переходят в цвет. Я заставил его хорошо работать в IE, Chrome и Firefox, но он не работает в Safari 5.x. Проблема в Safari для Mac и Safari для Windows. Вот код, который у меня есть до сих пор:
filter: url('desaturate.svg#greyscale');
filter: gray;
-webkit-filter: grayscale(1);
Первая строка загружает внешний фильтр .svg (я не встраиваю его в правило url("data:
..., потому что хочу избежать ошибка в старых версиях Firefox).
Вторая строка предназначена для IE и работает так же хорошо, как filter:progid:DXImageTransform.Microsoft.BasicImage(grayScale=1);
.
Последняя строка о webkit должна работать в Safari 6 и выше, а также в Chrome.
Существует ли правило CSS для отображения изображений в оттенках серого в Safari 5.x? Или, если это невозможно, может ли кто-нибудь порекомендовать решение javascript, предпочтительно такое, которое будет обрабатывать анимацию в градациях серого и обратно? Я хотел бы избежать взлома на стороне сервера с изображениями в градациях серого, потому что это испортит мой HTML, а затем мне придется выполнить какое-то неприятное определение браузера, чтобы условно отображать HTML.
Спасибо
Изменить:
Поскольку это оказался «важный вопрос», пожалуйста, не публикуйте здесь больше ответов, которые работают только в Safari 6 и более поздних версиях, или ответов, содержащих файл .svg в URL-адресе данных. В то время, когда я писал OP, для меня было важно поддерживать некоторые версии Safari и Firefox, которые сегодня считаются очень устаревшими, но, тем не менее, это был мой первоначальный вопрос.
Мне хорошо известно, что в современных браузерах фильтрация оттенков серого легко выполняется с помощью нескольких строк кода CSS, но графический дизайнер использовал Safari 5.x, а клиент использовал Firefox 3.x. в то время я делал этот проект. Решение, которое сработало для меня, было предложено Giona, то есть использовать Modernizr для проверки CSS-фильтрации, а если он не поддерживается, вернуться к javascript.
Если бы я делал то же самое сегодня, я бы сказал обоим, чтобы они обновили свои браузеры!