styimat 4.1.0 → 4.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -11,12 +11,12 @@
11
11
 
12
12
  ```
13
13
  ├── bin
14
-    └── convert-styimat.js
14
+ └── convert-styimat.js
15
15
  ├── dist
16
-    ├── styimat.js
17
-    ├── styimat.min.js
18
-    ├── styimat.min.mjs
19
-    └── styimat.mjs
16
+ ├── styimat.js
17
+ ├── styimat.min.js
18
+ ├── styimat.min.mjs
19
+ └── styimat.mjs
20
20
  ├── esm // ESModule文件的快捷导入方式
21
21
  ├── umd // UMD文件的快捷导入方式
22
22
  ├── cli // 命令行文件的快捷导入方式
@@ -62,20 +62,20 @@ const css = `
62
62
  .button { background-color: $primary; }
63
63
  `;
64
64
 
65
- const result = styimat.convent(css);
65
+ const result = styimat.convert(css);
66
66
  console.log(result);
67
67
  ```
68
68
 
69
69
  **也可以按需导入**
70
70
 
71
71
  ```javascript
72
- import { convent, apply } from 'https://unpkg.com/styimat/esm'
72
+ import { convert, apply } from 'https://unpkg.com/styimat/esm'
73
73
  const css = `
74
74
  $primary: lab(54.7 77.9 80.1);
75
75
  .button { background-color: $primary; }
76
76
  `;
77
77
 
78
- const result = convent(css);
78
+ const result = convert(css);
79
79
  console.log(result);
80
80
  apply();
81
81
  ```
@@ -87,106 +87,27 @@ apply();
87
87
  - **变量系统** - 类似 Sass 的变量系统,支持作用域变量
88
88
  - **嵌套规则** - 支持 Sass 风格的嵌套选择器
89
89
  - **十六进制语法** - 支持 `lab#LLAABB` 和 `lch#LLCCHHH` 简洁语法
90
- - **增强数学计算** - 支持 `math()`` 函数和复杂数学表达式
90
+ - **增强数学计算** - 支持 `math()` 函数和复杂数学表达式
91
91
  - **轻量高效** - 无依赖,压缩后仅约 20KB
92
92
  - **多种使用方式** - 浏览器、Node.js、命令行均可使用
93
93
  - **灵活API** - 支持函数调用、模板标签、对象配置等多种用法
94
94
  - **现代ESModule导入** - 支持`import`按需导入
95
95
 
96
- ## 快速开始
97
-
98
- ### 浏览器中使用
99
-
100
- ```html
101
- <!-- 在 HTML 中直接使用 -->
102
- <style e>
103
- $primary-color: lab(54.7 77.9 80.1);
104
- $spacing: 1rem;
105
-
106
- .button {
107
- background-color: $primary-color;
108
- padding: $spacing;
109
-
110
- &:hover {
111
- background-color: lab(44.7 67.9 70.1);
112
- }
113
- }
114
- </style>
115
-
116
- <script src="https://cdn.jsdelivr.net/npm/styimat/styimat.min.js"></script>
117
- ```
118
-
119
- ### Node.js 中使用
120
-
121
- ```javascript
122
- const styimat = require('styimat');
123
-
124
- const css = `
125
- $primary: lab(54.7 77.9 80.1);
126
- .button { background-color: $primary; }
127
- `;
128
-
129
- const result = styimat.convert(css);
130
- console.log(result);
131
- ```
132
-
133
- ### AMD中使用
134
- ```javascript
135
- // scripts/main.js
136
- require.config({
137
- paths: {
138
- 'styimat': 'https://cdn.jsdelivr.net/npm/styimat/styimat.min'
139
- }
140
- });
141
-
142
- require(['styimat'], function(styimat) {
143
- // 主应用代码
144
- styimat.apply(`
145
- $primary: lab(50 20 -10);
146
- body { color: $primary; }
147
- `);
148
- });
149
- ```
150
-
151
- ### 命令行使用
152
-
153
- ```bash
154
- # 基本用法
155
- npx styimat input.css output.css
156
-
157
- # 输出到 stdout
158
- npx styimat input.css
159
-
160
- # 使用管道
161
- npx styimat < input.css > output.css
162
- cat input.css | npx styimat > output.css
163
-
164
- # 从 stdin 读取,输出到 stdout
165
- npx styimat
166
-
167
- # 全局安装后使用
168
- npm install -g styimat
169
- styimat input.css output.css
170
- ```
171
-
172
- **更多使用方法请 `npx styimat -h`**
173
-
174
- ## 高级用法
175
-
176
- **重要!如果用了import语法一定加上await,没用可以不加,但是加上了一直不错!**
96
+ ---
177
97
 
178
- ### 1. 作为函数直接调用
98
+ ## 使用方法
179
99
 
180
- `styimat` 本身是一个可调用的函数,支持多种调用方式:
100
+ ### 一、JavaScript调用
181
101
 
102
+ #### 1. 作为函数调用
182
103
  ```javascript
