CSS – The @property Rule
1 April 2025 | Category: CSS
The @property rule is a relatively new feature in CSS that allows developers to define custom properties (CSS variables) with more control over their behavior in the context of animations, transitions, and other dynamic effects. This rule enhances the usability of custom properties by enabling you to define their type, default value, and the behavior during animations or transitions.
🔹 What is the @property Rule?
The @property rule allows you to define a custom property (variable) and specify its type, initial value, and how it behaves when animated or transitioned. This is particularly useful when you want to create smooth animations or transitions for custom properties, ensuring that the browser understands how to handle the property during the animation lifecycle.
🔹 Syntax of the @property Rule
@property --property-name {
syntax: <value>;
inherits: <boolean>;
initial-value: <value>;
}
Parameters:
--property-name: The name of the custom property (variable).syntax: Defines the expected value type (e.g.,<color>,<length>,<number>,<angle>). This helps the browser validate that the property value is of the correct type.inherits: A Boolean (trueorfalse) indicating whether the property should be inherited by child elements.initial-value: The initial value of the custom property when it is not explicitly set.
🔹 Example of @property Usage
Let’s look at a practical example to understand how to use the @property rule in CSS:
Basic Example:
@property --box-shadow-color {
syntax: <color>;
inherits: false;
initial-value: #000;
}
div {
--box-shadow-color: rgba(0, 0, 0, 0.3);
box-shadow: 0 4px 8px var(--box-shadow-color);
transition: box-shadow 0.3s ease-in-out;
}
div:hover {
--box-shadow-color: rgba(0, 0, 0, 0.5);
}
Explanation:
@property --box-shadow-colordefines a custom property named--box-shadow-color.- The
syntax: <color>specifies that the property will accept color values. inherits: falseindicates that this custom property is not inherited by child elements.initial-value: #000sets the default value for the custom property as black (#000).
In the div style, the custom property --box-shadow-color is used to control the color of the box shadow. When the div is hovered, the value of --box-shadow-color changes, and the transition effect is applied to the box shadow color, making the animation smooth.
🔹 How Does the @property Rule Enhance Animations and Transitions?
Normally, when animating CSS properties, the browser must know how to interpolate between the start and end values. The @property rule helps the browser understand how to animate custom properties by defining the property’s type and behavior during transitions or animations.
Without @property, animating a custom property can result in unpredictable behavior because the browser doesn’t always know how to interpolate the value between states. By defining the property’s type with @property, you ensure the browser knows how to handle the interpolation.
Example with Animation:
@property --rotate-angle {
syntax: <angle>;
inherits: false;
initial-value: 0deg;
}
div {
--rotate-angle: 0deg;
transform: rotate(var(--rotate-angle));
transition: transform 1s ease-in-out;
}
div:hover {
--rotate-angle: 180deg;
}
Explanation:
@property --rotate-angledefines a custom property for rotation with an angle value (<angle>).- The
divelement uses this custom property in thetransformproperty. - When the
divis hovered, the value of--rotate-anglechanges from0degto180deg, and thetransitionproperty ensures a smooth animation over 1 second.
Without the @property rule, the rotation wouldn’t animate smoothly because the browser wouldn’t know how to interpolate the angle values. But with @property, the browser understands how to animate this property smoothly.
🔹 Why is the @property Rule Useful?
- Smooth Transitions & Animations: The
@propertyrule allows you to define custom properties that can be smoothly transitioned or animated, making it easier to create advanced visual effects. - Type Safety: By specifying the expected data type (such as
<color>,<length>, or<angle>), you ensure that only valid values are applied to the property. This reduces errors and makes your CSS more predictable. - Efficient Performance: Since the browser knows how to handle the custom properties during animations, it can optimize the animation performance, leading to smoother transitions.
- Control Over Initial Value: The
@propertyrule allows you to set an initial value for a custom property, which can be helpful when defining default states or fallback values.
🔹 Example with Multiple Custom Properties
You can define and animate multiple custom properties within the same @property block, enhancing the flexibility of your styles.
@property --size {
syntax: <length>;
inherits: false;
initial-value: 100px;
}
@property --color {
syntax: <color>;
inherits: false;
initial-value: #3498db;
}
div {
--size: 100px;
--color: #3498db;
width: var(--size);
height: var(--size);
background-color: var(--color);
transition: width 1s, height 1s, background-color 1s;
}
div:hover {
--size: 200px;
--color: #e74c3c;
}
Explanation:
@property --sizedefines the custom property for size, with a default value of100px.@property --colordefines the custom property for color, with a default value of#3498db.- The
divuses both custom properties for its width, height, and background color. - When the
divis hovered, both the size and color change with smooth transitions.
This showcases how multiple properties can be animated and transitioned seamlessly with the help of the @property rule.
🔹 Browser Support for @property
As of now, the @property rule is supported in some modern browsers, particularly Chrome and Edge. However, it is not yet fully supported in all browsers, especially Firefox and Safari. You should check the latest browser compatibility before using it extensively in production.
To ensure backward compatibility, consider using fallbacks for unsupported browsers, or check for feature support using JavaScript:
if ('CSS' in window && 'registerProperty' in CSS) {
// Safe to use @property
} else {
// Provide fallback or use alternative approach
}
🔹 Conclusion
The @property rule is a powerful tool that enhances the handling of custom properties in CSS, making them more robust for animations and transitions. It allows you to define the expected type of a custom property, set an initial value, and ensure smooth behavior during dynamic changes. This rule brings better control over custom properties, improving the maintainability, performance, and flexibility of your CSS code.
With the growing support for @property in modern browsers, it’s an excellent option to explore for dynamic and complex animations. However, be sure to check browser compatibility and provide fallbacks where necessary.
Key Takeaways:
- The
@propertyrule allows defining custom properties with a specified type, initial value, and behavior during transitions and animations. - It ensures smooth transitions and animations by providing the browser with information about how to handle the custom property.
- It improves type safety, performance, and maintainability of CSS.
- Always check browser support before using it in production environments.