使用 Compass 生成雪碧图

使用 Compass 创建一个项目

要在一个新项目中使用 Compass,可以打开命令行工具并输入如下指令

compass create my-project

如果 my-project 目录不存在,上述命令会创建一个叫做 my-project 的目录,并在其中添加以下文件:

如果你没有为compass create命令传递一个目录参数,它将使用你当前所在的目录。

在config.rb文件中,你可以对Compass的一些配置进行修改,例如资源位置和压缩程度。sass目录包含了一些初始的样式表,你可以对它们进行编辑、重命名,或者完全抛弃,但是这个文件夹是你存放Sass样式表的地方。最后,stylesheets目录用于存放编译后的CSS文件。

config.rb文件:

require ‘compass/import-once/activate‘
# Require any additional compass plugins here.

# Set this to the root of your project when deployed:
#配置服务器路径
http_path = "/"
#配置css sass images javascripts路径
css_dir = "stylesheets"
sass_dir = "sass"
images_dir = "images"
javascripts_dir = "javascripts"

# You can select your preferred output style here (can be overridden via the command line):
#根据个人偏好选择输出样式 :nested嵌套  :compact紧密 :compressed压缩
# output_style = :expanded or :nested or :compact or :compressed

# To enable relative paths to assets via compass helper functions. Uncomment:
#相对路径
# relative_assets = true

# To disable debugging comments that display the original location of your selectors. Uncomment:
# line_comments = false

# If you prefer the indented syntax, you might want to regenerate this
# project again passing --syntax sass, or you can uncomment this:
# preferred_syntax = :sass
# and then run:
# sass-convert -R --from scss --to sass sass scss && rm -rf sass && mv scss sass


在设置项目时配置选项

使用compass create命令时,你可以使用一些选项来配置你的项目:

--bare (不包含默认样式表进行安装);

--syntax sass (在默认样式表中使用缩进语法);

--sass-dir "cool" (使用‘cool‘目录存放Sass文件);

--css-dir "style" (使用‘style‘目录存放CSS文件);

--images-dir "img" (使用‘img‘目录存放图片);

--fonts-dir "type" (使用‘type‘目录存放字体文件);

--javascripts-dir "js" (使用‘js‘目录存放JavaScript文件)。

例如:

compass create my-project --bare --sass-dir "cool" --css-dir "style"

开始制作雪碧图

首先获取一些 icon 图标,获取一些免费图标集 https://github.com/Keyamoon/IcoMoon-Free

文件夹目录结构:(images目录下有一个 icons 子目录存放一些 .png图片)


1、创建一个雪碧图

打开 screen.scss 并加入如下代码:

// 加载compass sprites模块
@import "compass/utilities/sprites";

//告诉Compass根据images/icons/目录下的所有PNG图片生成一张雪碧图
@import "icons/*.png";

命令行工具通过如下指令来执行编译

compass watch

最终在 images 文件夹下生成了一个竖向排布的 icons-sac817bc43c.png

2、自定义雪碧图

变量命名表

$<map>-<property>: setting;
$<map>-<sprite>-<property>: setting;

在上面的示例中,雪碧图文件夹的名称是 icons,所以改变间距的变量被命名为 $icons-spacing。而为了设置icons/attachment.png 间距变量, 你应该赋值给$icons-attachment-spacing。

记住, 这些变量必须在导入雪碧图之前被定义, 否则不会生效。请找到configuring-automatic-sprites文件夹下精灵配置的示例代码。

2-1、配置雪碧图间距

Compass 允许你通过配置雪碧图间距变量改变雪碧图的间距

$<map>-spacing: 0px;
$<map>-<sprite>-spacing: 0px;

默认值是0px,这意味着每个 图标 被拼入雪碧图时不带任何间距。设置这个变量或单独给 每个 图标 赋值,会使得每个 图标 在拼合时在周围增加若干像素的透明间

修改screen.scss,例如:

// 加载compass sprites模块
@import "compass/utilities/sprites";

// 配置所有sprite间距为100px,默认为0px  此句要放在前面才生效
$icons-spacing:100px;

//配置所有sprite的位置,默认为0px
$icons-position:100px;

//智能布局的把每张图像放在最合适的地方
//$icons-layout:smart;

//水平排列
$icons-layout:horizontal;
//纵向排列
//$icons-layout:vertical;

