Статьи

Обнаружение собственных функций CSS с помощью @supports

Рассмотрим следующий фрагмент кода CSS:

.blur-text { color: transparent; text-shadow: 0 0 5px #000; } 

Любой элемент с классом blur-text будет оказывать эффект разбитого текста:

CSS3 размытый текст

Прекрасный. К сожалению, не все браузеры поддерживают text-shadow . IE9 и ниже применяют прозрачный цвет, но не отображают тень — текст становится невидимым. Нам нужно было полагаться на решения JavaScript, такие как Modernizr или наш собственный код для обнаружения теней текста, чтобы определять поддержку CSS и реагировать соответствующим образом.

Использование JavaScript для определения свойств CSS3 ужасно. Это потерпит неудачу, если JavaScript отключен и чувствует себя грязным. Я должен купаться в дезинфицирующем средстве каждый раз, когда делаю это. К счастью, в нативном CSS @supports другое решение: правило @supports . Основной синтаксис:

  @supports <condition> { /* rules */ } 

Мы использовали бы следующий код для нашего размытого текста:

  @supports (text-shadow: 0 0 5px #000) { .blur-text { color: transparent; text-shadow: 0 0 5px #000; } } 

Вы можете использовать логическое И, ИЛИ и НЕ, например

  @supports ( (display: table-cell) and (display: list-item) ) { /* styles */ } 

а также проверьте наличие префиксов для конкретного поставщика:

  @supports ( (-webkit-transform: rotate(90deg)) or (-moz-transform: rotate(90deg)) or (-ms-transform: rotate(90deg)) or (-o-transform: rotate(90deg)) or (transform: rotate(90deg)) ) { /* styles */ } 

Старые браузеры, которые не понимают @support , не будут отображать стили, но они вряд ли поймут свойства, которые вы пытаетесь использовать.

К сожалению, @supports имеет довольно ограниченную совместимость с браузерами. На момент написания, только Opera 12.1 представляет его как стандарт. Это доступно в Firefox 17, если параметр layout.css.supports-rule.enable about: config изменен на true. Это также должно быть реализовано в Chrome 24, но может пройти некоторое время, прежде чем @support в IE и Safari.

Тем не менее, @supports является многообещающим, и дни, когда пришлось использовать Modernizr-подобный стиль JavaScript, сочтены.