styimat 4.2.0 → 4.3.0
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 +161 -213
- package/bin/cli.js +1 -1
- package/dist/styimat.js +67 -20
- package/dist/styimat.min.js +22 -23
- package/dist/styimat.min.mjs +22 -23
- package/dist/styimat.mjs +68 -21
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
|
|
12
12
|
```
|
|
13
13
|
├── bin
|
|
14
|
-
│
|
|
14
|
+
│ └── convert-styimat.js
|
|
15
15
|
├── dist
|
|
16
|
-
│
|
|
17
|
-
│
|
|
18
|
-
│
|
|
19
|
-
│
|
|
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 // 命令行文件的快捷导入方式
|
|
@@ -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
|
-
|
|
98
|
+
## 使用方法
|
|
179
99
|
|
|
180
|
-
|
|
100
|
+
### JavaScript调用
|
|
181
101
|
|
|
102
|
+
#### 1. 作为函数调用
|
|
182
103
|
```javascript
|
|
183
104
|
// 方式1:直接传入CSS字符串
|
|
184
|
-
const
|
|
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
|
-
|
|
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:
|
|
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
|
-
|
|
244
|
-
|
|
245
|
-
除了函数调用,`styimat` 还提供了对象方法:
|
|
246
|
-
|
|
149
|
+
#### 3. 对象方法调用
|
|
247
150
|
```javascript
|
|
248
151
|
// 1. 转换CSS
|
|
249
|
-
const converted =
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
### 命令行使用
|
|
306
206
|
|
|
307
|
-
|
|
207
|
+
```bash
|
|
208
|
+
# 基本用法
|
|
209
|
+
npx styimat input.css output.css
|
|
308
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`**
|
|
227
|
+
|
|
228
|
+
## Styimat语法
|
|
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
|
-
|
|
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,32 +270,27 @@ body {
|
|
|
344
270
|
}
|
|
345
271
|
```
|
|
346
272
|
|
|
347
|
-
|
|
348
|
-
```html
|
|
349
|
-
<!--这样就自动处理好了-->
|
|
350
|
-
<style src="head.css" e></style>
|
|
351
|
-
```
|
|
352
|
-
|
|
353
|
-
### 宏语法
|
|
354
|
-
|
|
355
|
-
#### 您可以在CSS文件使用宏,应该以`@macro开头`:
|
|
273
|
+
**注意**:配置头既支持驼峰命名也支持连字符命名,例如 `indent-size` 和 `indentSize` 效果相同。
|
|
356
274
|
|
|
275
|
+
### 3. 导入语法
|
|
357
276
|
```css
|
|
358
|
-
@
|
|
359
|
-
display: grid;
|
|
360
|
-
grid-template-columns: repeat($columns, 1fr);
|
|
361
|
-
gap: $gap;
|
|
362
|
-
}
|
|
277
|
+
@import yourcss.css;
|
|
363
278
|
|
|
364
|
-
|
|
365
|
-
|
|
279
|
+
/* 然后写您的CSS代码 */
|
|
280
|
+
$primary-color: lab#32a852;
|
|
281
|
+
$spacing: math(16px * 2 + 4px);
|
|
282
|
+
|
|
283
|
+
body {
|
|
284
|
+
color: $primary-color;
|
|
285
|
+
padding: $spacing;
|
|
286
|
+
|
|
287
|
+
.container {
|
|
288
|
+
margin: math($spacing / 2);
|
|
289
|
+
}
|
|
366
290
|
}
|
|
367
291
|
```
|
|
368
292
|
|
|
369
|
-
### 别名语法
|
|
370
|
-
|
|
371
|
-
#### 您可以在CSS文件的开头使用别名来让css属性名更简单,应该以`@alias开头`:
|
|
372
|
-
|
|
293
|
+
### 4. 别名语法
|
|
373
294
|
```css
|
|
374
295
|
@alias bg background-color;
|
|
375
296
|
|
|
@@ -381,38 +302,22 @@ body {
|
|
|
381
302
|
}
|
|
382
303
|
```
|
|
383
304
|
|
|
384
|
-
###
|
|
385
|
-
|
|
386
|
-
您可以在CSS文件的开头使用配置头来设置预处理选项,配置行以 `#` 开头:
|
|
387
|
-
|
|
305
|
+
### 5. 宏语法
|
|
388
306
|
```css
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
#enable-nesting true
|
|
395
|
-
#enable-math true
|
|
396
|
-
#math-precision 8
|
|
397
|
-
|
|
398
|
-
/* 然后写您的CSS代码 */
|
|
399
|
-
$primary-color: lab#32a852;
|
|
400
|
-
$spacing: math(16px * 2 + 4px);
|
|
307
|
+
@macro grid($columns, $gap: 10px) {
|
|
308
|
+
display: grid;
|
|
309
|
+
grid-template-columns: repeat($columns, 1fr);
|
|
310
|
+
gap: $gap;
|
|
311
|
+
}
|
|
401
312
|
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
.container {
|
|
407
|
-
margin: math($spacing / 2);
|
|
408
|
-
}
|
|
313
|
+
.container {
|
|
314
|
+
@grid(3, 20px);
|
|
315
|
+
// 也可以
|
|
316
|
+
@grid: 3 20px;
|
|
409
317
|
}
|
|
410
318
|
```
|
|
411
319
|
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
### Math 计算语法
|
|
415
|
-
|
|
320
|
+
### 6. Math计算语法
|
|
416
321
|
```css
|
|
417
322
|
/* math() 函数 */
|
|
418
323
|
.element {
|
|
@@ -429,8 +334,7 @@ body {
|
|
|
429
334
|
}
|
|
430
335
|
```
|
|
431
336
|
|
|
432
|
-
### Lab
|
|
433
|
-
|
|
337
|
+
### 7. Lab颜色语法
|
|
434
338
|
```css
|
|
435
339
|
/* 标准 lab() 函数 */
|
|
436
340
|
.element {
|
|
@@ -444,8 +348,7 @@ body {
|
|
|
444
348
|
}
|
|
445
349
|
```
|
|
446
350
|
|
|
447
|
-
### LCH
|
|
448
|
-
|
|
351
|
+
### 8. LCH颜色语法
|
|
449
352
|
```css
|
|
450
353
|
/* 标准 lch() 函数 */
|
|
451
354
|
.element {
|
|
@@ -459,32 +362,7 @@ body {
|
|
|
459
362
|
}
|
|
460
363
|
```
|
|
461
364
|
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
### Lab 十六进制格式:`lab#LLAABB`
|
|
465
|
-
Lab 颜色使用 `lab#`` 前缀,后跟 6 个十六进制字符:
|
|
466
|
-
- 前 2 位:L(明度),范围 00-FF,映射到 0-100
|
|
467
|
-
- 中间 2 位:A(红绿轴),范围 00-FF,映射到 -192 到 192
|
|
468
|
-
- 后 2 位:B(黄蓝轴),范围 00-FF,映射到 -192 到 192
|
|
469
|
-
|
|
470
|
-
示例:`lab#8CFF80` 表示:
|
|
471
|
-
- L = 0x8C = 140 → 140/255 × 100 ≈ 55
|
|
472
|
-
- A = 0xFF = 255 → (255-128) × 1.5 ≈ 190.5
|
|
473
|
-
- B = 0x80 = 128 → (128-128) × 1.5 = 0
|
|
474
|
-
|
|
475
|
-
### LCH 十六进制格式:`lch#LLCCHHH`
|
|
476
|
-
LCH 颜色使用 `lch#`` 前缀,后跟 6 个字符(最后1-3位是十进制色相值):
|
|
477
|
-
- 前 2 位:L(明度),范围 00-FF,映射到 0-100
|
|
478
|
-
- 中间 2 位:C(色度),范围 00-FF,映射到 0-150
|
|
479
|
-
- 后 1-3 位:H(色相),范围 0-100,映射到 0-360度
|
|
480
|
-
|
|
481
|
-
示例:`lch#8CFF090` 表示:
|
|
482
|
-
- L = 0x8C = 140 → 140/255 × 100 ≈ 55
|
|
483
|
-
- C = 0xFF = 255 → 255/255 × 150 = 150
|
|
484
|
-
- H = 090 → 090/100 × 360 = 324度
|
|
485
|
-
|
|
486
|
-
### 嵌套规则
|
|
487
|
-
|
|
365
|
+
### 9. 嵌套规则
|
|
488
366
|
```css
|
|
489
367
|
/* Sass 风格的嵌套 */
|
|
490
368
|
.container {
|
|
@@ -510,8 +388,7 @@ LCH 颜色使用 `lch#`` 前缀,后跟 6 个字符(最后1-3位是十进制
|
|
|
510
388
|
}
|
|
511
389
|
```
|
|
512
390
|
|
|
513
|
-
### 嵌套变量
|
|
514
|
-
|
|
391
|
+
### 10. 嵌套变量
|
|
515
392
|
```css
|
|
516
393
|
/* 变量可以引用其他变量 */
|
|
517
394
|
$base-color: lab(54.7 77.9 80.1);
|
|
@@ -526,7 +403,9 @@ $padding-large: math(2rem * 1.5);
|
|
|
526
403
|
}
|
|
527
404
|
```
|
|
528
405
|
|
|
529
|
-
|
|
406
|
+
---
|
|
407
|
+
|
|
408
|
+
## API文档
|
|
530
409
|
|
|
531
410
|
### JavaScript API
|
|
532
411
|
|
|
@@ -548,7 +427,7 @@ styimat.config({
|
|
|
548
427
|
enableP3: true,
|
|
549
428
|
enableMath: true,
|
|
550
429
|
mathPrecision: 6,
|
|
551
|
-
indentSize:
|
|
430
|
+
indentSize: 4,
|
|
552
431
|
enableNesting: true,
|
|
553
432
|
importBaseUrl: '', // 导入基础URL
|
|
554
433
|
importCache: true, // 缓存导入文件
|
|
@@ -575,6 +454,26 @@ styimat.imports.clearCache(); // 清除导入缓存
|
|
|
575
454
|
styimat.imports.setBaseUrl('/css/'); // 设置导入基础URL
|
|
576
455
|
styimat.imports.setCacheEnabled(false); // 禁用导入缓存
|
|
577
456
|
styimat.imports.setTimeout(10000); // 设置导入超时时间
|
|
457
|
+
|
|
458
|
+
// 设置插件
|
|
459
|
+
styimat.plugins.compress = {
|
|
460
|
+
enable: true,
|
|
461
|
+
convert: function(css, config) {
|
|
462
|
+
return css.replace(/[\n\b]/g, "");
|
|
463
|
+
},
|
|
464
|
+
created() {
|
|
465
|
+
// 创建时调用
|
|
466
|
+
},
|
|
467
|
+
deleted() {
|
|
468
|
+
// 删除时调用
|
|
469
|
+
}
|
|
470
|
+
};
|
|
471
|
+
|
|
472
|
+
delete styimat.plugins.compress; // 删除插件
|
|
473
|
+
|
|
474
|
+
for(const name in styimat.plugins) {
|
|
475
|
+
console.log(name);
|
|
476
|
+
}
|
|
578
477
|
```
|
|
579
478
|
|
|
580
479
|
### 配置选项
|
|
@@ -582,8 +481,8 @@ styimat.imports.setTimeout(10000); // 设置导入超时时间
|
|
|
582
481
|
| 选项 | 类型 | 默认值 | 描述 |
|
|
583
482
|
|------|------|--------|------|
|
|
584
483
|
| `rootSelector` | string | `:root` | CSS 变量定义的根选择器 |
|
|
585
|
-
| `variablePrefix` | string |
|
|
586
|
-
| `preserveOriginal` | boolean | `false` | 是否保留原始 `<style e
|
|
484
|
+
| `variablePrefix` | string | `--` | CSS 变量前缀 |
|
|
485
|
+
| `preserveOriginal` | boolean | `false` | 是否保留原始 `<style e>` 标签 |
|
|
587
486
|
| `indentSize` | number | `4` | 嵌套规则的缩进大小 |
|
|
588
487
|
| `enableNesting` | boolean | `true` | 是否启用嵌套规则 |
|
|
589
488
|
| `autoProcessStyleTags` | boolean | `true` | 是否自动处理页面中的 style 标签 |
|
|
@@ -591,16 +490,43 @@ styimat.imports.setTimeout(10000); // 设置导入超时时间
|
|
|
591
490
|
| `convertLabToRGB` | boolean | `true` | 是否转换 Lab 颜色为 RGB |
|
|
592
491
|
| `convertLchToRGB` | boolean | `true` | 是否转换 LCH 颜色为 RGB |
|
|
593
492
|
| `enableP3` | boolean | `true` | 是否启用 Display P3 广色域支持 |
|
|
594
|
-
| `enableMath` | boolean | `true` | 是否启用 `math()
|
|
493
|
+
| `enableMath` | boolean | `true` | 是否启用 `math()` 函数增强 |
|
|
595
494
|
| `mathPrecision` | number | `6` | 数学计算的精度 |
|
|
596
|
-
| `importBaseUrl` | string |
|
|
495
|
+
| `importBaseUrl` | string | ` | 导入的基础URL |
|
|
597
496
|
| `importCache` | boolean | `true` | 是否缓存导入的文件 |
|
|
598
497
|
| `importTimeout` | number | `5000` | 导入超时时间(毫秒) |
|
|
599
498
|
|
|
499
|
+
---
|
|
500
|
+
|
|
501
|
+
## 十六进制颜色语法详解
|
|
502
|
+
|
|
503
|
+
### Lab 十六进制格式:`lab#LLAABB`
|
|
504
|
+
Lab 颜色使用 `lab#` 前缀,后跟 6 个十六进制字符:
|
|
505
|
+
- 前 2 位:L(明度),范围 00-FF,映射到 0-100
|
|
506
|
+
- 中间 2 位:A(红绿轴),范围 00-FF,映射到 -192 到 192
|
|
507
|
+
- 后 2 位:B(黄蓝轴),范围 00-FF,映射到 -192 到 192
|
|
508
|
+
|
|
509
|
+
示例:`lab#8CFF80` 表示:
|
|
510
|
+
- L = 0x8C = 140 → 140/255 × 100 ≈ 55
|
|
511
|
+
- A = 0xFF = 255 → (255-128) × 1.5 ≈ 190.5
|
|
512
|
+
- B = 0x80 = 128 → (128-128) × 1.5 = 0
|
|
513
|
+
|
|
514
|
+
### LCH 十六进制格式:`lch#LLCCHHH`
|
|
515
|
+
LCH 颜色使用 `lch#` 前缀,后跟 6 个字符(最后1-3位是十进制色相值):
|
|
516
|
+
- 前 2 位:L(明度),范围 00-FF,映射到 0-100
|
|
517
|
+
- 中间 2 位:C(色度),范围 00-FF,映射到 0-150
|
|
518
|
+
- 后 1-3 位:H(色相),范围 0-100,映射到 0-360度
|
|
519
|
+
|
|
520
|
+
示例:`lch#8CFF090` 表示:
|
|
521
|
+
- L = 0x8C = 140 → 140/255 × 100 ≈ 55
|
|
522
|
+
- C = 0xFF = 255 → 255/255 × 150 = 150
|
|
523
|
+
- H = 090 → 090/100 × 360 = 324度
|
|
524
|
+
|
|
525
|
+
---
|
|
526
|
+
|
|
600
527
|
## 示例
|
|
601
528
|
|
|
602
529
|
### 完整示例
|
|
603
|
-
|
|
604
530
|
```css
|
|
605
531
|
/* 定义颜色变量 */
|
|
606
532
|
$brand-primary: lab(54.7 77.9 80.1);
|
|
@@ -641,7 +567,6 @@ $border-radius: 0.5rem;
|
|
|
641
567
|
```
|
|
642
568
|
|
|
643
569
|
### 颜色混合示例
|
|
644
|
-
|
|
645
570
|
```css
|
|
646
571
|
/* 使用十六进制语法创建调色板 */
|
|
647
572
|
$primary: lab#8CFF80;
|
|
@@ -667,7 +592,6 @@ $primary-transparent: lab(55 190 0 / 0.8);
|
|
|
667
592
|
```
|
|
668
593
|
|
|
669
594
|
### Math() 函数高级示例
|
|
670
|
-
|
|
671
595
|
```css
|
|
672
596
|
/* 复杂数学计算 */
|
|
673
597
|
.grid {
|
|
@@ -693,6 +617,30 @@ $primary-transparent: lab(55 190 0 / 0.8);
|
|
|
693
617
|
}
|
|
694
618
|
```
|
|
695
619
|
|
|
620
|
+
## 浏览器兼容性
|
|
621
|
+
|
|
622
|
+
| 特性 | Chrome | Firefox | Safari | Edge |
|
|
623
|
+
|------|--------|---------|---------|------|
|
|
624
|
+
| CSS变量 | 49+ | 31+ | 9.1+ | 16+ |
|
|
625
|
+
| Display P3 | 111+ | 113+ | 16.4+ | 111+ |
|
|
626
|
+
| 嵌套规则 | 112+ | 117+ | 16.4+ | 112+ |
|
|
627
|
+
| Lab/LCH颜色 | 通过转换 | 通过转换 | 通过转换 | 通过转换 |
|
|
628
|
+
|
|
629
|
+
> 注意:Styimat会自动为不支持的浏览器提供降级方案
|
|
630
|
+
|
|
631
|
+
## 常见问题
|
|
632
|
+
|
|
633
|
+
### Q: 使用Styimat会影响页面加载性能吗?
|
|
634
|
+
A: Styimat非常轻量,压缩后仅约20KB。对于大多数项目,性能影响可以忽略不计。
|
|
635
|
+
|
|
636
|
+
### Q: 如何从Sass/Less迁移到Styimat?
|
|
637
|
+
A: 大多数Sass/Less语法可以直接使用。主要区别是Styimat使用`$`前缀定义变量,且原生支持CSS变量。
|
|
638
|
+
|
|
639
|
+
### Q: 生产环境中应该如何处理?
|
|
640
|
+
A: 建议在构建时使用命令行工具预处理CSS,而不是在浏览器中实时转换。
|
|
641
|
+
|
|
642
|
+
---
|
|
643
|
+
|
|
696
644
|
## Git 仓库
|
|
697
645
|
|
|
698
646
|
- **主仓库**: [https://gitee.com/wxy6987/styimat](https://gitee.com/wxy6987/styimat)
|
package/bin/cli.js
CHANGED
|
@@ -163,7 +163,7 @@ async function convertAndOutput(inputContent, outputFile) {
|
|
|
163
163
|
if (outputFile) {
|
|
164
164
|
fs.writeFileSync(outputFile, outputContent, 'utf8');
|
|
165
165
|
} else {
|
|
166
|
-
process.stdout.write(outputContent
|
|
166
|
+
process.stdout.write(outputContent);
|
|
167
167
|
}
|
|
168
168
|
} catch (error) {
|
|
169
169
|
console.error('转换错误:', error.message);
|