使用compass自动拼css sprite

使用compass自动拼css sprite

css sprite (css 雪碧)又叫css精灵,是一种图片拼合技术。多用在图标上,把几个图标拼成一个图片,页面加载的时候只需要load拼好的图片,然后使用background-position配合width、height来显示不同的图标。这样做可以减少页面请求数。但是,想想把一个个图标从psd上扣下来,合到一个图上,然后还要慢慢算background-position,这也真是醉了,而且后期如果改了图标,又要重新拼一次,拼完再算一次background-position,真是坑大了。

对于这种耗时的体力活,都应该自动化。本文就介绍使用compass来自动拼css sprite。

安装compass

这里安装和配置可以参考我另外一篇文章,SASS用法介绍,这里就不多做介绍了。compass经常配合sass使用,推荐平常用sass,提高写css的效率。


合成css sprite

首先我们对config.rb文件进行一些改动:

# Get the directory that this configuration file exists in
dir = File.dirname(__FILE__)

#Compass configuration
sass_path = dir
css_path = File.join(dir, "..", "css")
images_dir = "../img"
environment = :production # :development # :production
output_style = :compact # :expanded # :compressed

这里主要是加了image_dir这一项。

然后我们添加一个sass文件tmp.scss:

@import "compass/utilities/sprites";
@import "tmp/*.png";
@include all-tmp-sprites; 

这里第一行是加载compass的sprites模块。

第二行表示把tmp目录下所有的png文件拼起来,这里的tmp是一个相对目录,如果没有配置sprite_load_path这一项的话,默认就会使用我们刚才加的images_dir这一项,实际上,如果连这一项也没配置也不怕,默认叫images。这里要特别说明一下,以我们现在的配置文件来说,需要一个tmp目录,放到img目录下,tmp目录里面放的就是我们需要拼接的图片。

第三行的话,意思是输出所有sprite的css,也就是计算好的background-position。这里中间的tmp需要和上面一样,如何修改需要查阅文档。

之后调用compass compile进行编译,发现img目录下出现了一个拼接后的图片tmp-sxxxxxxxxxx.png,然后css目录下生成了对应的tmp.css文件。


图片命名优化

是不是觉得自动生成图片爽爽的,但是带了一大串hash数字在图片名中很不舒服。下面我们就来处理这段数字。

compass提供了一些钩子函数,compass里面叫callback,这里我们用到一个叫on_sprite_saved的钩子。在config.rb文件中添加下面这段,注意如果是用compass watch来自动检测改动的话,需要中断,重新运行compass watch

on_sprite_saved do |filename|
  if File.exists?(filename)
    FileUtils.cp filename, filename.gsub(%r{-s[a-z0-9]{10}\.png$}, ‘.png‘)
  end
end

重新run之后,发现多了一个tmp.png文件,而原来带hash的文件也还在,其实因为用的是FileUtils.cp函数,所以做的是copy,如果改成FileUtils.mv则不会有带hash值得文件。

然后再看一下tmp.css文件,发现里面还是用的是带hash的那个文件。

这里还要用另外一个钩子:

on_stylesheet_saved do |filename|
  if File.exists?(filename)
    css = File.read filename
    File.open(filename, ‘w+‘) do |buffer|
      buffer << css.gsub(%r{-s[a-z0-9]{10}\.png}, ‘.png‘)
    end
  end
end

ok,大功告成。

完整的config.rb:

# Get the directory that this configuration file exists in
dir = File.dirname(__FILE__)

#Compass configuration
sass_path = dir
css_path = File.join(dir, "..", "css")
images_dir = "../img"
environment = :production # :development # :production
output_style = :compact # :expanded # :compressed

on_sprite_saved do |filename|
  if File.exists?(filename)
    # FileUtils.cp filename, filename.gsub(%r{-s[a-z0-9]{10}\.png$}, ‘.png‘)
    FileUtils.mv filename, filename.gsub(%r{-s[a-z0-9]{10}\.png$}, ‘.png‘)
  end
end

on_stylesheet_saved do |filename|
  if File.exists?(filename)
    css = File.read filename
    File.open(filename, ‘w+‘) do |buffer|
      buffer << css.gsub(%r{-s[a-z0-9]{10}\.png}, ‘.png‘)
    end
  end
end

compass还有很多配置选项,可以参考官网传送门,或者这篇文章


参考

http://riny.net/2014/compass-sprite/

http://segmentfault.com/q/1010000000308179

http://compass-style.org/help/documentation/configuration-reference/

时间: 2024-12-18 06:18:47

使用compass自动拼css sprite的相关文章

使用compass自动合并css雪碧图(css sprite)(转载)

