雪碧图就是很多张小图片合并成一张大图片,以减少HTTP请求,从而提升加载速度。有很多软件可以合并雪碧图,但通常不太容易维护,使用compass生成雪碧图应该算是非常方便的方法了,可以轻松的生成雪碧图,而且易维护。

安装sass与compass

安装sass可以参考这里

安装完sass以后,使用下面命令安装compass:

> gem install compass

配置环境

进入项目目录,使用下面命令初始化项目:

> compass init

该命令会在当前目录中生成一些文件:

- sass
|-- ie.scss
|-- print.scss
|-- screen.scss - stylesheets
|-- ie.sss
|-- print.sss
|-- screen.sss config.rb

其中sass与stylesheets文件夹中的文件基本上没什么用。config.rb配置文件中的内容一般不需要改动,也可以根据需要修改。

合并图片

在当前目录下创建一个images的文件夹放置所有图片,然后在images文件夹中创建一个icons文件夹放置需要合并的图片。在sass文件夹中创建一个icons.scss文件,在文件中写入:

@import "icons/*.png";
@include all-icons-sprites;

然后,命令行执行compass compile命令,合并图片工作就已完成。images文件夹中多了一张icons-*******.png的图片。在stylesheets文件夹中会生成一个icons.css的文件:

.icons-sprite, .icons-car-icon, .icons-card-icon, .icons-hand-icon, .icons-light, .icons-pan, .icons-title, .icons-watch-icon, .icons-wheel, .icons-wheel1 {
background-image: url('/images/icons-sd6ae4306cd.png');
background-repeat: no-repeat;
} .icons-car-icon {
background-position: 0 0;
} .icons-card-icon {
background-position: 0 -124px;
} .....

自定义类名

可以看到上面生成的css文件中的类名都是自动生成的,在实际应用中通常并不会使用上面的默认类名,这时需要自定义类名:

@import "icons/*.png";
.car-icon {
@include icons-sprite(car-icon);
}

注意:@include icons-sprite(car-icon)不要写成@include icons-sprites(car-icon),否则会有意想不到的结果。@include all-icons-sprites这句可以去掉,就不会生成默认的类名了。上面输出的结果为:

.icons-sprite, .car-icon {
background-image: url('/images/icons-sd6ae4306cd.png');
background-repeat: no-repeat;
} .car-icon {
background-position: 0 0;
}

雪碧地图(Sprite maps)

可以使用雪碧地图取代上面的@import,如下:

$icons: sprite-map("icons/*.png", $spacing: 8px, $layout: horizontal);
.car-icon {
background-image: sprite-url($icons);
width: image-width(sprite-file($icons, car-icon));
height: image-height(sprite-file($icons, car-icon));
background-position: sprite-position($icons, car-icon);
background-repeat: no-repeat;
}

结果:

.car-icon {
background-image: url('/images/icons-s6844bf5750.png');
width: 242px;
height: 116px;
background-position: 0 0;
background-repeat: no-repeat;
}

上面使用了很多compass内置的方法:

sprite-url($icons); //获取合并后雪碧图的url;
sprite-file($icons, $name); //获取目标icon;
image-width(); //获取图片宽度;
image-height(); //获取图片高度;
sprite-position($icons, $name); //获取图片坐标

设置图片尺寸

之前生成的css文件中并没有设置图片的尺寸,一般情况下是需要设置的。可以通过下面的设置设置图片尺寸:

$icons-sprite-dimensions: true;

输出结果:

.car-icon {
background-position: 0 0;
height: 116px;
width: 242px;
}

上面的设置会为每张图图片添加尺寸,也可以指定为某张图片添加尺寸:

.car-icon {
@include icons-sprite(car-icon);
width: icons-sprite-width(car-icon);
height: icons-sprite-height(car-icon);
}

布局方式

布局方式就是生成的雪碧图中小图片的排列方式。compass提供了四中排列方法:vertical、horizontal、diagonal和smart。默认排列方式是vertical。

使用方法就是在icons.scss文件中加上:

$icons-layout: "vertical";

其他方式用法一样。

下面是四种布局生成的图片:

垂直排列

水平排列

斜向排列

智能排列

设置间距

通常,我们会在图片与图片之间设置一定的间距,添加一下代码:

$icons-spacing: 8px;

上面为图片之间设置了8px的间距。

总结:

上面简单介绍了使用compass制作雪碧图。在使用生成的css文件时会有一个问题:在PC端我们可以直接使用生成的css文件,但在移动端并不能直接使用,因为移动端需要缩放图片以适应不同分辨率的屏幕。然而生成的css文件的宽高都是使用绝对单位px的,这样在移动端并不适用。由于篇幅原因,我会在下一篇介绍在移动端怎样使用compass生成的雪碧图。

