IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

SmartSprites - 命令行形式的CSS Sprites生成器

Kejun's Blog 2010-04-12 16:09:57 累计浏览 123,819 次
本机暂存

SmartSprites(http://csssprites.org/)是一个基于java开发的命令行形式的CSS Sprites生成器。它根据CSS文件中的特别注释自动合成图片,然后自动替换原来的图片,最后生成一个新的CSS文件。显然比手工上传、下载,再手工修改CSS方便多了。

它可以指定生成-个或多个sprites图片,要合并哪些图片也是由你指定的。这一点要比SpriteMe(http://spriteme.org/)好。SpriteMe本身不是开发阶段的工具。

简单介绍一下怎么用:

环境要求:JRE 1.5+。java -version 试一下。

Step1: 下载文件包(目前最新版是0.2.6,http://csssprites.org/download.html?v0.2.6

Step2: 解压到任意目录。smartsprites-0.2.6下的文件:
windows下用的 - smartsprites.cmd
linux下用的 - smartsprites.sh
Ant的配置示例 - build.xml
建议先修改smartsprites.sh(windows下改smartsprites.cmd),找到这行:
java %OPTS% -Djava.ext.dirs=lib org.carrot2.labs.smartsprites.SmartSprites 将lib改成绝对路径。

Step3: 正常写CSS。比如,有这么一段:

.item1,.item2,.item3,.item4,.item5 { padding:2px 20px;margin-bottom:10px;border:1px solid #7D94CC;background:#A6ADFF no-repeat right; }
.item1 { background-image:url(../icons/feed_add.png); }
.item2 { background-image:url(../icons/feed_delete.png); }
.item3 { background-image:url(../icons/feed_edit.png); }
.item4 { background-image:url(../icons/feed_link.png); }
.item5 { background-image:url(../icons/feed.png); }

Step4: 加了SmartSprites的注释后:

/** sprite:sp_all; sprite-image:url(../imgs/sp_all.png); sprite-layout:vertical; */
.item1,.item2,.item3,.item4,.item5 { padding:2px 20px;margin-bottom:10px;border:1px solid #7D94CC;background:#A6ADFF no-repeat right; }
.item1 {
background-image:url(../icons/feed_add.png);/** sprite-ref:sp_all;sprite-alignment:right;sprite-margin-bottom:20px; */
}
.item2 {
background-image:url(../icons/feed_delete.png);/** sprite-ref:sp_all;sprite-alignment:right;sprite-margin-bottom:20px; */
}
.item3 {
background-image:url(../icons/feed_edit.png);/** sprite-ref:sp_all;sprite-alignment:right;sprite-margin-bottom:20px; */
}
.item4 {
background-image:url(../icons/feed_link.png);/** sprite-ref:sp_all;sprite-alignment:right;sprite-margin-bottom:20px; */
}
.item5 {
background-image:url(../icons/feed.png);/** sprite-ref:sp_all;sprite-alignment:right;sprite-margin-bottom:20px; */
}

注释的格式/** 属性:值 */。

首先声明一个sprite图片(根据需要也可声明多个):

/** sprite:sp_all; sprite-image:url(../imgs/sp_all.png); sprite-layout:vertical; */
sprite:sp_all, sp_all必须唯一
sprite-image:url(保存的路径和文件名);
sprite-layout:vertical|horizontal(默认),sprite布局形式。

在想合并的背景图后面加注释,如:

background-image:url(../icons/feed_delete.png);/** sprite-ref:sp_all;sprite-alignment:right;sprite-margin-bottom:20px; */
sprite-ref:spriteID, 指定要合入哪个sprites图片中。
sprite-alignment:right|left(默认),指定x轴的对齐方式。如果sprite-layout:horizontal则值为top(默认)|bottom,指定y轴的对齐方式。
sprite-margin-bottom:20px,指定留白。同样还可以指定sprite-margin-(left | right | top | bottom)。
更多选项见http://csssprites.org/

Step5: 执行SmartSprites:

$ ~/Library/smartsprites-0.2.6/smartsprites.sh -css-files ~/Desktop/icons/css/common.css
-css-files 指定要处理的css文件
$ ~/Library/smartsprites-0.2.6/smartsprites.sh -root-dir-path ~/Desktop/icons/
-root-dir-path 指定一个根目录,执行时会处理根目录(包括子目录)下所有*.css。
更多选项见http://csssprites.org/

处理过程会显示出来:

INFO: Reading sprite image directives from /Users/kejun/Desktop/icons/css/common-sprite.css.
INFO: Reading sprite image directives from /Users/kejun/Desktop/icons/css/common.css.
INFO: Reading sprite reference directives from /Users/kejun/Desktop/icons/css/common-sprite.css.
INFO: Reading sprite reference directives from /Users/kejun/Desktop/icons/css/common.css.
INFO: Reading image from /Users/kejun/Desktop/icons/icons/feed_add.png. (/Users/kejun/Desktop/icons/css/common.css, line: 5)
INFO: Reading image from /Users/kejun/Desktop/icons/icons/feed_delete.png. (/Users/kejun/Desktop/icons/css/common.css, line: 8)
INFO: Reading image from /Users/kejun/Desktop/icons/icons/feed_edit.png. (/Users/kejun/Desktop/icons/css/common.css, line: 11)
INFO: Reading image from /Users/kejun/Desktop/icons/icons/feed_link.png. (/Users/kejun/Desktop/icons/css/common.css, line: 14)
INFO: Reading image from /Users/kejun/Desktop/icons/icons/feed.png. (/Users/kejun/Desktop/icons/css/common.css, line: 17)
INFO: Writing sprite image of size 16 x 180 for sprite ’sp_all’ to /Users/kejun/Desktop/icons/imgs/sp_all.png.
INFO: Creating CSS style sheet: /Users/kejun/Desktop/icons/css/common-sprite.css.
INFO: Reading CSS from /Users/kejun/Desktop/icons/css/common.css.
INFO: Writing CSS to /Users/kejun/Desktop/icons/css/common-sprite.css.
STATUS: SmartSprites processing completed in 372 ms.

失败会出现“WARN:”,如:

WARN: No ‘background-image’ CSS rule next to sprite reference comment: .item2 { background-image:url(../icons/feed_delete.png);/** sprite-ref:sp_all;sprite-margin-bottom:20px; */ . (/Users/kejun/Desktop/icons/css/common.css, line: 7)
现在这个版本对写法有一定限制。background-image一定要单独指定,这样会报错:
background:url(../icons/feed_delete.png);/** sprite-ref:sp_all;sprite-margin-bottom:20px; */
加注释的background-image要独立一行,这样会报错:
padding:10px;background-image:url(../icons/feed_delete.png);/** sprite-ref:sp_all;sprite-margin-bottom:20px; */

执行完后会生成一个新的文件:common-sprite.css。css变成:

.item1,.item2,.item3,.item4,.item5 { padding:2px 20px;margin-bottom:10px;border:1px solid #7D94CC;background:#A6ADFF no-repeat right; }
.item1 {
background-image: url(’../imgs/sp_all.png’);
background-position: right -0px;
}
.item2 {
background-image: url(’../imgs/sp_all.png’);
background-position: right -36px;
}
.item3 {
background-image: url(’../imgs/sp_all.png’);
background-position: right -72px;
}
.item4 {
background-image: url(’../imgs/sp_all.png’);
background-position: right -108px;
}
.item5 {
background-image: url(’../imgs/sp_all.png’);
background-position: right -144px;
}

SmartSprites在开发阶段用很方便,图片有修改,只需执行一下命令。将它编入Ant里就更方便了,它提供了现成的build script。当然,它肯定不是最优化的,毕竟是自动生成的。但平衡开发效率和易维护性,还是值得用的。现在前端开发的各个任务,基本都有对应的命令行工具,酷!

同分类推荐文章

  1. 新特性速递:focus()行为新增focusVisible控制 (2026-05-29 16:23:06)
  2. Algorithmic Theming Engines: Building Self-Correcting Color Systems With `contrast-color()` (2026-05-28 21:00:00)
  3. Revealing Text With CSS letter-spacing (2026-05-27 20:37:33)

查看更多 前端 文章 →

建议继续学习

  1. Java开发岗位面试题归类汇总 (累计阅读 22,002)
  2. android 开发入门 (累计阅读 19,441)
  3. 我的PHP,Python和Ruby之路 (累计阅读 13,075)
  4. HashMap解决hash冲突的方法 (累计阅读 12,565)
  5. 一个大二学生有关如何成为一名软件工程师的疑问及答复 (累计阅读 9,122)
  6. 应该知道的Linux技巧 (累计阅读 8,891)
  7. Java程序员应该知道的10个eclipse调试技巧 (累计阅读 7,920)
  8. 如何让员工忠于公司? (累计阅读 7,870)
  9. Java技术路线 (累计阅读 7,673)
  10. 聊聊ThoughtWorks面试 (累计阅读 7,504)