183
104
  // 方式1:直接传入CSS字符串
184
- const css1 = await styimat(`
105
+ const css = await styimat(`
185
106
  $primary: lab(54.7 77.9 80.1);
186
107
  .button { color: $primary; }
187
108
  `);
188
109
 
189
- // 方式2:传入配置对象(返回函数本身,可以链式调用)
110
+ // 方式2:传入配置对象(返回函数本身)
190
111
  styimat({
191
112
  enableP3: true,
192
113
  enableMath: true,
@@ -197,10 +118,7 @@ styimat({
197
118
  styimat();
198
119
  ```
199
120
 
200
- ### 2. 作为模板标签使用
201
-
202
- `styimat` 可以作为ES6模板字符串的标签函数,提供更简洁的语法:
203
-
121
+ #### 2. 作为模板标签使用
204
122
  ```javascript
205
123
  // 基本模板标签用法
206
124
  const css = await styimat`
@@ -220,33 +138,18 @@ const css = await styimat`
220
138
  // 模板标签支持插值
221
139
  const theme = 'dark';
222
140
  const cssWithVars = await styimat`
223
- $primary: ${theme === 'dark' ? 'lab(30 40 50)' : 'lab(70 20 -10)'};
141
+ $primary: \${theme === 'dark' ? 'lab(30 40 50)' : 'lab(70 20 -10)'};
224
142
 
225
143
  body {
226
144
  background: $primary;
227
145
  }
228
146
  `;
229
-
230
- // 复杂的插值示例
231
- const spacing = 1.5;
232
- const cssComplex = await styimat`
233
- $base-spacing: ${spacing}rem;
234
- $large-spacing: math(${spacing} * 2);
235
-
236
- .container {
237
- padding: $base-spacing;
238
- margin: $large-spacing;
239
- }
240
- `;
241
147
  ```
242
148
 
243
- ### 3. 作为对象方法调用
244
-
245
- 除了函数调用,`styimat` 还提供了对象方法:
246
-
149
+ #### 3. 对象方法调用
247
150
  ```javascript
248
151
  // 1. 转换CSS
249
- const converted = await styimat.convert(cssString, config);
152
+ const converted = await styimat.convert(cssString, config);
250
153
 
251
154
  // 2. 应用到页面
252
155
  const styleElement = styimat.apply(cssString, config);
@@ -263,9 +166,7 @@ const mathResult = styimat.math.evaluate('100px / 2'); // "50px"
263
166
  const rgbColor = styimat.colorUtils.labToRGB(54.7, 77.9, 80.1);
264
167
  ```
265
168
 
266
- ### 4. HTMLElement的新方法
267
- HTMLElement由此库新增了`cssVar`属性,可以设置、获取css变量
268
-
169
+ #### 4. HTMLElement新增方法
269
170
  ```javascript
270
171
  ele.cssVar(prop, value); // 设置prop变量为value
271
172
  ele.cssVar.prop = value; // 设置prop变量为value
@@ -275,8 +176,7 @@ ele.cssVar.prop; // 获取prop变量的值
275
176
  ele.cssVar[prop] // 获取prop变量的值
276
177
  ```
277
178
 
278
- ### 4. 混合使用示例
279
-
179
+ #### 5. 混合使用示例
280
180
  ```javascript
281
181
  // 先配置,然后使用模板标签
282
182
  styimat.config({ enableP3: true });
@@ -302,10 +202,32 @@ const designSystem = await styimat`
302
202
  styimat.apply(designSystem);
303
203
  ```
304
204
 
305
- ## 语法指南
205
+ ### 二、命令行使用
206
+
207
+ ```bash
208
+ # 基本用法
209
+ npx styimat input.css output.css
210
+
211
+ # 输出到 stdout
212
+ npx styimat input.css
213
+
214
+ # 使用管道
215
+ npx styimat < input.css > output.css
216
+ cat input.css | npx styimat > output.css
217
+
218
+ # 从 stdin 读取,输出到 stdout
219
+ npx styimat
220
+
221
+ # 全局安装后使用
222
+ npm install -g styimat
223
+ styimat input.css output.css
224
+ ```
225
+
226
+ **更多使用方法请 `npx styimat -h`**
306
227
 
307
- ### 变量定义
228
+ ### 三、Styimat语法
308
229
 
230
+ #### 1. 变量定义
309
231
  ```css
310
232
  /* 全局变量 */
311
233
  $primary-color: lab(54.7 77.9 80.1);
@@ -323,12 +245,16 @@ $font-family: 'Inter', sans-serif;
323
245
  }
