CSS Custom Properties

        :root {
            --my-color: purple;
        }

        .test {
            background-color: var(--my-color);
        }

        .test-parent {
            --my-color: pink;
        }

    
            .test
        
This should be purple
            .test-parent
        
                .test
            
This should be pink

Fallback Values

        .test-fallback {
            background-color: var(--fallback, lime);
        }

        .test-fallback.with {
            --fallback: cyan;
        }
    
.test-fallback
This should be green
.test-fallback.with
This should be cyan

Inline properties

        <div style="--color: turquoise; background-color: var(--color)">
    
This should be turquoise

Nested var()

        :root {
            --width: 10px;
            --color: orange;
            --style: solid;
            --border: var(--width) var(--color) var(--style);
        }
        .test-nested {
            border: var(--border);
        }
    
.test-nested
This should have a 10px solid orange border
        .test-inside-a-function {
            --blue: 255;
            background-color: rgb(255, 0, var(--blue));
        }
    
.test-inside-a-function
This should be fuchsia

Mixed var()

        :root {
            --background-color: yellow;
            --background-position: top 10px right 5px;
        }

        .test-mixed {
            background: var(--background-color) url("background-repeat.png") var(--background-position) no-repeat;
        }
    
.test-mixed
This should have a yellow background with a smiley face in the top-right corner

Billion laughs attack

        .billion-laughs {
            --prop1: lol;
            --prop2: var(--prop1) var(--prop1);
            --prop3: var(--prop2) var(--prop2);

            /* ... */

            --prop30: var(--prop29) var(--prop29);

            background: var(--prop30);
        }
    
.billion-laughs
This box tests that we handle the billion laughs attack. If we don't crash, it worked!

Dependency cycles

        .dependency-cycle {
            --recursive: var(--recursive);

            --a: var(--b);
            --b: var(--a);

            background: var(--a);
            color: var(--recursive);
        }
    
.dependency-cycle
This box tests that we handle dependency cycles correctly. If we don't crash, it worked!