Edit This Page

Using Seamstress with CSS Modules

Example code: examples/css-modules

CSS modules fit very naturally with Seamstress.

/* MyComponent.css */

.base {
  color: cyan;
}

.expanded {
  color: magenta;
}

@media only screen and (max-width: 800px) {
  .base {
    color: yellow;
  }

  .expanded {
    color: black;
  }
}
// MyComponent.js

import classes from './MyComponent.css';

// ...

<Component styles={{
  ':base': classes.base,
  ':expanded': classes.expanded,
}} />

The mapping from :selector to classes.selector is a little tedious, but could easily be automated with a simple helper function:

function stylize (classes) {
  return Object.keys(classes).reduce((styles, className) => {
    styles[':' + className] = classes[className];
    return styles;
  }, {});
}

import classes from './MyComponent.css';

<Component styles={stylize(classes)} />

Using composes

Note that we aren't using composes in our example, since Seamstress composes classNames for us automatically. However, composes combined with Seamstress shouldn't break anything, since it would simply result in duplicate class names that could automatically be removed.