324
246
  ```
325
247
 
326
- ### 导入语法
327
-
328
- #### 您可以在CSS文件的开头使用导入文件来导入其他css文件,应该以`@import开头`:
329
-
248
+ #### 2. 配置头语法
330
249
  ```css
331
- @import yourcss.css;
250
+ #indent-size 4
251
+ #auto-process-style-tags true
252
+ #preserve-original true
253
+ #enable-p3 false
254
+ #root-selector :root
255
+ #enable-nesting true
256
+ #enable-math true
257
+ #math-precision 8
332
258
 
333
259
  /* 然后写您的CSS代码 */
334
260
  $primary-color: lab#32a852;
@@ -344,59 +270,52 @@ body {
344
270
  }
345
271
  ```
346
272
 
347
- #### 还可以使用style语法:
348
- ```html
349
- <!--这样就自动处理好了-->
350
- <style src="head.css" e></style>
351
- ```
352
-
353
- ### 别名语法
354
-
355
- #### 您可以在CSS文件的开头使用别名来让css属性名更简单,应该以`@alias开头`:
273
+ **注意**:配置头既支持驼峰命名也支持连字符命名,例如 `indent-size` 和 `indentSize` 效果相同。
356
274
 
275
+ #### 3. 导入语法
357
276
  ```css
358
- @alias bg background-color;
277
+ @import yourcss.css;
359
278
 
360
279
  /* 然后写您的CSS代码 */
361
280
  $primary-color: lab#32a852;
281
+ $spacing: math(16px * 2 + 4px);
362
282
 
363
283
  body {
364
- bg: $primary-color;
284
+ color: $primary-color;
285
+ padding: $spacing;
286
+
287
+ .container {
288
+ margin: math($spacing / 2);
289
+ }
365
290
  }
366
291
  ```
367
292
 
368
- ### 配置头语法
369
-
370
- 您可以在CSS文件的开头使用配置头来设置预处理选项,配置行以 `#` 开头:
371
-
293
+ #### 4. 别名语法
372
294
  ```css
373
- #indent-size 4
374
- #auto-process-style-tags true
375
- #preserve-original true
376
- #enable-p3 false
377
- #root-selector :root
378
- #enable-nesting true
379
- #enable-math true
380
- #math-precision 8
295
+ @alias bg background-color;
381
296
 
382
297
  /* 然后写您的CSS代码 */
383
298
  $primary-color: lab#32a852;
384
- $spacing: math(16px * 2 + 4px);
385
299
 
386
300
  body {
387
- color: $primary-color;
388
- padding: $spacing;
389
-
390
- .container {
391
- margin: math($spacing / 2);
392
- }
301
+ bg: $primary-color;
393
302
  }
394
303
  ```
395
304
 
396
- **注意**:配置头既支持驼峰命名也支持连字符命名,例如 `indent-size` 和 `indentSize` 效果相同。
305
+ #### 5. 宏语法
306
+ ```css
307
+ @macro grid($columns, $gap: 10px) {
308
+ display: grid;
309
+ grid-template-columns: repeat($columns, 1fr);
310
+ gap: $gap;
311
+ }
397
312
 
398
- ### Math 计算语法
313
+ .container {
314
+ @grid(3, 20px);
315
+ }
316
+ ```
399
317
 
318
+ #### 6. Math计算语法
400
319
  ```css
401
320
  /* math() 函数 */
402
321
  .element {
@@ -413,8 +332,7 @@ body {
413
332
  }
414
333
  ```
415
334
 
416
- ### Lab 颜色语法
417
-
335
+ #### 7. Lab颜色语法
418
336
  ```css
419
337
  /* 标准 lab() 函数 */
420
338
  .element {
@@ -428,8 +346,7 @@ body {
428
346
  }
429
347
  ```
430
348
 
431
- ### LCH 颜色语法
432
-
349
+ #### 8. LCH颜色语法
433
350
  ```css
434
351
  /* 标准 lch() 函数 */
435
352
  .element {
@@ -443,32 +360,7 @@ body {
443
360
  }
444
361
  ```