css雪碧图又叫css精灵或css sprite,是一种背景图片的拼合技术.使用css雪碧图,能够减少页面的请求数.降低图片占用的字节,以此来达到提升页面访问速度的目的.但是它也有令人诟病的地方,就是拼图和后期维护的成本比较大.也正是因为这一点,导致很多开发者懒于使用css雪碧图. 对于这种耗时.枯燥.重复性的工作,最好的解决方法还是交给工具去处理.本文就介绍下怎样使用compass来自动合并css雪碧图. 安装compass 首先请确认电脑已经安装ruby及sass环境,ruby及sass的安

compass与css sprite(雪碧图)

什么是css sprite? css sprite,中文叫雪碧图,也有人喊CSS精灵,就是一种背景拼合的技术,然后通过background-position来显示雪碧图中需要显示的图像. MDN相关链接:https://developer.mozilla.org/zh-CN/docs/Web/Guide/CSS/CSS_Image_Sprites 优点:1.减少页面请求数 2.降低图片占用字节 缺点:1.拼图麻烦 2.后期维护麻烦 为什么使用compass? 最近项目中需要使用到很多小图片,想用

css sprite的实现

css sprite 为什么使用css sprite? 网页上的很多静态小图片在加载时需要大量http请求,增加了响应时间.(哈哈,雅虎34条优化法则的第一条啊) css的background-position:x,y; 利用分层实现 1.设置块状元素大小 2.改变背景的位置 3.实现(很多小图组成的大图)对应位置小图的出现 自动生成css sprite的工具:cssgaga

CSS Sprite笔记

1. 什么是CSS Sprite 将一些碎小的图片拼接为一张大点的图片来使用,目的是为了减少浏览器的http请求次数以提高网页的加载速度.每次请求图片都需要跟服务器建立一次连接,并且浏览器的最大并发请求数是有限制的.使用雪碧图并不能减少传送的数据的总量,但可以通过节省掉一部分建立.关闭连接的时间来加快网页的加载速度. 2. 如何使用 2.1 怎么得到雪碧图? ※ 直接手动拼接,只要可以将需要用到的小图片拼在一张图片上即可,当然,拼接应该尽量遵循的原则: 尽量让这张图片以后可维护: 在保证可维护性

CSS Sprite雪碧图应用

CSS Sprite CSS雪碧图 为了减少http请求数量,加速网页内容显示,很多网站的导航栏图标.登录框图片等,使用的并不是<image>标签,而是CSS Sprite雪碧图. 雪碧图使用场景: 1.静态图片,不随用户信息的变化而变化 2.小图片,图片容量比较小 3.加载数量比较大 4.一些大图不建议拼成雪碧图 (减少HTTP请求数,加速内容显示) 雪碧图实现原理:background-position 移动位置时,坐标都需要设置成负值 雪碧图生成方式 1.PS手动拼图 2.大项目通常使用

CSS Sprite的优缺点分析

目前大多数的开发人员对这个技术都有相当地掌握,也有很多关于它的教程和文章.几乎所有的文章中都宣称设计师和开发人员都应该使用 CSS sprite 来减少 HTTP 请求数,并且节省一些流量.这个技术被大量网站使用,包括使用了大型 sprite 的 Amazon . 但是这些被广泛热议的好处真的是值得的吗?设计师们是否在没有全面考虑到所有情况的情况下,在盲目地使用这个技术呢?设计师们是不是过于关注 CSS sprite 的流行,而忽略了其它应该仔细斟酌的因素了呢? 这篇文章会讨论下使用 CSS s

使用雪碧图Css Sprite精灵 | 加速网页响应速度

什么是CSS Sprite精灵? 是用于前端的一种图片应用技术,通常情况,我们的开发的网页或许有很多张图片,假如在一个页面上有50多张小图片,这意味着浏览器要逐个下载50张图片.Css Sprite它允许你将一个页面涉及到的所有零星图片都包含到一张图中,这样一来,当访问页面时,就只需要下载1张图片了,这显然大大减低了服务器请求压力. 这个技术加速网页响应速度,加速的关键,不是降低质量,而是减少个数.传统切图讲究精细,图片规格越小越好,重量越小越好,其实规格大小无所谓,计算机统一都按byte计算.

个人对于css sprite的一点点简介

css sprite即CSS雪碧图又称CSS精灵.它存在的一个主要作用就是:减少了网页的http请求次数,从而大大的提高了页面的性能,节省时间和带宽. 例如 这样算下来.CSS sprite真的是个很实用的东西. 那么如何制作CSS sprite图呢?用下面这个例子来说明 这样一个图 就能用css sprite来制作.很好的减轻了服务器的压力.和页面的性能. 代码图如上. 另外推荐一个css sprite网站

前端试题-什么是css sprite?优缺点?

CSS Sprite是一种网页图片应用处理方式.它允许将一个页面涉及到的所有零星图片都包含到一张大图中去,这样,在访问页面时,就只需请求一次就可以了,而不必一次次向服务器发送请求. 它的原理就是把见面中一些背景图片整合到一张图片文件中,再利用CSS的"background-image","background-repeat","background-position"的组合进行背景定位,实现多个位置的背景,一张图来搞定. 优点 1 减少网页的ht