Skip to content

noInvalidPropertyInitValue

biome.json
{
"linter": {
"rules": {
"nursery": {
"noInvalidPropertyInitValue": "error"
}
}
}
}

Checks that the initial-value of an @property rule follows the value format declared by its syntax.

Browsers do not register a custom property when its initial-value does not follow this format.

For function values, this rule checks the function name but does not check its arguments. It leaves the browser to validate:

  • indexed or unknown env() values, whose result may depend on an index or fallback;
  • math functions whose result depends on their arguments, such as calc(), min(), and max(), used with <angle>, <integer>, <length>, <length-percentage>, <number>, <percentage>, <resolution>, or <time>;
  • color functions such as rgb() and color-mix() used with <color>;
  • image functions such as linear-gradient() and image-set() used with <image>;
  • transform functions such as rotate() and translateX() used with <transform-function> or <transform-list>.

red is a color, not a length, so the browser does not register --size.

@property --size {
syntax: "<length>";
inherits: false;
initial-value: red;
}
code-block.css:4:18 lint/nursery/noInvalidPropertyInitValue ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

The initial-value does not match the registered property syntax.

2 │ syntax: “<length>”;
3 │ inherits: false;
> 4 │ initial-value: red;
^^^
5 │ }
6 │

A mismatched initial value prevents the custom property from being registered.

Use an initial value accepted by the syntax descriptor.

This rule belongs to the nursery group, which means it is not yet stable and may change in the future. Visit https://biomejs.dev/linter/#nursery for more information.

#fff is a color, not an image, so the browser does not register --background-image.

@property --background-image {
syntax: "<image>";
inherits: false;
initial-value: #fff;
}
code-block.css:4:18 lint/nursery/noInvalidPropertyInitValue ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

The initial-value does not match the registered property syntax.

2 │ syntax: “<image>”;
3 │ inherits: false;
> 4 │ initial-value: #fff;
^^^^
5 │ }
6 │

A mismatched initial value prevents the custom property from being registered.

Use an initial value accepted by the syntax descriptor.

This rule belongs to the nursery group, which means it is not yet stable and may change in the future. Visit https://biomejs.dev/linter/#nursery for more information.

<color># requires one or more colors separated by commas. The browser does not register --palette because red blue has no comma.

@property --palette {
syntax: "<color>#";
inherits: false;
initial-value: red blue;
}
code-block.css:4:18 lint/nursery/noInvalidPropertyInitValue ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

The initial-value does not match the registered property syntax.

2 │ syntax: “<color>#”;
3 │ inherits: false;
> 4 │ initial-value: red blue;
^^^^^^^^
5 │ }
6 │

A mismatched initial value prevents the custom property from being registered.

Use an initial value accepted by the syntax descriptor.

This rule belongs to the nursery group, which means it is not yet stable and may change in the future. Visit https://biomejs.dev/linter/#nursery for more information.

Both 1rem and calc(1px + 2px) use length values, so they follow their declared formats.

@property --size {
syntax: "<length>";
inherits: false;
initial-value: 1rem;
}
@property --calculated-size {
syntax: "<length>";
inherits: false;
initial-value: calc(1px + 2px);
}