使用sass与compass合并雪碧图(一)的更多相关文章

  1. 使用sass与compass合并雪碧图(二)

    上一篇文章介绍了怎样使用compass合并雪碧图,生成的icons.css文件中单位是px,PC端可以直接在html文件中使用,但在移动端,我们需要根据不同分辨率的屏幕,来缩放图片大小,显然使用px单 ...

  2. Sass和Compass制作雪碧图

    1.安装好了sass与compass之后设置一个配置文件 2.新增一个雪碧图文件夹用来存放将要合并的图片例如color文件夹 3.@import命令引用 .Compass看到@import指令的参数为 ...

  3. compass做雪碧图

    由于最近没什么时间好好写博文,我把用sass做雪碧图的关键点贴出来方便自己记忆: config.rb注释 # Set this to the root of your project when dep ...

  4. 使用Compass制作雪碧图

    遇见好的文章,笔者也会转载.但是正所谓好记性不如烂笔头,单纯的拿来主义也不如自己的亲自实践.所以每次需要转载的文章,我都会自己敲一遍,中间加入一些自己的思考. 这篇文章转载自:http://www.h ...

  5. 利用compass制作雪碧图

    compass是什么?是sass一款神奇插件,具体教程,我还是推荐阮一峰sass,compass教程,简单清晰明了. 用ps制作雪碧图,工作效率太低了.用compass来制作,方便很多.下图的用com ...

  6. compass Sprites 雪碧图 小图片合成[Sass和compass学习笔记]

    demo 源码 地址 https://github.com/qqqzhch/webfans 什么是雪碧图? CSS雪碧 即CSS Sprites,也有人叫它CSS精灵,是一种CSS图像合并技术,该方法 ...

  7. compass与css sprite(雪碧图)

    什么是css sprite? css sprite,中文叫雪碧图,也有人喊CSS精灵,就是一种背景拼合的技术,然后通过background-position来显示雪碧图中需要显示的图像. MDN相关链 ...

  8. sass制作雪碧图

    1.配置文件config.rb http_path = "../../../" css_dir = "Content/css" sass_dir = " ...

  9. compass框架的sprite雪碧图的用法简要

    ---恢复内容开始--- **简介** CSS SPRITE 即 CSS雪碧,即是将诸多图片合成一张图片,然后使用CSS 的background和background-position属性渲染. 这样 ...

随机推荐

  1. 将本地项目托管到github 并预览

    本地文件上传到github的步骤 1.先在github上建立一个仓库 2.将此仓库download 3.在此文件夹中git bash here 4.进行如下git操作 git git init git ...

  2. 【jq】插件—缓存jquery.cookie.js

    jquery.cookie.js插件   轻量级cookie管理 1°下载地址:http://plugins.jquery.com/cookie/ 2°引入方式:(基于jquery) <scri ...

  3. C++ - 模板(template)中typename的使用方法

    声明template参数时, 前缀关键字class和typename可以互换; 使用关键字typename标识嵌套从属类型名称, 但不需在基类列表和成员初始化列表内使用. 从属名称(dependent ...

  4. CSS3 Gradient渐变效果

    最近看到一遍关于渐变的文章,感觉很好,只是收藏感觉太可惜了,就转载了,好好学习! CSS3 Gradient分为linear-gradient(线性渐变)和radial-gradient(径向渐变). ...

  5. lightbox用法

    示例代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  6. 数据结构与算法之二叉树 ——in dart

    用dart语言实现的二叉树,实现了插入.查找.删除,中序遍历.前序.后序遍历等功能. class BinaryTree<E extends Comparable> { Node<E& ...

  7. 《Java 程序设计》课堂实践项目-Arrays和String单元测试

    <Java 程序设计>课堂实践项目-Arrays和String单元测试 课后学习总结 目录 改变 Arrays和String单元测试实验要求 课堂实践成果 课后思考 改变 修改了博客整体布 ...

  8. tomcat软连接的使用

    软连接说白了就是一个映射.可以映射文件,也可以映射目录.linux和windows都可以做软连接,加入现在把文件A.txt做软连接到B.txt: linux命令如下: ln -s A.txt B.tx ...

  9. Codeforces VK Cup 2018 Div.2

    总题面传送门 这次考试只过了3题,前三题题目难度并不大,但是第三题的代码细节卡了我两个半小时(基本上整场考试),所以以后要合理把握时间,注意把握代码细节,并更加完善我的代码风格,使其更加简练.(赛外话 ...

  10. Gitlab+Jenkins学习之路(一)之Git基础

    1.GIT基础    GIT是一个分布式版本管理系统,速度快,适合大规模,跨地区多人协同开.SVN是一个集中式版本管理系统. (1)GIT生态 GIT分布式版本管理系统 Gitlab git私库解决方 ...