一覧へ戻る
jcmellado/rollup-plugin-postcss-shadow(新しいタブで開きます)
主要言語: JavaScript
Inline CSS styles inside shadow DOM with Rollup and PostCSS
- star 数
- 4
- watcher 数
- 1
- fork 数
- 0
- issue 数
- 0
- 最終更新
- 2017/05/07
主要言語: JavaScript
Inline CSS styles inside shadow DOM with Rollup and PostCSS
Inline CSS styles inside shadow DOM with Rollup and PostCSS.
npm install --save-dev rollup-plugin-postcss-shadow
import cssshadow from 'rollup-plugin-postcss-shadow'; export default { entry: 'src/index.js', plugins: [ cssshadow(), ] }
styles.css
:root { --badge: { /* Custom properties set */ width: 50px; height: 50px; }; --color-gold: #D4AF37; /* Custom property */ --color-silver: #C0C0C0; --color-bronze: #cd7f32; } .badge-gold { @apply --badge; /* Custom properties set reference */ background: var(--color-gold); /* Custom property reference */ } .badge-silver { @apply --badge; background: var(--color-silver); } .badge-bronze { @apply --badge; background: var(--color-bronze); }
component.js
import style from './styles.css'; // CSS import export default class MyComponent extends BaseComponent { render() { // JSX expression renderer to shadow DOM return ([ <style>{style}</style>, // CSS reference <div> <div class='badge-gold'></div> <div class='badge-silver'></div> <div class='badge-bronze'></div> </div>, ]); }
Result (cssnext and cssnano are applied in order get custom properties and @apply working and compress):
var style = ".badge-gold,.badge-silver,.badge-bronze{width:50px;height:50px}.badge-gold{background:#d4af37}.badge-silver{background:#C0C0C0}{background:#cd7f32}"; ... createClass(MyComponent, [{ key: 'render', value: function render() { return [Dom.create( // JSX expression renderer to shadow DOM 'style', null, style // CSS reference ), Dom.create( 'div', null, Dom.create(Badge, { 'class': 'badge-gold' }), Dom.create(Badge, { 'class': 'badge-silver' }), Dom.create(Badge, { 'class': 'badge-bronze' }) )];
Note that CSS is inlined and its classes can be referenced by its original name. This approach is a bit different from css-modules as far we are using shadow DOM and locally scoped styles are not really necessary.
import cssnano from 'cssnano'; import cssnext from 'postcss-cssnext'; import cssshadow from 'rollup-plugin-postcss-shadow'; export default { entry: 'src/index.js', plugins: [ cssshadow({ // File extensions (default [.css]) extensions: ['.css', '.scss'], // PostCSS plugins (default []) plugins: [ cssnext(), cssnano({ autoprefixer: false, }), ], // PostCSS options (default undefined) // syntax: ..., // parser: ..., // stringifier: .., }), ], };
Heavily inspired by rollup-plugin-postcss.