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