445
362
 
446
- ## 十六进制颜色语法详解
447
-
448
- ### Lab 十六进制格式:`lab#LLAABB`
449
- Lab 颜色使用 `lab#`` 前缀,后跟 6 个十六进制字符:
450
- - 前 2 位:L(明度),范围 00-FF,映射到 0-100
451
- - 中间 2 位:A(红绿轴),范围 00-FF,映射到 -192 到 192
452
- - 后 2 位:B(黄蓝轴),范围 00-FF,映射到 -192 到 192
453
-
454
- 示例:`lab#8CFF80` 表示:
455
- - L = 0x8C = 140 → 140/255 × 100 ≈ 55
456
- - A = 0xFF = 255 → (255-128) × 1.5 ≈ 190.5
457
- - B = 0x80 = 128 → (128-128) × 1.5 = 0
458
-
459
- ### LCH 十六进制格式:`lch#LLCCHHH`
460
- LCH 颜色使用 `lch#`` 前缀,后跟 6 个字符(最后1-3位是十进制色相值):
461
- - 前 2 位:L(明度),范围 00-FF,映射到 0-100
462
- - 中间 2 位:C(色度),范围 00-FF,映射到 0-150
463
- - 后 1-3 位:H(色相),范围 0-100,映射到 0-360度
464
-
465
- 示例:`lch#8CFF090` 表示:
466
- - L = 0x8C = 140 → 140/255 × 100 ≈ 55
467
- - C = 0xFF = 255 → 255/255 × 150 = 150
468
- - H = 090 → 090/100 × 360 = 324度
469
-
470
- ### 嵌套规则
471
-
363
+ #### 9. 嵌套规则
472
364
  ```css
473
365
  /* Sass 风格的嵌套 */
474
366
  .container {
@@ -494,8 +386,7 @@ LCH 颜色使用 `lch#`` 前缀,后跟 6 个字符(最后1-3位是十进制
494
386
  }
495
387
  ```
496
388
 
497
- ### 嵌套变量
498
-
389
+ #### 10. 嵌套变量
499
390
  ```css
500
391
  /* 变量可以引用其他变量 */
501
392
  $base-color: lab(54.7 77.9 80.1);
@@ -510,7 +401,9 @@ $padding-large: math(2rem * 1.5);
510
401
  }
511
402
  ```
512
403
 
513
- ## API 文档
404
+ ---
405
+
406
+ ## API文档
514
407
 
515
408
  ### JavaScript API
516
409
 
@@ -532,7 +425,7 @@ styimat.config({
532
425
  enableP3: true,
533
426
  enableMath: true,
534
427
  mathPrecision: 6,
535
- indentSize: 2,
428
+ indentSize: 4,
536
429
  enableNesting: true,
537
430
  importBaseUrl: '', // 导入基础URL
538
431
  importCache: true, // 缓存导入文件
@@ -566,8 +459,8 @@ styimat.imports.setTimeout(10000); // 设置导入超时时间
566
459
  | 选项 | 类型 | 默认值 | 描述 |
567
460
  |------|------|--------|------|
568
461
  | `rootSelector` | string | `:root` | CSS 变量定义的根选择器 |
569
- | `variablePrefix` | string | `--`` | CSS 变量前缀 |
570
- | `preserveOriginal` | boolean | `false` | 是否保留原始 `<style e>`` 标签 |
462
+ | `variablePrefix` | string | `--` | CSS 变量前缀 |
463
+ | `preserveOriginal` | boolean | `false` | 是否保留原始 `<style e>` 标签 |
571
464
  | `indentSize` | number | `4` | 嵌套规则的缩进大小 |
572
465
  | `enableNesting` | boolean | `true` | 是否启用嵌套规则 |
573
466
  | `autoProcessStyleTags` | boolean | `true` | 是否自动处理页面中的 style 标签 |
@@ -575,16 +468,43 @@ styimat.imports.setTimeout(10000); // 设置导入超时时间
575
468
  | `convertLabToRGB` | boolean | `true` | 是否转换 Lab 颜色为 RGB |
576
469
  | `convertLchToRGB` | boolean | `true` | 是否转换 LCH 颜色为 RGB |
577
470
  | `enableP3` | boolean | `true` | 是否启用 Display P3 广色域支持 |
578
- | `enableMath` | boolean | `true` | 是否启用 `math()`` 函数增强 |
471
+ | `enableMath` | boolean | `true` | 是否启用 `math()` 函数增强 |
579
472
  | `mathPrecision` | number | `6` | 数学计算的精度 |
