这是一个库化CSS样式的工具
- [x] 方便的建立样式库
- [x] 按需取得相关样式 (样式会被拆解,需另行用工具合并优化)
- [x] 避免样式类名冲突
- [x] 创建样式库,可指定包名(命名空间)
- [x] 把CSS或CSS文件导入到样式库(样式将被拆解)
- [x] 样式库可多次导入不同CSS(自动去除重复)
- [x] 样式库导入时自动复制CSS中的url资源
- [x] 按需取样式,支持类名条件
- [x] 按需取样式,支持自定义类名和动画名的修改
- [x] 按需取样式,支持标签名条件
- [x] 按需取样式,支持选项条件atpage取打印样式
- [x] 按需取样式,指定标签名条件时自动取得不含标签名和类名选择器的通配符样式
npm i csslibify
- [x] csslibify(pkgname) - 创建指定包名(命名空间)的样式库
- [x] csslib.imp(cssOrFile, opts) - 把CSS或CSS文件导入到样式库
- [x] csslib.get(...args) - 按需取样式
let csslibify = require('csslibify');
let csslib = csslibify('thepkg');
csslib.imp('.foo{size:11} .bar{size:12} .foo > .bar{color:red}');
csslib.imp('.baz{size:13}');
let css = csslib.get('.bar', '.baz');
//=> .thepkg---bar{size:12} .thepkg---baz{size:13}
css = csslib.get('.foo', '.bar');
//=> .thepkg---foo{size:11} .thepkg---bar{size:12} .thepkg---foo > .thepkg---bar{color:red}
01 新建样式库并指定库名,可有效避免类名冲突,也便于复用
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp('.foo{size:1}');
csslib.imp('.bar{size:2}');
let result = csslib.get( '.foo', '.bar' );
/*
// result:
.pkg---bar{size:2}
.pkg---foo{size:1}
*/
02 新建样式库不指定库名,便于直接使用样式
let csslibify = require('csslibify');
let csslib = csslibify();
csslib.imp('.foo{size:1}');
csslib.imp('.bar{size:2}');
let result = csslib.get( '.foo', '.bar' );
/*
// result:
.bar{size:2}
.foo{size:1}
*/
03 自动识别重复导入
let csslibify = require('csslibify');
let csslib = csslibify();
csslib.imp('.foo{size:1}');
csslib.imp('.foo{size:1}');
csslib.imp('.foo{size:1}');
let result = csslib.get( '.foo' );
/*
// result:
.foo{size:1}
*/
04 样式类按需引用-例子1
let csslibify = require('csslibify');
let csslib = csslibify();
csslib.imp('.foo{size:1}');
csslib.imp('.bar{size:2}');
csslib.imp('.baz{size:3}');
let result = csslib.get( '.baz' );
/*
// result:
.baz{size:3}
*/
05 样式类按需引用-例子2
let csslibify = require('csslibify');
let csslib = csslibify();
csslib.imp('.foo{size:1}');
csslib.imp('.bar .baz{size:2}');
csslib.imp('.baz{size:3}');
let result = csslib.get( '.baz' );
/*
// result:
.baz{size:3}
*/
06 样式类按需引用-例子3
let csslibify = require('csslibify');
let csslib = csslibify();
csslib.imp('.foo{size:1}');
csslib.imp('.bar .baz{size:2}');
csslib.imp('.baz{size:3}');
let result = csslib.get( '.bar', '.baz' );
/*
// result:
.bar .baz{size:2}
.baz{size:3}
*/
07 样式类按需引用(含not条件)-例子1
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp('.foo{size:1} .bar{size:2} .foo:not(.bar){size:3}');
let result = csslib.get( '.foo' );
/*
// result:
.pkg---foo{size:1}
.pkg---foo:not(.pkg---bar){size:3}
*/
08 样式类按需引用(含not条件)-例子2
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp('.foo{size:1} .bar{size:2} .foo:not(.bar){size:3}');
let result = csslib.get( '.bar' );
/*
// result:
.pkg---bar{size:2}
*/
09 样式类按需引用(含not条件)-例子3
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp('.foo{size:1} .bar{size:2} .foo:not(.bar){size:3}');
let result = csslib.get( '.foo', '.bar' );
/*
// result:
.pkg---foo{size:1}
.pkg---bar{size:2}
.pkg---foo:not(.pkg---bar){size:3}
*/
10 多选择器自动拆分引用-例子1
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp('.foo,.bar{size:1} .bar,.baz{color:red}');
let result = csslib.get( '.foo' );
/*
// result:
.pkg---foo{size:1}
*/
11 多选择器自动拆分引用-例子2
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp('.foo,.bar{size:1} .bar,.baz{color:red}');
let result = csslib.get( '.foo', '.bar' );
/*
// result:
.pkg---bar{size:1}
.pkg---foo{size:1}
.pkg---bar{color:red}
*/
12 多选择器自动拆分引用(@media)-例子1
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp('@media (min-width: 768px) { .foo,.bar{margin: 0} }');
let result = csslib.get( '.foo' );
/*
// result:
@media (min-width: 768px) { .pkg---foo{margin: 0} }
*/
13 多选择器自动拆分引用(@media)-例子2
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp('@media (min-width: 768px) { .foo,.bar{margin: 0} }');
let result = csslib.get( '.foo', '.bar' );
/*
// result:
@media (min-width: 768px) { .pkg---bar{margin: 0} }
@media (min-width: 768px) { .pkg---foo{margin: 0} }
*/
14 含动画keyframes时动画名一起修改-例子1
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp(`
@keyframes foo{
0% {background:red}
to {background:yellow}
}
.bar {
animation:foo 5s;
}
.baz {
size:14;
}
`);
let result = csslib.get( '.bar' );
/*
// result:
.pkg---bar{animation:pkg---foo 5s}
@keyframes pkg---foo{
0% {background:red}
to {background:yellow}
}
*/
15 含动画keyframes时动画名一起修改-例子2
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp(`
@keyframes foo{
0% {background:red}
to {background:yellow}
}
.bar {
animation-name:foo;
animation-duration: 5s;
}
.baz {
size:14;
}
`);
let result = csslib.get( '.bar', '.baz' );
/*
// result:
.pkg---bar{
animation:pkg---foo;
animation-duration: 5s
}
@keyframes pkg---foo{
0% {background:red}
to {background:yellow}
}
.baz{size:14}
*/
16 含动画keyframes时动画名一起修改-例子3
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp(`
@keyframes foo{
0% {background:red}
to {background:yellow}
}
@media (min-width: 768px) {
.bar {
animation:foo 5s;
}
}
.baz {
size:14;
}
`);
let result = csslib.get( '.bar' );
/*
// result:
@media (min-width: 768px) {
.pkg---bar{animation:pkg---foo 5s}
}
@keyframes pkg---foo{
0% {background:red}
to {background:yellow}
}
*/
17 含动画keyframes时动画名一起修改-例子4
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp(`
@keyframes foo{
0% {background:red}
to {background:yellow}
}
@media (min-width: 768px) {
.bar {
animation-name:foo;
animation-duration: 5s;
}
}
.baz {
size:14;
}
`);
let result = csslib.get( '.bar', '.baz' );
/*
// result:
.baz{size:14}
@media (min-width: 768px) {
.pkg---bar{
animation:pkg---foo;
animation-duration: 5s
}
}
@keyframes pkg---foo{
0% {background:red}
to {background:yellow}
}
*/
18 含动画keyframes,用不到则不会取动画样式
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp(`
@keyframes foo{
0% {background:red}
to {background:yellow}
}
.bar {
animation-name:foo;
animation-duration: 5s;
}
.baz {
size:14;
}
`);
let result = csslib.get( '.baz' );
/*
// result:
.baz{size:14}
*/
19 含动画keyframes,@supports嵌套规则使用动画
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp(`
@keyframes foo{
0% {background:red}
to {background:yellow}
}
@supports (position: sticky) {
.bar {
animation:foo 5s;
}
}
.baz {
size:14;
}
`);
let result = csslib.get( '.baz' );
/*
// result:
@supports (position: sticky) {
.pkg---bar{animation:pkg---foo 5s}
}
@keyframes pkg---foo {
0% {background: red}
to {background: yellow}
}
*/
20 自定义修改类名
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp('.foo{size:1}');
let result = csslib.get( '.foo', {rename: (pkg,name) => name + '-----' + pkg} );
/*
// result:
.foo-----pkg{size:1}
*/
21 指定标签名按需引用样式-例子1
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp('a{size:1} .foo div{size:2}');
let result = csslib.get( 'a' );
/*
// result:
a{size:1}
*/
22 指定标签名按需引用样式@media-例子2
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp('@media (min-width: 768px) { a{size:1} .foo div{size:2} }');
let result = csslib.get( 'div' );
/*
// result:(blank)
*/
23 指定标签名按需引用样式-例子3
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp('a{size:1} .foo div{size:2}');
let result = csslib.get( 'div' );
/*
// result:(blank)
*/
24 同时指定类名标签名按需引用样式-例子1
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp('a{size:1} .foo div{size:2}');
let result = csslib.get( 'div', '.foo' );
/*
// result:
.pkg---foo div{size:2}
*/
25 同时指定类名标签名按需引用样式-例子2
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp('@media (min-width: 768px) { a{size:1} .foo div{size:2} }');
let result = csslib.get( 'div', '.foo' );
/*
// result:
@media (min-width: 768px) { .pkg---foo div{size:2} }
*/
26 自动引用@font-face样式
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp(`
@font-face {
font-family: 'Font Awesome 5 Free';
font-style: normal;
font-weight: 900;
font-display: auto;
src: url("../webfonts/fa-solid-900.eot");
src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"),
url("../webfonts/fa-solid-900.woff2") format("woff2"),
url("../webfonts/fa-solid-900.woff") format("woff"),
url("../webfonts/fa-solid-900.ttf") format("truetype"),
url("../webfonts/fa-solid-900.svg#fontawesome") format("svg");
}
.fa,
.fas {
font-family: 'Font Awesome 5 Free';
font-weight: 900;
}
`);
let result = csslib.get( '.fa' );
/*
// result: (注:实际url资源会被复制并哈希化文件名,默认路径改为资源文件的绝对路径)
.fa {
font-family: 'Font Awesome 5 Free';
font-weight: 900;
}
@font-face {
font-family: 'Font Awesome 5 Free';
font-style: normal;
font-weight: 900;
font-display: auto;
src: url("../webfonts/fa-solid-900.eot");
src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"),
url("../webfonts/fa-solid-900.woff2") format("woff2"),
url("../webfonts/fa-solid-900.woff") format("woff"),
url("../webfonts/fa-solid-900.ttf") format("truetype"),
url("../webfonts/fa-solid-900.svg#fontawesome") format("svg");
}
*/
27 指定标签名条件时自动取得不含标签名和类名选择器的通配符样式
let csslibify = require('csslibify');
let csslib = csslibify('pkg');
csslib.imp('article,aside { display: block; } [title]{color:red} * {box-sizing: border-box;}');
let result = csslib.get( 'article' );
/*
// result:
* {box-sizing: border-box;}
[title]{color:red}
article { display: block; }
*/
-
npm-packages
https://github.com/gotoeasy/npm-packages