使用 Compass 生成雪碧圖

使用 Compass 創建一個項目


要在一個新項目中使用 Compass,可以打開命令行工具並輸入如下指令

compass create my-project


如果 my-project 目錄不存在,上述命令會創建一個叫做 my-project 的目錄,並在其中添加以下文件:

wKioL1hjJpGTu5VpAAAkZMXTHik172.png


如果你沒有爲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圖片)

wKioL1hjKqfxZqa0AABAhpv2YDU449.png


1、創建一個雪碧圖


打開 screen.scss 並加入如下代碼:

// 加載compass sprites模塊
@import "compass/utilities/sprites";

//告訴Compass根據images/icons/目錄下的所有PNG圖片生成一張雪碧圖
@import "icons/*.png";


命令行工具通過如下指令來執行編譯

compass watch


最終在 images 文件夾下生成了一個豎向排布的 icons-sac817bc43c.png

wKiom1hjLPbDKLLPAAApEQfhqSk806.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";


wKioL1hjMxuw1ndjAAAjW3E5Znc227.pngwKioL1hjMzfijek-AAAjW3E5Znc197.png


自動刪除了之前的圖片,並生成一個新的 icons-s1a799c6c79.png

wKiom1hjM3DCWjYFAAAQ8j5v1Hs514.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個像素,並且梅花移動到了最 右邊

wKioL1hjOYCwX_qYAAATck0YIe8156.png



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,也讓你對輸出有更多的控制








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章