//单独为arrow图标设置12像素的透明间距。
$icons-arrow-spacing: 12px;

//告诉Compass根据images/icons/目录下的所有PNG图片生成一张雪碧图
@import "icons/*.png";

自动删除了之前的图片,并生成一个新的 icons-s1a799c6c79.png

2-2、配置图标的重复性

在一些情况下,雪碧图中水平方向的重复 图标 会有大用处。为此,你可以设置雪碧的重复性变量:

$<map>-repeat: no-repeat/repeat-x;
$<map>-<sprite>-repeat: no-repeat/repeat-x;

如:箭头图标横向平铺整个图,重复的箭头图标横跨整个精 灵地图和最宽的compass的logo对齐。

$icons-arrow-repeat: repeat-x;

2-3、配置图标的位置

有时候,移动一个 图标的位置是非常有帮助的,Compass允许你通过设置位置变量来横向 移动图片

$<map>-position: 0px;
$<map>-<sprite>-position: 0px;

这个变量调整了雪碧图中图标的横向位置。其默认值为0px,意味着每个图标都是左对齐 的。这个值可以是百分比,也可以是像素值。

$icons-position: 4px;
$icons-clubs-position: 100%;

在这个例子里,雪碧图中的每个图标都被右移了4个像素,并且梅花移动到了最 右边

2-4、设置图标的布局

Compass有以下几种图标的布局可供选择:

$<map>-layout: vertical/horizontal/diagonal/smart;

默认的布局是vertical,从整体上影响雪碧图布局,告知Compass如何排布所有的图标。

大多数情况下,你可能需要将布局设置为smart,这种布局会让Compass产生最小的空白区域。

位置和重复性的设置只会应用到横向或纵向布局的雪碧图中。对于采用智能布局或对角线 布局的雪碧图,位置和重复性的设置是无效的

2-5、清除过期的雪碧图

当添加、删除或改变图片后,会生成新的雪碧图。Compass会自动为你移除旧的雪碧图, 或者你也可以把它们保留下来

$<map>-clean-up: true/false;

默认情况下,当生成新的雪碧图时,Compass会自动把旧的移除。这会避免你的硬盘被不 再使用的文件填满,同时也确保你不会困惑自己的样式表到底在使用哪个文件。如果你喜欢手动 移除旧的雪碧图,你也可以将其设置为false

3、生成雪碧图的CSS

Compass 有两个很顺手的混合器,可以自动生成雪碧图的CSS

@include all-<map>-sprites;
@include <map>-sprite($name);

这里的<map>是一个占位符,它会被替换为包含雪碧图标的文件夹的名称,这里是 icons,all-sprites 混合器会为整个雪碧图撰写所有必要的CSS。

第二个混合器将会输出一个独立命名图标的CSS,这两个混合器都会随着图标的导入而创建,因此,它们只能在导入之后使用

3-1、all-sprites混合器

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

这个all-icons-sprites混合器将会为雪碧图中的每个图标撰写必要的CSS

.icons-sprite,
.icons-arrow,
.icons-attachment,
.icons-box-add, ... {
background: url(‘/images/icons-s0cad3f8f97.png‘) no-repeat;
}
.icons-arrow { background-position: 0 0; }
.icons-attachment { background-position: -16px -96px; }
.icons-box-add { background-position: 0 -64px; }

现在让我们看看这个混合器都生成了什么:

(1) 它为设置所有来自images/icons/的图标样式创建了一个基础类icons-sprite;

(2) 它为其图标目录下的每一个文件名创建了类;

(3) 它为所有的图标都增加了背景图片;

(4) 它为所有的图标都增加了背景位置。

默认情况下,Compass不会设置这些元素的宽和高。Compass可以自动生成图标的尺寸,但我们不一定总需要它

3-1、single-sprites混合器

这个图标会针对单个的图标输出CSS

@import "compass/utilities/sprites";
@import "icons/*.png";
.add-button {
@include icons-sprite(box-add);
}

输出的CSS 如下:

.icons-sprite,
.add-button {
background: url(‘/images/icons-s0cad3f8f97.png‘) no-repeat;
}
.add-button { background-position: 0 -358px; }

有了single-sprite混合器,就没有必要生成一个类名了,因为样式已经包含在了选择器里。当Compass添加background-image和background-position样式时,会直接使用这些选择器,在这个例子里是.add-button。

