csslibify
这是一个库化CSS样式的工具
目的
- 方便的使用已有样式,建立样式库
- 按需取得相关样式 (样式会被拆解,需另行用工具合并优化)
- 避免样式类名冲突
功能
- 创建样式库,可指定包名(命名空间)
- 把CSS或CSS文件导入到样式库(样式将被拆解)
- 样式库可多次导入不同CSS(自动去除重复)
- 样式库导入时自动复制CSS中的url资源
- 按需取样式,支持类名条件
- 按需取样式,支持自定义类名和动画名的修改
- 按需取样式,支持标签名条件
- 按需取样式,支持选项条件atpage取打印样式
- 按需取样式,指定标签名条件时自动取得不含标签名和类名选择器的通配符样式
Install
npm i csslibify
API
- csslibify(pkgname) - 创建指定包名(命名空间)的样式库
pkgname - 包名 (默认用于类名前缀,指定时需自行注意正确性) - csslib.imp(cssOrFile, opts) - 把CSS或CSS文件导入到样式库
cssOrFile - 样式文件或内容 (必须输入)
opts.basePath - 样式所在目录 (文件时默认为文件所在目录,内容时默认当前目录)
opts.assetsPath - 修改后的url资源目录 (默认复制资源后使用相同路径即url中无目录) - csslib.get(...args) - 按需取样式
args - 字符串或选项对象,参数顺序无关
字符串时,以.
开头的视为类名条件,否则视为标签名条件
选项对象时,opts.rename - 类名修改函数(第一参数为包名,第二参数为不含.
的类名,返回新类名),默认为${pkg}---{classname}
选项对象时,opts.atpage - 是否包含@page样式,默认false
选项对象时,opts.atviewport - 是否包含@viewport样式,默认false
选项对象时,opts.strict - 是否严格匹配,默认true。(非严格匹配时任意一个标签或类名属于被查询范围,就按匹配成功处理)
选项对象时,opts.universal - 是否包含通用样式(不含类名和标签名的通用样式,如通配符选择器属性选择器等),默认false - csslib.has(classname) - 判断样式库中是否有指定样式类名
Sample
let csslibify = ;let csslib = ;csslib;csslib;csslib;csslib;let css = csslib;//=> .thepkg---baz{size:13} css = csslib;//=> .thepkg---foo{size:11} .thepkg---bar{size:12} .thepkg---foo > .thepkg---bar{color:red} css = csslib;//=> .thepkg---foo{size:11} .thepkg---bar{size:12} .thepkg---foo > .thepkg---bar{color:red} div{color:red} css = csslib;//=> .thepkg---foo{size:11} .thepkg---bar{size:12} .thepkg---foo > .thepkg---bar{color:red} div{color:red} *{size:16}
结果示例(详细参考测试例子)
01 新建样式库并指定库名,可有效避免类名冲突,也便于复用
let csslibify = ;let csslib = ;csslib;csslib; let result = csslib; /*// result: .pkg---foo{size:1}.pkg---bar{size:2}*/
02 新建样式库不指定库名,便于直接使用样式
let csslibify = ;let csslib = ;csslib;csslib; let result = csslib; /*// result: .foo{size:1}.bar{size:2}*/
03 自动识别重复导入
let csslibify = ;let csslib = ;csslib;csslib;csslib; let result = csslib; /*// result: .foo{size:1}*/
04 样式类按需引用-例子1
let csslibify = ;let csslib = ;csslib;csslib;csslib; let result = csslib; /*// result: .baz{size:3}*/
05 样式类按需引用-例子2
let csslibify = ;let csslib = ;csslib;csslib;csslib; let result = csslib; /*// result: .baz{size:3}*/
06 样式类按需引用-例子3
let csslibify = ;let csslib = ;csslib;csslib;csslib; let result = csslib; /*// result: .bar .baz{size:2}.baz{size:3}*/
07 样式类按需引用(含not条件)-例子1
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: .pkg---foo{size:1}.pkg---foo:not(.pkg---bar){size:3}*/
08 样式类按需引用(含not条件)-例子2
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: .pkg---bar{size:2}*/
09 样式类按需引用(含not条件)-例子3
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: .pkg---foo{size:1}.pkg---bar{size:2}.pkg---foo:not(.pkg---bar){size:3}*/
10 多选择器自动拆分引用-例子1
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: .pkg---foo{size:1}*/
11 多选择器自动拆分引用-例子2
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: .pkg---foo{size:1}.pkg---bar{size:1}.pkg---bar{color:red}*/
12 多选择器自动拆分引用(@media)-例子1
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: @media (min-width: 768px) { .pkg---foo{margin: 0} }*/
13 多选择器自动拆分引用(@media)-例子2
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: @media (min-width: 768px) { .pkg---foo{margin: 0} }@media (min-width: 768px) { .pkg---bar{margin: 0} }*/
14 含动画keyframes时动画名一起修改-例子1
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: .pkg---bar{animation:pkg---foo 5s}@keyframes pkg---foo{ 0% {background:red} to {background:yellow}}*/
15 含动画keyframes时动画名一起修改-例子2
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: .pkg---bar{ animation:pkg---foo; animation-duration: 5s}.pkg---baz{size:14}@keyframes pkg---foo{ 0% {background:red} to {background:yellow}}*/
16 含动画keyframes时动画名一起修改-例子3
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: @keyframes pkg---foo{ 0% {background:red} to {background:yellow}}@media (min-width: 768px) { .pkg---bar{animation:pkg---foo 5s}}*/
17 含动画keyframes时动画名一起修改-例子4
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: .pkg---baz{size:14}@keyframes pkg---foo{ 0% {background:red} to {background:yellow}}@media (min-width: 768px) { .pkg---bar{ animation:pkg---foo; animation-duration: 5s }}*/
18 含动画keyframes,用不到则不会取动画样式
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: .pkg---baz{size:14}*/
19 含动画keyframes,@supports嵌套规则使用动画
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: @keyframes pkg---foo { 0% {background: red} to {background: yellow}}@supports (position: sticky) { .pkg---bar{animation:pkg---foo 5s}}*/
20 自定义修改类名
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: .foo-----pkg{size:1}*/
21 指定标签名按需引用样式-例子1
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: a{size:1}*/
22 指定标签名按需引用样式@media-例子2
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result:(blank) */
23 指定标签名按需引用样式-例子3
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result:(blank) */
24 同时指定类名标签名按需引用样式-例子1
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: .pkg---foo div{size:2}*/
25 同时指定类名标签名按需引用样式-例子2
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: @media (min-width: 768px) { .pkg---foo div{size:2} }*/
26 自动引用@font-face样式
let csslibify = ;let csslib = ;csslib; let result = csslib; /*// result: (注:实际url资源会被复制并哈希化文件名,默认路径改为资源文件的绝对路径) .pkg---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 = ;let csslib = ;csslib; let result = csslib; /*// result: * {box-sizing: border-box;}[title]{color:red}article { display: block; }*/
Links
npm-packages
https://github.com/gotoeasy/npm-packages