Custom Properties

# 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!