Back to Serenity

CSS Custom Properties

Base/res/html/misc/custom-properties.html

latest2.3 KB
Original Source

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!