1 | # csssprite图片合并
|
2 |
|
3 | ## 使用说明
|
4 |
|
5 | ### 默认单位为px
|
6 | 非常简单,只需要在css文件中对要合并的图片路径增加?__sprite后缀即可,比如
|
7 | ``` css
|
8 | .csssprite .abtest_huafei s {
|
9 | background:url(i/icon_01.png?__sprite) no-repeat;
|
10 | }
|
11 | .csssprite .abtest_lvxing s {
|
12 | background:url(i/icon_03.png?__sprite) no-repeat 6px 0px;
|
13 | }
|
14 | .csssprite .abtest_caipiao s {
|
15 | background:url(i/icon_05.png?__sprite) no-repeat 5px 0px;
|
16 | }
|
17 | ```
|
18 |
|
19 | 执行jdf output,后台会进行css sprite编译操作后
|
20 | ``` css
|
21 | .csssprite .abtest_huafei s {
|
22 | background:url(i/csssprite.png) no-repeat;
|
23 | background-position:0 0
|
24 | }
|
25 | .csssprite .abtest_lvxing s {
|
26 | background:url(i/csssprite.png) no-repeat 6px 0;
|
27 | background-position:6px -39px
|
28 | }
|
29 | .csssprite .abtest_caipiao s {
|
30 | background:url(i/csssprite.png) no-repeat 5px 0;
|
31 | background-position:5px -78px
|
32 | }
|
33 | ```
|
34 | 其中`icon_01.png`,`icon_03.png`,`icon_05.png`小图片被合成为`csssprite.png`,其中csssprite为当前css文件的文件名
|
35 |
|
36 | ### 当css单位为rem时
|
37 |
|
38 | 在background中写上px到rem的转换比例
|
39 | ``` css
|
40 | html {
|
41 | font-size: 20px;
|
42 | }
|
43 | .icon1, .icon2{
|
44 | width: 1.8rem;
|
45 | height: 1.8rem;
|
46 | margin: 10px;
|
47 | background: url(i/icon7.png?__sprite__rem20) no-repeat;
|
48 | border: 1px solid black;
|
49 | }
|
50 | .icon2{
|
51 | background: url(i/icon8.png?__sprite__rem20) no-repeat;
|
52 | }
|
53 | ```
|
54 | 转换之后:
|
55 | ```css
|
56 | html {
|
57 | font-size: 20px
|
58 | }
|
59 | .icon1, .icon2 {
|
60 | width: 1.8rem;
|
61 | height: 1.8rem;
|
62 | margin: 10px;
|
63 | background: url(/i/w2.png) no-repeat;
|
64 | background-position: 0 0;
|
65 | background-size: 1.8rem 4.6rem;
|
66 | border: 1px solid #000
|
67 | }
|
68 | .icon2 {
|
69 | background: url(i/w2.png) no-repeat;
|
70 | background-position: 0 -2.3rem;
|
71 | background-size: 1.8rem 4.6rem
|
72 | }
|
73 | ```
|
74 |
|
75 | ## 切图说明
|
76 | 把psd中图片所有icon类小图切换,在css中设置好background-position,在相对应图片后面增加?__sprite后缀
|
77 |
|
78 | ## 配置说明
|
79 | * 默认为开启状态,可以通过config.json的output.csssprite键值设置为false进行关闭
|
80 | * 图片之间上下间距,可以通过config.json的output.cssspriteMargin键值设置
|
81 | * 合并文件,通过config.json的outout.cssSpriteMode 0|1 设置把整个项目的雪碧图合并到一起,还是以widget为单位合并到一起,默认是1。
|
82 |
|
83 | ## 特性说明
|
84 | * 支持的图片格式:png,jpg,png输出png24格式,IE6的png24图片需要单独处理
|
85 | * 支持no-repeat,background-position可自由设置
|
86 | * 后续支持repeat-x,repeat-y
|
87 |
|
88 | ## 原理解析
|
89 | * 分析css文件内容,取出带有?__sprite的图片路径,同时对此background的backgroud-repeat、background-position进行记录
|
90 | * 取出所有图片,依靠backgroud-repeat、background-position进行图片合并,并生成合并的新图片
|
91 | * 把css文件所有sprite图片路径替换成合并的新图片路径
|
92 |
|
93 | ## 解析css
|
94 | * 利用正则实现一个简单的css语法解析器,可把css内容解析为
|
95 |
|
96 | <table>
|
97 | <tr><td>属性</td> <td>值</td> <td>说明</td> </tr>
|
98 | <tr><td>content</td> <td>图片内容</td> <td></td> </tr>
|
99 | <tr><td>url</td> <td>如:i/icon.png</td> <td>图片url</td> </tr>
|
100 | <tr><td>item</td> <td>如:background: url(i/icon.png?__sprite) no-repeat</td> <td>图片background</td> </tr>
|
101 | <tr><td>repeat</td> <td>null | repeat-x | repeat-y</td> <td>重复</td> </tr>
|
102 | <tr><td>width</td> <td>number</td> <td>图片的宽度</td> </tr>
|
103 | <tr><td>height</td> <td>number</td> <td>图片的高度</td> </tr>
|
104 | </table>
|