GitXplorerGitXplorer
a

babel-plugin-style-literal

public
8 stars
0 forks
0 issues

Commits

List of commits on branch master.
Verified
94c7eaa1030f17d07b32135bd200ffd9a44a3552

create LICENSE

aalexeyraspopov committed 6 years ago
Unverified
d9ea2e18e62fb127699855ab76cb16885251d673

fix usage section

aalexeyraspopov committed 6 years ago
Verified
4436907860622ac877382c7f509cec4d306241d5

add github workflow

aalexeyraspopov committed 6 years ago
Unverified
83f004d4d882c147521696825f51de492cc82a63

better name

aalexeyraspopov committed 6 years ago
Unverified
55869bf2b60ebe277bf347d56d771a4a198a72ef

update README with installation steps and usage

aalexeyraspopov committed 6 years ago
Unverified
b425a0760c835e271defe2960f0cd3d11fe66ed2

reimplemented the plugin with postcss parsing

aalexeyraspopov committed 6 years ago

README

The README file for this repository.

Babel Plugin Style Literal

This is an experimental plugin that compiles tagged string literals to inline style objects that can be used in JSX components. No runtime needed.

Rationale

This is not a "CSS-in-JS" approach and is not supposed to be one. Even though I heavily use CSS, often I find inline styles useful when prototyping or making data visualization piece which styles are not just presentation aspects, but the content itself.

However, there is some friction present when you need to work with inline styles in JSX. It requires style to be written as an object, with keys camelCased. So when you have some CSS you can copy-paste, you need to do some work to make it look like an object. This is quite unproductive piece of work. And later, when you decide to move those inline styles to a CSS file, an opposite amount of work has to be done.

This plugin aims at removing that unnecessary friction and unlocking complete experience in writing CSS code no matter where you need it.

Usage

  1. Install the plugin
npm install --save-dev babel-plugin-style-literal
  1. Add the plugin to your Babel config
{
  "plugins": ["babel-plugin-style-literal"]
}

In your code, use css as a template tag whenever you need to compile a piece of CSS to object literal. You don't need to import the tag, the plugin will remove it in the build time.

Examples

In:

let textColor = getRandomColor();
let style = css`
  font-size: 12px;
  line-height: 1.5;
  color: ${textColor};
`;
let text = <p style={style}>Hello, World!</p>;

Out:

let textColor = getRandomColor();
let style = {
  fontSize: '12px',
  lineHeight: '1.5',
  color: textColor,
};
let text = <p style={style}>Hello, World!</p>;

License

MIT License.

The implementation is partially based on @blia's css-tag.