580
- | `importBaseUrl` | string | `` | 导入的基础URL |
473
+ | `importBaseUrl` | string | ` | 导入的基础URL |
581
474
  | `importCache` | boolean | `true` | 是否缓存导入的文件 |
582
475
  | `importTimeout` | number | `5000` | 导入超时时间(毫秒) |
583
476
 
477
+ ---
478
+
479
+ ## 十六进制颜色语法详解
480
+
481
+ ### Lab 十六进制格式:`lab#LLAABB`
482
+ Lab 颜色使用 `lab#` 前缀,后跟 6 个十六进制字符:
483
+ - 前 2 位:L(明度),范围 00-FF,映射到 0-100
484
+ - 中间 2 位:A(红绿轴),范围 00-FF,映射到 -192 到 192
485
+ - 后 2 位:B(黄蓝轴),范围 00-FF,映射到 -192 到 192
486
+
487
+ 示例:`lab#8CFF80` 表示:
488
+ - L = 0x8C = 140 → 140/255 × 100 ≈ 55
489
+ - A = 0xFF = 255 → (255-128) × 1.5 ≈ 190.5
490
+ - B = 0x80 = 128 → (128-128) × 1.5 = 0
491
+
492
+ ### LCH 十六进制格式:`lch#LLCCHHH`
493
+ LCH 颜色使用 `lch#` 前缀,后跟 6 个字符(最后1-3位是十进制色相值):
494
+ - 前 2 位:L(明度),范围 00-FF,映射到 0-100
495
+ - 中间 2 位:C(色度),范围 00-FF,映射到 0-150
496
+ - 后 1-3 位:H(色相),范围 0-100,映射到 0-360度
497
+
498
+ 示例:`lch#8CFF090` 表示:
499
+ - L = 0x8C = 140 → 140/255 × 100 ≈ 55
500
+ - C = 0xFF = 255 → 255/255 × 150 = 150
501
+ - H = 090 → 090/100 × 360 = 324度
502
+
503
+ ---
504
+
584
505
  ## 示例
585
506
 
586
507
  ### 完整示例
587
-
588
508
  ```css
589
509
  /* 定义颜色变量 */
590
510
  $brand-primary: lab(54.7 77.9 80.1);
@@ -625,7 +545,6 @@ $border-radius: 0.5rem;
625
545
  ```
626
546
 
627
547
  ### 颜色混合示例
628
-
629
548
  ```css
630
549
  /* 使用十六进制语法创建调色板 */
631
550
  $primary: lab#8CFF80;
@@ -651,7 +570,6 @@ $primary-transparent: lab(55 190 0 / 0.8);
651
570
  ```
652
571
 
653
572
  ### Math() 函数高级示例
654
-
655
573
  ```css
656
574
  /* 复杂数学计算 */
657
575
  .grid {
@@ -677,6 +595,30 @@ $primary-transparent: lab(55 190 0 / 0.8);
677
595
  }
678
596
  ```
679
597
 
598
+ ## 浏览器兼容性
599
+
600
+ | 特性 | Chrome | Firefox | Safari | Edge |
601
+ |------|--------|---------|---------|------|
602
+ | CSS变量 | 49+ | 31+ | 9.1+ | 16+ |
603
+ | Display P3 | 111+ | 113+ | 16.4+ | 111+ |
604
+ | 嵌套规则 | 112+ | 117+ | 16.4+ | 112+ |
605
+ | Lab/LCH颜色 | 通过转换 | 通过转换 | 通过转换 | 通过转换 |
606
+
607
+ > 注意:Styimat会自动为不支持的浏览器提供降级方案
608
+
609
+ ## 常见问题
610
+
611
+ ### Q: 使用Styimat会影响页面加载性能吗?
612
+ A: Styimat非常轻量,压缩后仅约20KB。对于大多数项目,性能影响可以忽略不计。
613
+
614
+ ### Q: 如何从Sass/Less迁移到Styimat?
615
+ A: 大多数Sass/Less语法可以直接使用。主要区别是Styimat使用`$`前缀定义变量,且原生支持CSS变量。
616
+
617
+ ### Q: 生产环境中应该如何处理?
618
+ A: 建议在构建时使用命令行工具预处理CSS,而不是在浏览器中实时转换。
619
+
620
+ ---
621
+
680
622
  ## Git 仓库
681
623
 
682
624
  - **主仓库**: [https://gitee.com/wxy6987/styimat](https://gitee.com/wxy6987/styimat)