JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 1596603
  • Score
    100M100P100Q227664F
  • License MIT-0

Use the light-dark() color function in CSS

Package Exports

  • @csstools/postcss-light-dark-function

Readme

PostCSS Light Dark Function PostCSS Logo

npm version Build Status Discord

Baseline Status CSS Standard Status

npm install @csstools/postcss-light-dark-function --save-dev

PostCSS Light Dark Function lets you use the light-dark color function in CSS, following the CSS Color 5 Specification.

.dark {
    color-scheme: dark;
}

.light {
    color-scheme: light;
}

.theme {
    color: light-dark(pink, magenta);
}

.prop {
    --theme-color: light-dark(cyan, deepskyblue);
}

/* becomes */

.dark {
    --csstools-color-scheme--light:  ;
    --csstools-color-scheme--dark: initial;
    color-scheme: dark;
}

.light {
    --csstools-color-scheme--light: initial;
    --csstools-color-scheme--dark:  ;
    color-scheme: light;
}

.theme {
    color: var(--csstools-color-scheme--light, pink) var(--csstools-color-scheme--dark, magenta);
    color: light-dark(pink, magenta);
}

.prop {
    --theme-color: var(--csstools-color-scheme--light, cyan) var(--csstools-color-scheme--dark, deepskyblue);
    & * {
    --theme-color: var(--csstools-color-scheme--light, cyan) var(--csstools-color-scheme--dark, deepskyblue);
    }
}

@supports (color: light-dark(red, red)) {
.prop {
    --theme-color: light-dark(cyan, deepskyblue);
}
}

:root {
    --csstools-color-scheme--light: initial;
    --csstools-color-scheme--dark:  ;
}

@media (prefers-color-scheme: dark) {

    :root {
        --csstools-color-scheme--light:  ;
        --csstools-color-scheme--dark: initial;
    }
}

Usage

Add PostCSS Light Dark Function to your project:

npm install postcss @csstools/postcss-light-dark-function --save-dev

Use it as a PostCSS plugin:

const postcss = require('postcss');
const postcssLightDarkFunction = require('@csstools/postcss-light-dark-function');

postcss([
    postcssLightDarkFunction(/* pluginOptions */)
]).process(YOUR_CSS /*, processOptions */);

PostCSS Light Dark Function runs in all Node environments, with special instructions for:

Options

preserve

The preserve option determines whether the original notation is preserved. By default, it is preserved.

postcssLightDarkFunction({ preserve: false })
.dark {
    color-scheme: dark;
}

.light {
    color-scheme: light;
}

.theme {
    color: light-dark(pink, magenta);
}

.prop {
    --theme-color: light-dark(cyan, deepskyblue);
}

/* becomes */

.dark {
    --csstools-color-scheme--light:  ;
    --csstools-color-scheme--dark: initial;
    color-scheme: dark;
}

.light {
    --csstools-color-scheme--light: initial;
    --csstools-color-scheme--dark:  ;
    color-scheme: light;
}

.theme {
    color: var(--csstools-color-scheme--light, pink) var(--csstools-color-scheme--dark, magenta);
}

.prop {
    --theme-color: var(--csstools-color-scheme--light, cyan) var(--csstools-color-scheme--dark, deepskyblue);
    & * {
    --theme-color: var(--csstools-color-scheme--light, cyan) var(--csstools-color-scheme--dark, deepskyblue);
    }
}

:root {
    --csstools-color-scheme--light: initial;
    --csstools-color-scheme--dark:  ;
}

@media (prefers-color-scheme: dark) {

    :root {
        --csstools-color-scheme--light:  ;
        --csstools-color-scheme--dark: initial;
    }
}

enableProgressiveCustomProperties

The enableProgressiveCustomProperties option determines whether the original notation is wrapped with @supports when used in Custom Properties. By default, it is enabled.

[!NOTE] We only recommend disabling this when you set preserve to false or if you bring your own fix for Custom Properties.
See what the plugin does in its README.

postcssLightDarkFunction({ enableProgressiveCustomProperties: false })