Обнаружение функций для @supports?

Как определить, поддерживает ли браузер функцию CSS @supports? Поскольку Internet Explorer и Safari не поддерживают его, мое веб-приложение не знает, какие стили применять в этих браузерах.


person Azrael    schedule 21.01.2014    source источник
comment
А Модернизатор?   -  person Paulie_D    schedule 21.01.2014
comment
Это фреймворк, верно? Если возможно, я хотел бы держаться подальше от фреймворков.   -  person Azrael    schedule 21.01.2014
comment
Нет... JS для обнаружения функций — modernizr.com   -  person Paulie_D    schedule 21.01.2014


Ответы (1)


Используя чистый CSS, вы можете положиться на каскад, чтобы определить, понимает ли браузер @supports, создав правило @supports с универсально поддерживаемым объявлением, таким как объявление color, и переопределив другое такое правило, объявленное глобально:

#test {
    color: red;
}

@supports (color: green) {
    #test {
        color: green;
    }
}

В любом браузере, который правильно реализует @supports, #test должен иметь зеленый текст. В противном случае текст будет красным.

См. мой ответ на этот вопрос для подробного объяснения метода чистого CSS.

Если вы хотите обнаружить его с помощью JavaScript, вы можете использовать библиотеку обнаружения функций Modernizr, как указано в комментариях (будьте обязательно включите поддержку css в конфигурацию загрузки):

if (Modernizr.supports) {
    console.log('Your browser supports @supports.');
} else {
    console.log('Your browser does not support @supports.');
}
person BoltClock    schedule 21.01.2014
comment
Чистое решение CSS может быть ответом, который я искал. В настоящее время использую что-то подобное, но не знал о переопределяющей функциональности. - person Azrael; 22.01.2014
comment
При использовании вашего решения на чистом CSS применяются базовые правила стиля даже в браузерах, которые ранее отображали правила стиля в блоке @supports. РЕДАКТИРОВАТЬ: Имеет ли значение, находится ли блок поддержки в медиаблоке? - person Azrael; 22.01.2014
comment
@Elitis: Это не должно иметь значения - в этом случае блок @supports должен применяться тогда и только тогда, когда блок @media также применяется. Если вам нужно исключить базовые стили из неподдерживающих браузеров, вместо этого переместите их в блок @supports. С другой стороны, если вам нужно исключить базовые стили из поддерживающих браузеров, вам придется переопределить и их — в этом недостаток переопределения. - person BoltClock; 22.01.2014