syntax CSS at-rule descriptor

Baseline 2024
Newly available

Since July 2024, this feature works across the latest devices and browser versions. This feature might not work in older devices or browsers.

The syntax descriptor of the @property at-rule defines the allowed value types for the registered CSS custom property. It controls how the property's specified value is processed to derive the computed value. It is a required descriptor; if missing or invalid, the entire @property rule is invalid and ignored.

Syntax

css
/* A data type name */
syntax: "<color>";

/* A '|' combinator for multiple data types */
syntax: "<length> | <percentage>";

/* Space-separated list of values */
syntax: "<color>+";

/* Comma-separated list of values */
syntax: "<length>#";

/* Keywords */
syntax: "small | medium | large";

/* Combination of data type and keyword */
syntax: "<length> | auto";

/* Universal syntax value */
syntax: "*";

Values

A string (known as the syntax string) that defines the allowed values. It can be one of the following:

  • One or more syntax component names, which can be:
    • Data type names (written with angle brackets, such as <color> or <length>)
    • Keywords (written without angle brackets, such as auto or none)
  • The universal syntax *, which accepts any valid CSS value. It cannot be multiplied or combined with other syntax components.

The syntax component names can be used alone or multiplied and combined in different ways:

  • The + (space-separated) and # (comma-separated) multipliers indicate that a list of values is expected. For example, <color># means a comma-separated list of <color> values is the expected syntax.

  • The vertical line (|) combinator can create "or" conditions for the expected syntax. For example, <length> | auto accepts <length> or auto, and <color># | <integer># expects a comma-separated list of <color> values or a comma-separated list of <integer> values.

The following syntax component names are supported:

"<angle>"

Accepts any valid <angle> value.

"<color>"

Accepts any valid <color> value.

"<custom-ident>"

Accepts any valid <custom-ident> value.

"<image>"

Accepts any valid <image> value.

"<integer>"

Accepts any valid <integer> value.

"<length>"

Accepts any valid <length> value.

"<length-percentage>"

Accepts any valid <length> or <percentage> value and any valid calc() expression combining <length> and <percentage> values.

"<number>"

Accepts any valid <number> value.

"<percentage>"

Accepts any valid <percentage> value.

"<resolution>"

Accepts any valid <resolution> value.

"<string>"

Accepts any valid <string> value.

"<time>"

Accepts any valid <time> value.

"<transform-function>"

Accepts any valid <transform-function> value.

"<transform-list>"

Accepts a list of valid <transform-function> values. It is equivalent to "<transform-function>+".

"<url>"

Accepts any valid <url> value.

Formal definition

Related at-rule@property
Initial valuen/a (required)
Computed valueas specified

Formal syntax

syntax = 
<string>

Examples

Registering a custom property with type checking

This example shows how to define a custom property --my-color that allows only <color> values:

css
@property --my-color {
  syntax: "<color>";
  inherits: false;
  initial-value: #c0ffee;
}

Using JavaScript CSS.registerProperty():

js
window.CSS.registerProperty({
  name: "--my-color",
  syntax: "<color>",
  inherits: false,
  initialValue: "#c0ffee",
});

Specifications

Specification
CSS Properties and Values API Level 1
# the-syntax-descriptor

Browser compatibility

desktop mobile
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
syntax descriptor
Chrome – Full support
Chrome 85 (Release date: 2020-08-25)
footnote Full support
Edge – Full support
Edge 85 (Release date: 2020-08-27)
footnote Full support
Firefox – Full support
Firefox 128 (Release date: 2024-07-09)
footnote Full support
Opera – Full support
Opera 71 (Release date: 2020-09-15)
footnote Full support
Safari – Full support
Safari 16.4 (Release date: 2023-03-27)
footnote Full support
Chrome Android – Full support
Chrome Android 85 (Release date: 2020-08-25)
footnote Full support
Firefox for Android – Full support
Firefox for Android 128 (Release date: 2024-07-09)
footnote Full support
Opera Android – Full support
Opera Android 60 (Release date: 2020-09-23)
footnote Full support
Safari on iOS – Full support
Safari on iOS 16.4 (Release date: 2023-03-27)
footnote Full support
Samsung Internet – Full support
Samsung Internet 14 (Release date: 2021-04-17)
footnote Full support
WebView Android – Full support
WebView Android 85 (Release date: 2020-08-25)
footnote Full support
WebView on iOS – Full support
WebView on iOS 16.4 (Release date: 2023-03-27)
footnote Full support

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support

See also