相比简单方便的all-sprites混合器,这个方式生成更少的CSS,也让你对输出有更多的控制

时间: 2024-11-12 23:46:55

使用 Compass 生成雪碧图的相关文章

compass做雪碧图

由于最近没什么时间好好写博文,我把用sass做雪碧图的关键点贴出来方便自己记忆: config.rb注释 # Set this to the root of your project when deployed: #配置服务器路径 http_path = "http//:www.baidu.com/" #配置css sass images javascripts路径 css_dir = "public/stylesheets" sass_dir = "pu

使用Compass制作雪碧图

遇见好的文章,笔者也会转载.但是正所谓好记性不如烂笔头,单纯的拿来主义也不如自己的亲自实践.所以每次需要转载的文章,我都会自己敲一遍,中间加入一些自己的思考. 这篇文章转载自:http://www.hongkiat.com/blog/compass-image-sprite/ 作者Thoriq Firdaus 译者zEx 前端性能优化,一直是前端开发中非常重要的一环,而其中静态资源特别是图片的优化,又占据了很大的比重.图片优化的方法有很多种,其中非常基本而常用的,就是雪碧图. CSS雪碧图就是将

Sass和Compass制作雪碧图

1.安装好了sass与compass之后设置一个配置文件 2.新增一个雪碧图文件夹用来存放将要合并的图片例如color文件夹 [email protected]命令引用 .Compass看到@import指令的参数为*.png时,它会假定将这个目录下的所有.png图片制作成一张雪碧图 你也可以通过一定的规则让它按照自己需要的图片以及排版来生成相应的雪碧图,设置如下: 第一个框框里面的设置是把所有color文件夹下的图片合成一张大图,同事会编译出对应的css文件. 第二个框框里面的设置是把colo

使用grunt对css中的background图片自动生成雪碧图

公司研发的系统为B/S架构,用户使用浏览器访问系统时,使用浏览器自带工具查看,对图片的请求数极多,多为小图片. 今天想对这个现状进行改善,网上查到一种雪碧图的方案,其实就是使用工具将数量很多的小图片拼成一张大图片,然后css里都引用这张大图片,并指定显示该图片的某一个区域,但这个方案需要手工作很多处理. 于是就想到能不能用目前比较成熟的grunt对前端样式文件自动进行处理,自动生成雪碧图,自动修改样式文件.一搜索果然找到了方案,下面为Gruntfile.js文件的片断: module.expor

简单的使用gulp生成雪碧图

有一个在线工具:https://www.toptal.com/developers/css/sprite-generator.生成雪碧图是极其方便的. 现在呢,我们来试试用gulp来生成雪碧图. 第一步:去淘宝镜像地址(http://npm.taobao.org/)里安装cnpm. $ npm install -g cnpm --registry=https://registry.npm.taobao.org 由于npm安装插件是从国外服务器下载,受网络影响很大,所以我们可以选装淘宝的cnpm

使用grunt生成雪碧图

作为一名前端开发人员,实现前端自动化是一项大大节省开发时间的有效手段: 这样开发人员可以更好更专注于前端代码的开发,而不用过多关注于css压缩,js 检测这样的繁琐的工作. 本文主要介绍使用grunt实现前端雪碧图生成,以及生成相应的css文件, 安装grunt,这部分就不多说了,具体内容参考http://www.gruntjs.net/ grunt首页详细介绍了grunt的安装步骤以及基本的使用基础. 安装完成grunt后,下一步骤就是完成基本的配置工作,主要工作就是实现package.jso

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? 最近项目中需要使用到很多小图片,想用

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

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

css sprite,css雪碧图生成工具V3.0更新

什么是css sprite CSS sprite在国内很多人叫css精灵,是一种网页图片应用处理方式.它允许你将一个页面涉及到的所有零星图片都包含到一张大图中去,这样一来,当访问该页面时,载入的图片就不会像以前那样一幅一幅地慢慢显示出来了. 为什么要用这个工具 1.加快网页加载速度 浏览器接受的同时请求数是10个,如果图片过多会影响整体的视觉效果,而且对于不稳定的网络带宽,加载起来更是噩梦,所以把图片拼接为一张大图,从而加快加载速度,以及加速页面渲染 2.后期维护简单 该工具可以直接通过选择图片