摘要:使用雪碧圖,能夠減少頁面的請求數(shù)降低圖片占用的字節(jié),以此來達(dá)到提升頁面訪問速度的目的。也正是因?yàn)檫@一點(diǎn),導(dǎo)致很多開發(fā)者懶于使用雪碧圖。本文就介紹下怎樣使用來自動合并雪碧圖。生成的每個雪碧圖默認(rèn)的規(guī)則是目錄名圖片名。
css雪碧圖又叫css精靈或css sprite,是一種背景圖片的拼合技術(shù)。使用css雪碧圖,能夠減少頁面的請求數(shù)、降低圖片占用的字節(jié),以此來達(dá)到提升頁面訪問速度的目的。但是它也有令人詬病的地方,就是拼圖和后期維護(hù)的成本比較大。也正是因?yàn)檫@一點(diǎn),導(dǎo)致很多開發(fā)者懶于使用css雪碧圖。
對于這種耗時、枯燥、重復(fù)性的工作,最好的解決方法還是交給工具去處理。本文就介紹下怎樣使用compass來自動合并css雪碧圖。
安裝compass首先請確認(rèn)電腦已經(jīng)安裝ruby及sass環(huán)境,ruby及sass的安裝過程可參考:
sass入門指南
安裝完成后可通過以下指令確認(rèn):
$ ruby -v ruby 2.0.0p451 (2014-02-24) [x64-mingw32] $ sass -v Sass 3.4.6 (Selective Steve)
接著安裝compass:
$ gem install compass // 查看compass版本 $ compass -v Compass 1.0.1 (Polaris)
ps: 本文中代碼運(yùn)行環(huán)境為:sass: 3.4.6, compass: 1.0.1, 測試時請確認(rèn)sass版本不低于3.4.6,compass版本不低于1.0.1。
配置compass項(xiàng)目進(jìn)入項(xiàng)目目錄,命令行中運(yùn)行:
$ compass init
會生成相應(yīng)的目錄和配置文件。在images目錄下建立share目錄存放需合并的圖標(biāo)。項(xiàng)目目錄結(jié)構(gòu)如下:
- sass - stylesheet - images |-- share |-- magic |-- setting
config.rb文件配置如下:
http_path = "/" css_dir = "stylesheets" sass_dir = "sass" images_dir = "images" javascripts_dir = "javascripts" relative_assets = true // 使用相對目錄 line_comments = false // 關(guān)閉行注釋
完整的項(xiàng)目目錄示例可在github上查看:https://github.com/Bubblings/compass-sprite
合并雪碧圖 輸出所有雪碧圖樣式在sass目錄下新建share.scss文件,并寫入以下代碼:
@import "compass/utilities/sprites"; // 加載compass sprites模塊 @import "share/*.png"; // 導(dǎo)入share目錄下所有png圖片 @include all-share-sprites; // 輸出所有的雪碧圖css
命令行調(diào)用compass compile進(jìn)行編譯,此時會發(fā)現(xiàn)images目錄下出現(xiàn)了一個合并后的圖片share-xxxxxxxx.png, stylesheet目錄下生成了對應(yīng)的share.css文件:
.share-sprite, .share-github, .share-qq, .share-weibo { background-image: url("../images/share-s7fefca4b98.png"); background-repeat: no-repeat; } .share-github { background-position: 0 0; } .share-qq { background-position: 0 -23px; } .share-weibo { background-position: 0 -47px; }
至此,我們就實(shí)現(xiàn)了一個簡單的雪碧圖合并,而且只用了三行代碼。是不是有點(diǎn)小激動^_^。
生成的代碼中.share-sprite是雪碧圖的基礎(chǔ)類,后面介紹配置時會詳細(xì)說明。生成的每個雪碧圖默認(rèn)的class規(guī)則是:.目錄名-圖片名。如果想自定義,我們可以通過下面調(diào)用單個雪碧圖的方式來實(shí)現(xiàn)。
在sass目錄下新建single-share.scss文件,并寫入以下代碼:
@import "compass/utilities/sprites"; // 加載compass sprites模塊 @import "share/*.png"; // 導(dǎo)入share目錄下所有png圖片 .test { @include share-sprites(github); }
編譯后的css為:
.share-sprite, .test { background-image: url("../images/share-s7fefca4b98.png"); background-repeat: no-repeat; } .test { background-position: 0 -23px; }利用魔術(shù)精靈選擇器智能輸出
有的時候我們的圖標(biāo)會有多種狀態(tài),比如hover, active, focus, target等。利用compass的魔術(shù)精靈選擇器我們就可以智能的合并各狀態(tài)的圖標(biāo),并輸出對應(yīng)的css。使用時,我們需要將圖標(biāo)按照一定的規(guī)則命名。例如:
weibo.png // 默認(rèn)狀態(tài)圖標(biāo) weibo_hover.png // hover狀態(tài)圖標(biāo) weibo_active.png // active狀態(tài)圖標(biāo)
在sass目錄下新建magic.scss文件,并寫入以下代碼:
@import "compass/utilities/sprites"; @import "magic/*.png"; @include all-magic-sprites;
編譯后的css為:
.magic-sprite, .magic-weibo { background-image: url("../images/magic-s758f6928e8.png"); background-repeat: no-repeat; } .magic-weibo { background-position: 0 0; } .magic-weibo:hover, .magic-weibo.weibo-hover { background-position: 0 -48px; } .magic-weibo:active, .magic-weibo.weibo-active { background-position: 0 -24px; }雪碧圖配置
我們已經(jīng)利用compass實(shí)現(xiàn)了簡單雪碧圖的合成。當(dāng)然compass還提供了很多可供配置的選項(xiàng),下面來一一介紹。
PS: 以下的配置選項(xiàng)不再多帶帶舉例,可參考示例項(xiàng)目中的setting.scss文件。
先來看下配置相關(guān)的語法:
$
說明:
$配置sprite重復(fù)性-spacing: 5px; // 配置所有sprite間距為5px,默認(rèn)為0px $ - -spacing: 10px; // 配置單個sprite間距為10px,默認(rèn)繼承$ -spacing的值
$配置sprite的位置-repeat: no-repeat/repeat-x; // 配置所有sprite的重復(fù)性,默認(rèn)為no-repeat $ - -repeat: no-repeat/repeat-x;// 配置單個sprite的重復(fù)性,默認(rèn)繼承$ -repeat的值
$配置sprite的布局方式-position: 0px; // 配置所有sprite的位置,默認(rèn)為0px $ - -position: 0px; // 配置單個sprite的位置,默認(rèn)繼承$ -position的值
$清除過期的sprite-layout: vertical/horizontal/diagonal/smart; // 默認(rèn)布局方式為vertical
$-clean-up: true/false; // 默認(rèn)值為true
每當(dāng)添加、刪除或改變圖片后,都會生成新的sprite,默認(rèn)情況下compass會自動的移除舊的sprite,當(dāng)然也可以通過配置$
在使用sprite時,compass會自動的生成一個基礎(chǔ)類來應(yīng)用公用的樣式(如background-image),默認(rèn)的類名為$
$魔術(shù)精靈選擇器開關(guān)-sprite-base-class: ".class-name";
上面已經(jīng)介紹了怎樣利用利用魔術(shù)精靈選擇器智能輸出sprite,默認(rèn)情況下compass是開啟這個功能的,也就是說compass默認(rèn)會將以_hover, _active等名字結(jié)尾的圖片自動輸出對應(yīng)的:hover, :active等偽類樣式。當(dāng)然如果不想這樣的話,也可以禁用它。
$disabled-magic-sprite-selectors: false; // 默認(rèn)為true設(shè)置sprite尺寸
我們在合并雪碧圖時,很多時候圖片的尺寸都不一樣,那么在使用時我們?nèi)绾谓o每個sprite設(shè)置尺寸呢?compass有提供自動設(shè)置每個sprite尺寸的配置,默認(rèn)是關(guān)閉的,我們只需手動啟用即可。
$setting-sprite-dimensions: true; // 啟用自動設(shè)置sprite尺寸,默認(rèn)值為false
這時輸出的樣式中會自動加上圖片的尺寸,例如:
.setting-compass { background-position: -5px 0; height: 35px; width: 200px; }
當(dāng)然,如果只對某個sprite多帶帶設(shè)置的話,compass也提供了這個功能。語法如下:
$-sprite-width($name); // $name為合并前的圖片名稱 $ -sprite-height($name);
例如:
.special { @include setting-sprite(compass); width: setting-sprite-width(compass); height: setting-sprite-height(compass); }
則輸出的css為:
.special { background-position: -5px 0; width: 200px; height: 35px; }項(xiàng)目示例
github上放了一個簡單的示例可供參考:
compass合并雪碧圖示例代碼
原文地址:http://riny.net/2014/compass-sprite/
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/111023.html
摘要:無論是早期工具,還是現(xiàn)在流行的配合這類構(gòu)建工具而產(chǎn)生的雪碧圖插件。 本文原文鏈接:https://devework.com/postcss-...,轉(zhuǎn)載請注明原始來源,謝謝! showImg(https://segmentfault.com/img/bVPmaC?w=1692&h=754); postcss-lazysprite 是一個基于PostCSS 開發(fā)的用于生成雪碧圖圖片及其C...
摘要:預(yù)處理方案代表和預(yù)處理方案是預(yù)先指定需要生成的雪碧圖切片元素,由工具合成后,得到相應(yīng)的雪碧圖和數(shù)據(jù)文件,開發(fā)中將二者投入使用。預(yù)處理方案一般以頁面為單元組織雪碧圖。結(jié)語關(guān)于雪碧圖的處理方案的討論就到此結(jié)束了。 廣告:SF 里弄了個 CSS 小圈子,歡迎一起來討論問題 前端小圖標(biāo)處理方案眾多,本文主要介紹基于雪碧圖的處理方案,分析雪碧圖的預(yù)處理和后處理模式的得與失,以及在項(xiàng)目中通常會遇到...
摘要:編寫配置文件,以下是關(guān)鍵配置代碼雪碧圖合并輸出到文件參數(shù)執(zhí)行目錄參數(shù)生成的和圖片的文件名之所以推薦,是因?yàn)榉浅5撵`活,看懂模塊的可以根據(jù)你的項(xiàng)目情況編寫對應(yīng)的配置文件。 showImg(https://segmentfault.com/img/bVGpAw?w=518&h=156); 前言 網(wǎng)站開發(fā)90%會用到小圖標(biāo), 多小圖標(biāo)調(diào)用顯示是前端開發(fā)常見的問題;目前小圖標(biāo)顯示常見有兩種方式...
摘要:通過本文,我們將學(xué)習(xí)如何使用來改變開發(fā)流程,從而使開發(fā)更加快速高效。中文網(wǎng)站詳細(xì)入門教程使用是基于的,需要要安裝為了確保依賴環(huán)境正確,我們先執(zhí)行幾個簡單的命令檢查。詳盡使用參見官方文檔,中文文檔項(xiàng)目地址 為了UED前端團(tuán)隊更好的協(xié)作開發(fā)同時提高項(xiàng)目編碼質(zhì)量,我們需要將Web前端使用工程化方式構(gòu)建; 目前需要一些簡單的功能: 1. 壓縮HTML 2. 檢查JS 3. 編譯SA...
摘要:介紹是一個模塊化的雪碧圖生成工具會根據(jù)目錄中的圖片生成相應(yīng)的雪碧圖和樣式文件,支持圖,可以內(nèi)嵌編碼格式的圖,支持不同的圖片格式和有不同的圖片引擎可以選擇。 介紹 sprity 是一個模塊化的雪碧圖生成工具會根據(jù)目錄中的圖片生成相應(yīng)的雪碧圖和樣式文件,支持retina圖,可以內(nèi)嵌base64 編碼格式的圖,支持不同的圖片格式和有不同的圖片引擎可以選擇。sprity 的前身是css-sp...
閱讀 1341·2021-11-15 11:37
閱讀 2220·2021-09-23 11:21
閱讀 1307·2019-08-30 15:55
閱讀 2112·2019-08-30 15:55
閱讀 2821·2019-08-30 15:52
閱讀 2826·2019-08-30 11:12
閱讀 1581·2019-08-29 18:45
閱讀 1894·2019-08-29 14:04