@supports
Baseline
Widely available
This feature is well established and works across many devices and browser versions. Itâs been available across browsers since ÑенÑÑбÑÑ 2015 г..
ÐпиÑание
CSS @-пÑавило @supports ÑвÑзÑÐ²Ð°ÐµÑ Ð½Ð°Ð±Ð¾Ñ Ð²Ð»Ð¾Ð¶ÐµÐ½Ð½ÑÑ
пÑавил в блоке CSS-кода, огÑаниÑенном ÑигÑÑнÑми Ñкобками, Ñ ÑÑловием, пÑедÑÑавлÑÑÑим Ñобой одно или неÑколÑко пÑовеÑоÑнÑÑ
обÑÑвлений в виде Ð¿Ð°Ñ ÑвойÑÑво: знаÑение, обÑединеннÑÑ
опеÑаÑоÑами and, or или not (логиÑеÑкие Ð, ÐÐÐ, ÐÐ). Такое ÑÑловие назÑваеÑÑÑ supports-ÑÑловием.
@supports позволÑÐµÑ CSS-ÐºÐ¾Ð´Ñ Ð²ÑполнÑÑÑ feature query (запÑÐ¾Ñ Ð½Ð° пÑовеÑÐºÑ Ð¿Ð¾Ð´Ð´ÐµÑжки ÑазлиÑнÑÑ
возможноÑÑей CSS в бÑаÑзеÑе).
ÐÑавило @supports Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¸ÑполÑзовано не ÑолÑко на веÑÑ
нем ÑÑовне вложенноÑÑи CSS, но и внÑÑÑи блоков лÑбÑÑ
дÑÑгиÑ
@-пÑавил. ÐоÑÑÑп к Ð½ÐµÐ¼Ñ Ð¼Ð¾Ð¶Ð½Ð¾ полÑÑиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ Ð¸Ð½ÑеÑÑейÑа обÑекÑной модели CSS CSSSupportsRule.
СинÑакÑиÑ
supports-ÑÑловие ÑоÑÑÐ¾Ð¸Ñ Ð¸Ð· одного или неÑколÑÐºÐ¸Ñ CSS-обÑÑвлений в ÑоÑеÑании Ñ ÑазлиÑнÑми логиÑеÑкими опеÑаÑоÑами. ÐÑиоÑиÑÐµÑ Ð¾Ð¿ÐµÑаÑоÑов Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿ÐµÑеопÑеделÑн пÑи помоÑи кÑÑглÑÑ Ñкобок.
СинÑакÑÐ¸Ñ Ð¾Ð±ÑÑвлениÑ
РпÑоÑÑейÑем ÑлÑÑае, supports-ÑÑловие пÑедÑÑавлÑÐµÑ Ñобой одно CSS-обÑÑвление, Ñо еÑÑÑ, паÑÑ Ð²Ð¸Ð´Ð° ÑвойÑÑво: знаÑение. СледÑÑÑее вÑÑажение
( transform-origin: 5% 5% )
веÑнÑÑ true, еÑли transform-origin поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑинÑакÑиÑ, в коÑоÑом знаÑение 5% 5% ÑвлÑеÑÑÑ Ð´Ð¾Ð¿ÑÑÑимÑм.
CSS-обÑÑвление вÑегда заклÑÑаеÑÑÑ Ð² кÑÑглÑе Ñкобки.
ÐпеÑаÑÐ¾Ñ not
ÐпеÑаÑÐ¾Ñ not (логиÑеÑкое ÐÐ) Ð¼Ð¾Ð¶ÐµÑ ÑÑоÑÑÑ Ð¿ÐµÑед лÑбÑм вÑÑажением. not возвÑаÑÐ°ÐµÑ Ð·Ð½Ð°Ñение, пÑоÑивоположное ÑомÑ, коÑоÑое веÑнÑло вÑÑажение в кÑÑглÑÑ
ÑкобкаÑ
поÑле not. СледÑÑÑее вÑÑажение
not ( transform-origin: 10em 10em 10em )
веÑнÑÑ true, еÑли transform-origin не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÑинÑакÑиÑ, в коÑоÑом знаÑение 10em 10em 10em ÑвлÑеÑÑÑ Ð´Ð¾Ð¿ÑÑÑимÑм.
Ðак и дÑÑгие опеÑаÑоÑÑ, not Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¿Ñименен к лÑÐ±Ð¾Ð¼Ñ ÑоÑÑÐ°Ð²Ð½Ð¾Ð¼Ñ Ð²ÑÑажениÑ. СледÑÑÑие пÑимеÑÑ ÑвлÑÑÑÑÑ ÑинÑакÑиÑеÑки коÑÑекÑнÑми:
not ( not ( transform-origin: 2px ) )
(display: flexbox) and ( not (display: inline-grid) )
ÐÑимеÑание: ÐÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи заклÑÑаÑÑ Ð¾Ð¿ÐµÑаÑÐ¾Ñ not в кÑÑглÑе Ñкобки на веÑÑ
нем ÑÑовне вложенноÑÑи. Ðднако, Ñкобки обÑзаÑелÑнÑ, еÑли not иÑполÑзÑаеÑÑÑ Ð² ÑоÑеÑании Ñ Ð´ÑÑгими опеÑаÑоÑами (and или or).
ÐпеÑаÑÐ¾Ñ and
ÐпеÑаÑÐ¾Ñ and (логиÑеÑкое Рили конÑÑнкÑиÑ) обÑединÑÐµÑ Ð´Ð²Ð° вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ возвÑаÑÐ°ÐµÑ true Ñогда и ÑолÑко Ñогда, когда оба вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ÑÑиннÑ. Ð ÑледÑÑÑем пÑимеÑе вÑÑ Ð²ÑÑажение веÑÐ½ÐµÑ true ÑолÑко в Ñом ÑлÑÑае, еÑли оба вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð² кÑÑглÑÑ
ÑкобкаÑ
одновÑеменно иÑÑиннÑ.
(display: table-cell) and (display: list-item)
Родном вÑÑажении Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð½ÐµÑколÑко опеÑаÑоÑов and; пÑи ÑÑом Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи иÑполÑзоваÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе кÑÑглÑе Ñкобки. Так, вÑÑажение
(display: table-cell) and (display: list-item) and (display:run-in)
ÑквиваленÑно ÑледÑÑÑемÑ:
(display: table-cell) and ((display: list-item) and (display:run-in))
ÐпеÑаÑÐ¾Ñ or
ÐпеÑаÑÐ¾Ñ or (логиÑеÑкое ÐÐРили дизÑÑнкÑиÑ) обÑединÑÐµÑ Ð´Ð²Ð° вÑÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ возвÑаÑÐ°ÐµÑ true, еÑли иÑÑинно Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð½Ð¾ из ниÑ
. Ð ÑледÑÑÑем пÑимеÑе вÑÑ ÑÑÑока веÑнÑÑ true, еÑли Ñ
оÑÑ Ð±Ñ Ð¾Ð´Ð½Ð¾ из вÑÑажений, заклÑÑеннÑÑ
в кÑÑглÑе Ñкобки, иÑÑинно:
( transform-style: preserve ) or ( -moz-transform-style: preserve )
Родном вÑÑажении Ð¼Ð¾Ð¶ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð½ÐµÑколÑко опеÑаÑоÑов or; пÑи ÑÑом Ð½ÐµÑ Ð½ÐµÐ¾Ð±Ñ
одимоÑÑи иÑполÑзоваÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑе Ñкобки. Так, вÑÑажение
( transform-style: preserve ) or ( -moz-transform-style: preserve ) or
( -o-transform-style: preserve ) or ( -webkit-transform-style: preserve )
ÑквиваленÑно ÑледÑÑÑемÑ:
( transform-style: preserve-3d ) or (( -moz-transform-style: preserve-3d ) or
(( -o-transform-style: preserve-3d ) or ( -webkit-transform-style: preserve-3d )))
ÐÑимеÑание: еÑли в вÑÑажении иÑполÑзÑÑÑÑÑ Ð¾Ð±Ð° опеÑаÑоÑа,
andиor, Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ иÑполÑзоваÑÑ Ñкобки, ÑÑÐ¾Ð±Ñ ÑказаÑÑ Ð¿Ð¾ÑÑдок пÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð»Ð¾Ð³Ð¸ÑеÑÐºÐ¸Ñ Ð¾Ð¿ÐµÑаÑоÑов. ÐÑли Ñкобки не иÑполÑзÑÑÑÑÑ, вÑÑажение ÑÑиÑаеÑÑÑ Ð½ÐµÐºÐ¾ÑÑекÑнÑм и вÑÑ Ð¿Ñавило@supportбÑÐ´ÐµÑ Ð¿Ð¾Ð»Ð½Ð¾ÑÑÑÑ Ð¿ÑоигноÑиÑовано.
ФоÑмалÑнÑй ÑинÑакÑиÑ
@supports =
@supports <supports-condition> { <rule-list> }
<supports-condition> =
not <supports-in-parens> |
<supports-in-parens> [ and <supports-in-parens> ]* |
<supports-in-parens> [ or <supports-in-parens> ]*
<supports-in-parens> =
( <supports-condition> ) |
<supports-feature> |
<general-enclosed>
<supports-feature> =
<supports-selector-fn> |
<supports-font-tech-fn> |
<supports-font-format-fn> |
<supports-at-rule-fn> |
<supports-named-feature-fn> |
<supports-env-fn> |
<supports-decl>
<general-enclosed> =
[ <function-token> <any-value>? ) ] |
[ ( <any-value>? ) ]
<supports-selector-fn> =
selector( <complex-selector> )
<supports-font-tech-fn> =
font-tech( <font-tech> )
<supports-font-format-fn> =
font-format( <font-format> )
<supports-at-rule-fn> =
at-rule( <at-keyword-token> )
<supports-named-feature-fn> =
named-feature( <ident> )
<supports-env-fn> =
env( <ident> )
<supports-decl> =
( [ <declaration> | <supports-condition-name> ] )
<complex-selector> =
<complex-selector-unit> [ <combinator>? <complex-selector-unit> ]*
<font-tech> =
<font-features-tech> |
<color-font-tech> |
variations |
palettes |
incremental
<font-format> =
<string> |
collection |
embedded-opentype |
opentype |
svg |
truetype |
woff |
woff2
<complex-selector-unit> =
[ <compound-selector>? <pseudo-compound-selector>* ]!
<combinator> =
'>' |
'+' |
'~' |
[ '|' '|' ] |
[ / <wq-name> / ]
<font-features-tech> =
features-opentype |
features-aat |
features-graphite
<color-font-tech> =
color-COLRv0 |
color-COLRv1 |
color-SVG |
color-sbix |
color-CBDT
<compound-selector> =
[ <type-selector>? <subclass-selector>* ]!
<pseudo-compound-selector> =
<pseudo-element-selector> <pseudo-class-selector>*
<wq-name> =
<ns-prefix>? <ident-token>
<type-selector> =
<wq-name> |
<ns-prefix>? '*'
<subclass-selector> =
<id-selector> |
<class-selector> |
<attribute-selector> |
<pseudo-class-selector>
<pseudo-element-selector> =
: <pseudo-class-selector> |
<legacy-pseudo-element-selector>
<pseudo-class-selector> =
: <ident-token> |
: <function-token> <any-value> )
<ns-prefix> =
[ <ident-token> | '*' ]? '|'
<id-selector> =
<hash-token>
<class-selector> =
'.' <ident-token>
<attribute-selector> =
'[' <wq-name> ']' |
'[' <wq-name> <attr-matcher> [ <string-token> | <ident-token> ] <attr-modifier>? ']'
<legacy-pseudo-element-selector> =
: [ before | after | first-line | first-letter ]
<attr-matcher> =
[ '~' | '|' | '^' | '$' | '*' ]? '='
<attr-modifier> =
i |
s
ÐÑимеÑÑ
>ТеÑÑиÑование заданного ÑвойÑÑва
@supports (animation-name: test) {
⦠/* ÑазмеÑеннÑе в ÑÑом блоке пÑавила бÑдÑÑ Ð¿ÑимененÑ, еÑли бÑаÑзеÑом поддеÑживаÑÑÑÑ ÑвойÑÑва анимаÑии без пÑеÑикÑов */
@keyframes { /* @supports ÑвлÑеÑÑÑ ÑÑловнÑм пÑавилом гÑÑппиÑовки, оно Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ Ð² Ñебе дÑÑгие @-пÑавила */
â¦
}
}
ТеÑÑиÑование заданного ÑвойÑÑва или его веÑÑии Ñ Ð¿ÑеÑикÑом
@supports ( (perspective: 10px) or (-moz-perspective: 10px) or (-webkit-perspective: 10px) or
(-ms-perspective: 10px) or (-o-perspective: 10px) ) {
⦠/* ÑазмеÑеннÑе в ÑÑом блоке пÑавила бÑдÑÑ Ð¿ÑимененÑ, еÑли бÑаÑзеÑом поддеÑживаÑÑÑÑ ÑвойÑÑва 3D ÑÑанÑÑоÑмаÑии, Ñ
оÑÑ Ð±Ñ Ñ Ð¿ÑеÑикÑами */
}
ТеÑÑиÑование неподдеÑживаемого или ÑпеÑиÑиÑеÑкого ÑвойÑÑва
@supports not ((text-align-last:justify) or (-moz-text-align-last:justify) ){
⦠/* в ÑÑом блоке могÑÑ Ð±ÑÑÑ ÑазмеÑÐµÐ½Ñ CSS-пÑавила, имиÑиÑÑÑÑие пÑавило `text-align-last: justify` */
}
СпеÑиÑикаÑии
| Specification |
|---|
| CSS Conditional Rules Module Level 5> # at-supports-ext> |
| CSS Conditional Rules Module Level 4> # at-supports-ext> |
| CSS Conditional Rules Module Level 3> # at-supports> |
СовмеÑÑимоÑÑÑ Ñ Ð±ÑаÑзеÑами
СмоÑÑиÑе Ñакже
- CSSOM-клаÑÑ
CSSSupportsRule, а Ñакже меÑодCSS.supports, позволÑÑÑий иÑполÑзоваÑÑ@supports-пÑовеÑки в JavaScript.