csssprite图片合并

使用说明

默认单位为px

非常简单,只需要在css文件中对要合并的图片路径增加?__sprite后缀即可,比如

  1. .csssprite .abtest_huafei s {
  2. background:url(i/icon_01.png?__sprite) no-repeat;
  3. }
  4. .csssprite .abtest_lvxing s {
  5. background:url(i/icon_03.png?__sprite) no-repeat 6px 0px;
  6. }
  7. .csssprite .abtest_caipiao s {
  8. background:url(i/icon_05.png?__sprite) no-repeat 5px 0px;
  9. }

执行jdf output,后台会进行css sprite编译操作后

  1. .csssprite .abtest_huafei s {
  2. background:url(i/csssprite.png) no-repeat;
  3. background-position:0 0
  4. }
  5. .csssprite .abtest_lvxing s {
  6. background:url(i/csssprite.png) no-repeat 6px 0;
  7. background-position:6px -39px
  8. }
  9. .csssprite .abtest_caipiao s {
  10. background:url(i/csssprite.png) no-repeat 5px 0;
  11. background-position:5px -78px
  12. }

其中icon_01.pngicon_03.pngicon_05.png小图片被合成为csssprite.png,其中csssprite为当前css文件的文件名

当css单位为rem时

在background中写上px到rem的转换比例

  1. html {
  2. font-size: 20px;
  3. }
  4. .icon1, .icon2{
  5. width: 1.8rem;
  6. height: 1.8rem;
  7. margin: 10px;
  8. background: url(i/icon7.png?__sprite__rem20) no-repeat;
  9. border: 1px solid black;
  10. }
  11. .icon2{
  12. background: url(i/icon8.png?__sprite__rem20) no-repeat;
  13. }

转换之后:

  1. html {
  2. font-size: 20px
  3. }
  4. .icon1, .icon2 {
  5. width: 1.8rem;
  6. height: 1.8rem;
  7. margin: 10px;
  8. background: url(/i/w2.png) no-repeat;
  9. background-position: 0 0;
  10. background-size: 1.8rem 4.6rem;
  11. border: 1px solid #000
  12. }
  13. .icon2 {
  14. background: url(i/w2.png) no-repeat;
  15. background-position: 0 -2.3rem;
  16. background-size: 1.8rem 4.6rem
  17. }

切图说明

把psd中图片所有icon类小图切换,在css中设置好background-position,在相对应图片后面增加?__sprite后缀

配置说明

  • 默认为开启状态,可以通过config.json的output.csssprite键值设置为false进行关闭
  • 图片之间上下间距,可以通过config.json的output.cssspriteMargin键值设置
  • 合并文件,通过config.json的outout.cssSpriteMode 0|1 设置把整个项目的雪碧图合并到一起,还是以widget为单位合并到一起,默认是1。

特性说明

  • 支持的图片格式:png,jpg,png输出png24格式,IE6的png24图片需要单独处理
  • 支持no-repeat,background-position可自由设置
  • 后续支持repeat-x,repeat-y

原理解析

  • 分析css文件内容,取出带有?__sprite的图片路径,同时对此background的backgroud-repeat、background-position进行记录
  • 取出所有图片,依靠backgroud-repeat、background-position进行图片合并,并生成合并的新图片
  • 把css文件所有sprite图片路径替换成合并的新图片路径

解析css

  • 利用正则实现一个简单的css语法解析器,可把css内容解析为








属性 说明
content 图片内容
url 如:i/icon.png 图片url
item 如:background: url(i/icon.png?__sprite) no-repeat 图片background
repeat null | repeat-x | repeat-y 重复
width number 图片的宽度
height number 图片的高度