用指南针创建CSS图像精灵

CSS Image Sprite是一种将多个图像组合到一个图像文件中的方法,以减少HTTP请求并优化Web负载性能 有很多方法和方便的工具可以执行此操作,否则您也可以使用Photoshop传统上执行此操作。

但是,根据我处理CSS Image Sprite的全部经验,没有比使用Sprite Function for Compass容易得多的方法。 因此,让我们看一下它是如何工作的。

推荐读物语法很棒的样式表:在Sass中使用指南针

启动指南针

在使用Compass代码之前,我们需要创建Compass项目watch。 因此,每当项目(包括图像和.scss发生更改时,Compass都会将其编译为适当的格式。

让我们打开终端或命令提示符(如果您在Windows上),然后运行以下命令。

compass create /path/to/project
cd /path/to/project
compass watch

合并影像

如上所述,您可以使用Photoshop手动加入图像,也可以使用一些方便的工具,例如SpriteBox 指南针将此功能集成到功能中。 假设我们在images / Browsers / <images> .png文件夹下有以下图标。

要在Compass中加入这些图标,我们可以使用@import规则,然后将其定向到图像文件夹,然后通过.scss样式表将其扩展为图像,如下所示

@import "browsers/*.png";

保存文件后,Compass将合并这些图像并生成新的图像文件,如下所示。

用指南针创建CSS图像精灵
布局方向

此外,我们还可以设置精灵方向。 如您在上面的屏幕快照中所见,默认情况下图像是垂直排列的。 如果垂直方向不适合这种情况,我们可以使用以下变量$<map>-layout: horizontal;将它们水平或对角$<map>-layout: horizontal; $<map>-layout: horizontal; <map>替换为保存图像的文件夹名称。

卧式

$browsers-layout:horizontal;
@import "browsers/*.png";
用指南针创建CSS图像精灵

对角线

$browsers-layout:vertical;
@import "browsers/*.png";
用指南针创建CSS图像精灵

在样式表中添加图像

完成图像组合后,我们通过背景图像将图像添加到样式表中。 传统上,我们将采用这种方式。

.chrome { 
	background-position: 0 0; width: 128px; height: 128px; 
} 
.firefox { 
	background-position: 0 -133px; width: 128px; height: 128px; 
} 
.ie { 
	background-position: 0 -266px; width: 128px; height: 128px; 
} 
.opera { 
	background-position: 0 -399px; width: 128px; height: 128px; 
} 
.safari { 
	background-position: 0 -532px; width: 128px; height: 128px; 
} 

在Compass中,我们有两种更简单的方法。 首先,我们可以使用@include all-<map>-sprites;语法生成类似于这些CSS规则的@include all-<map>-sprites; <map>替换为我们存储图像的文件夹。

@include  all-browsers-sprites;

当编译为常规CSS时,上面的这一行生成背景图像定义以及每个位置,如下所示。

.browsers-sprite, .browsers-chrome, .browsers-firefox, .browsers-ie, .browsers-opera, .browsers-safari {
  background: url('/images/browsers-sad8e949931.png') no-repeat;
}
.browsers-chrome {
	background-position: 0 0;
}
.browsers-firefox {
	background-position: 0 -128px;
}
.browsers-ie {
	background-position: 0 -256px;
}
.browsers-opera {
	background-position: 0 -384px;
}
.browsers-safari {
	background-position: 0 -512px;
}

或者,我们也可以使用@include <map>-sprite(image-naem);语法将背景图像单独添加到特定选择器中@include <map>-sprite(image-naem); ; 就像以前的代码一样,将<map>替换为我们存储这些图像的文件夹。 这是一个例子。

li {
	@include browsers-sprite(safari);
}

然后,指南针足够聪明地识别背景位置,而无需我们明确指定背景位置。 在常规CSS中,上面的这一行将变成

.browsers-sprite, li {
  background: url('/images/browsers-sad8e949931.png') no-repeat;
}
li {
	background-position: 0 -512px;
}

指定容器尺寸

我们需要做的最后一件事是指定包含图像的容器的heightwidth 我们通常以传统方式通过手动检查图像的widthheight (最有可能通过图像信息或图像属性)来执行此操作。

使用Compass,我们可以利用此功能<map>-sprite-height(image-name)<map>-sprite-width(image-name)检索图像的宽度和高度。 在此示例中,我们将检索图像的widthheight之一@include储值变量,并使用@include指令分配背景图像。

$height: browsers-sprite-height(safari);
$width: browsers-sprite-width(safari);
li {
	display: inline-block;
	height: $height;
	width: $width;
	@include browsers-sprite(safari);
}

当我们在上面编译这些代码时,在常规CSS中会变成以下代码。

.browsers-sprite, li {
	background: url('/images/browsers-sad8e949931.png') no-repeat;
}
li {
	display: inline-block;
	height: 128px;
	width: 128px;
	background-position: 0 -512px;
}

结论

实际上,Compass还可以使用其他一些有用的功能,但是这些都是使用Compass创建CSS Image Sprite的必不可少的功能。 不过,如果您不熟悉该主题,我们建议您按照之前有关Sass和Compass的系列文章进行。 我们希望您发现这篇文章有用。

翻译自: https://www.hongkiat.com/blog/compass-image-sprite/