This can be achieved by defining variables using (as of writing this, not well-supported) @property
, which allows declaring types and that allows the browser to “understand”, for example, that a certain property (variable) is a Number and then it can gradually animate/transition that variable.
Example Code:
@property --opacity {
syntax: '<number>'; /* <- defined as type number for the transition to work */
initial-value: 0;
inherits: false;
}
@keyframes fadeIn {
50% {--opacity: 1}
}
html {
animation: 2s fadeIn infinite;
background: rgba(0 0 0 / var(--opacity));
}
The current types that are allowed include:
length
, number
, percentage
, length-percentage
, color
, image
, url
, integer
, angle
, time
, resolution
, transform-list
, transform-function
, custom-ident
(an identifier string)