Now Reading:

Levelling Up Your CSS Game With @property

In 2025, CSS is more powerful than ever, and one of the most exciting additions is the @property rule.

A feature that supercharges CSS custom properties (also known as CSS variables) by adding type safety, default values, and even animation support, something previously impossible with standard CSS variables.

If you love writing clean, scalable CSS, @property is a game-changer. So, let’s explore what it does, how it works and how we can leverage it to write better code.

What is @property in CSS?

#

The @property rule is a powerful addition to CSS that allows you to define custom properties with types, defaults, and inheritance control.

Previously, CSS variables were flexible but lacked type awareness. With @property, you can define structured CSS variables that behave like native properties by defining valid types lsuch as <length>, <color>, <angle>, etc.

In addition we can ensure fallback values are consistent and reliable and as an added bonus custom properties for animations can use used.

Syntax of @property

#

The @property syntax is fairly straight forward:


_10
@property --custom-color {
_10
syntax: '<color>';
_10
inherits: false;
_10
initial-value: #ff5722;
_10
}

In the example above we’re doing a few things. Firstly we’re defining the property name -custom-color . With the syntax property we define the data type. Next the inherits property takes a boolean argument that determines whether the property inherits values or not and we can also define a initial-value as a fallback.

Stay ahead of the pack 🐶

Join the newsletter to get the latest articles and expert advice directly to your inbox.
Totally free, no spam and you can unsubscribe anytime you want!

  • Expert Tips
  • No Spam
  • Latest Updates

I'll never share any of your information with a third party. That's a promise.

This syntax property has lots of customisations. Refer to the MDN documentation on the syntax property to see all the different ways you can define the syntax, below are a few of the most common customisations.

<type> all CSS types are wrapped in angle brackets:


_10
/* Any valid number */syntax: "<number>"

| combines multiple values in an or relationship:


_10
/* Either a color or a length */syntax: "<color> | <length>"

+ space separated list of values:


_10
/* One or more colors separated by spaces */syntax: "<color>+"

# comma separated list of values:


_10
/* One or more colors separated by commas */syntax: "<color>#"

keywords any value not in angle brackets is a keyword:


_10
/* Either the keyword sm, md, or lg */syntax: "sm | med | lg"

Why Use @property Instead of Regular CSS Variables?

#

To understand how @property improves on custom properties we can refer to the table below.

Feature—var()@property
Type SafetyNoneEnforced types like <color> or <length>
Default ValuesRequires fallback logicClean and automatic
Animation SupportLimited to discrete changesFull animation support

Practical Examples with @property

#

Animated Theme Switcher Using @property

One of the most impressive use cases for @property is animating colour changes, something regular CSS variables can’t do smoothly.


_23
@property --primary-color {
_23
syntax: '<color>';
_23
inherits: false;
_23
initial-value: #6200ea;
_23
}
_23
_23
body {
_23
background-color: var(--primary-color);
_23
transition: background-color 0.5s ease-in-out;
_23
}
_23
_23
button {
_23
background-color: var(--primary-color);
_23
color: #fff;
_23
border: none;
_23
padding: 1rem 2rem;
_23
cursor: pointer;
_23
transition: background-color 0.5s ease-in-out;
_23
}
_23
_23
button:hover {
_23
--primary-color: #03dac6; /* Smooth color transition */
_23
}

Here the background colour and button animate seamlessly when hovered, something that standard CSS variables couldn’t achieve without JavaScript.

Dynamic Spacing System

With @property, you can create scalable spacing systems that ensure consistency across layouts.


_14
@property --gap {
_14
syntax: '<length>';
_14
inherits: true;
_14
initial-value: 1rem;
_14
}
_14
_14
.container {
_14
display: flex;
_14
gap: var(--gap);
_14
}
_14
_14
.container:hover {
_14
--gap: 2rem; /* Smoothly animates the gap size */
_14
}

Animated Rotations

Before @property, animating angles with CSS variables wasn’t possible. Now, @property makes it seamless.


_14
@property --rotation {
_14
syntax: '<angle>';
_14
inherits: false;
_14
initial-value: 0deg;
_14
}
_14
_14
.element {
_14
transform: rotate(var(--rotation));
_14
transition: --rotation 1s ease-in-out;
_14
}
_14
_14
.element:hover {
_14
--rotation: 180deg;
_14
}

Best Practices for Using @property

#

Use Clear Naming Conventions: Prefix your custom properties (e.g., --btn-color, --spacing-small) for clarity.

Define Sensible DefaultsAlways provide an initial-value to prevent unexpected behaviour.

Combine with Media Queries: Leverage @property for responsive designs by adjusting values dynamically.

Limit Overuse: While powerful, overusing animated properties can impact performance, so use them wisely.

Browser Support

#

As of 2025, @property enjoys broad support across modern browsers like Chrome, Edge, and Firefox. However, Safari may still require fallback strategies in some cases.

Combine @property with traditional CSS techniques for maximum compatibility.


_10
:root {
_10
--primary-color: #6200ea; /* Fallback */
_10
}
_10
_10
@property --primary-color {
_10
syntax: '<color>';
_10
inherits: false;
_10
initial-value: #6200ea;
_10
}

The @property rule is one of the most exciting additions to CSS in recent years. By adding type safety, animation support, and improved defaults to CSS variables, @property unlocks new possibilities for dynamic, interactive web designs.

If you’re building modern user interfaces in 2025, mastering @property will take your CSS skills to the next level.

Quiz Time!

#

Reinforce Your Learning

One of the best ways to reinforce what your learning is to test yourself to solidify the knowlege in your memory.
Complete this 5 question quiz to see how much you remember.

1) What is the primary purpose of the `@property` rule in CSS?

Halpy coding,

DANNY
file under:
CSS

Thanks alot for your feedback!

The insights you share really help me with improving the quality of the content here.

If there's anything you would like to add, please send a message to:

[email protected]

Was this article this helpful?

D is for danny

About the author

Danny Engineering

A software engineer with a strong belief in human-centric design and driven by a deep empathy for users. Combining the latest technology with human values to build a better, more connected world.

Gobacktothetop

Made with 🥰 in 🏴󠁧󠁢󠁥󠁮󠁧󠁿

©2025 All rights reserved.