/modular-css

A streamlined reinterpretation of CSS Modules via CLI, API, Browserify, Rollup, Webpack, or PostCSS

Primary LanguageJavaScriptMIT LicenseMIT

modular-css Build Status Gitter

A streamlined re-interpretation of CSS Modules

Try it

There's an online REPL where you can try out modular-css without needing to install anything!

http://m-css.com

Here's a prefilled version showing some modular-css features.

Features

Composition

.red {
    color: red;
}

.blue {
    composes: red;

    background: blue;
}

/* in the output .blue will be combination of both styles */

Values

@value alert: #F00;

.alert {
    color: alert;
}

/* will output as */

.alert {
    color: #F00;
}

Selector Scoping

.style {
    color: red;
}

:global(.style2) {
    color: blue;
}

/* Will output as */

/* Scoped with unique file-based prefix */
.f5507abd_style {
    color: red;
}

/* Remains unstyled due to :global() pseudo */
.style2 {
    color: blue;
}

Style Overrides

/* input.css */
.input {
    width: 100%;
}

/* fieldset.css */
.fieldset :external(input from "./input.css") {
    width: 50%;
}

More detailed descriptions are available in docs/features.md

Install

JS API

$ npm i modular-css-core

CLI

$ npm i modular-css-cli

Browserify

$ npm i modular-cssify

Rollup

$ npm i modular-css-rollup

Webpack

$ npm i modular-css-webpack

Svelte

$ npm i modular-css-svelte

PostCSS Plugin

$ npm i postcss-modular-css

Globbing API

$ npm i modular-css-glob

Why?

CSS Modules doesn't support the features we need & has bugs blocking our usage. Attempts to fix those bugs have been unsuccessful for a variety of reasons. Thus, a perfect storm of compelling reasons to learn PostCSS was found.

Also because this:

Green pills look gross

Thanks

  • @JoshGalvin for ideas/encouragement to do this silly thing.
  • The CSS modules team for inspiration!