在前端项目中,为了减少对图片的请求次数,一般而言需要进行雪碧图的配置。即将多张小图标合并成一张图片,这样页面中的小图标都在一张图片上,只需请求一张图片,就可以通过CSS设置各个小图标的显示,利于节省带宽和资源。

雪碧图插件一般还支持快速引用小图标,例如当我们需要在html中放入service.png这张图片时,我们只需要使用<i class="icon icon-service"></i>这样的简单引入方式,省去了繁琐的引入图片的样式编写,大大提升效率。

在Vue-cli 3.0项目中常用webpack-spritesmith进行相关配置,该插件的文档不太直观,并且文档中基于webpack,而vue-cli 3.0的配置是与webpack有所差异的。本文着眼于探讨基于vue-cli3.0项目的该插件的配置方法,使用vue-cli3.0的链式操作进行配置示例。

安装

npm i webpack-spritesmith

引入

const path = require('path');

const SpritesmithPlugin = require('webpack-spritesmith');

使用插件

const templateFunction = function(data) {
var shared = ".icon { display: inline-block; vertical-align: middle; background-image: url(I) }".replace(
"I",
data.sprites[0].image
); var perSprite = data.sprites
.map(function(sprite) {
return ".icon-N { width: Wpx; height: Hpx; background-position: Xpx Ypx; }"
.replace("N", sprite.name)
.replace("W", sprite.width)
.replace("H", sprite.height)
.replace("X", sprite.offset_x)
.replace("Y", sprite.offset_y);
})
.join("\n"); return shared + "\n" + perSprite;
}; module.exports = {
chainWebpack: config => {
// 将小图标拼接成雪碧图
config.plugin("webpack-spritesmith").use(Spritesmith, [
{
src: {
cwd: "./src/assets/images/icon/",
glob: "*.png"
},
target: {
image: "./src/assets/images/sprite/sprite.png",
css: [
[
path.resolve(__dirname, "./src/assets/scss/icon/_sprite.scss"),
{
// 引用自己的模板
format: "function_based_template"
}
]
]
},
apiOptions: {
cssImageRef: "../../images/sprite/sprite.png"
},
customTemplates: {
function_based_template: templateFunction
},
spritesmithOptions: {
algorithm: "binary-tree",
padding: 10
}
}
]);
}
}

参数说明

  • src 配置创建雪碧图的源文件

    – cwd 要创建雪碧图的源文件夹

    – glob 要创建雪碧图的源文件类型

即将src.cwd路径下的所有匹配src.glob的源文件生成雪碧图。以上案例中,./src/assets/images/icon/路径下的所有.png文件都会拼接到雪碧图。

  • target 配置生成的雪碧图文件

    – img 生成的雪碧图路径和文件名

    – css 引用生成的雪碧图的样式文件的路径和模板等配置

在上述案例中,生成的雪碧图的路径是../src/assets/images/sprite/sprite.png,生成的引用雪碧图的样式文件的路径是./src/assets/scss/icon/_sprite.scss,并且_sprite.scss中的内容在function_based_template中定义,而function_based_template则在customTemplates中定义。

  • apiOptions 可选,配置引用生成的雪碧图的一些细节

  – cssImageRef 配置在样式文件中引用雪碧图的路径

具体来说,虽然target.img已经配置好了生成的雪碧图路径,但是,生成的样式文件_sprite.scss中,还需要通过scss引用雪碧图,比如background-image: url(../../images/sprite/sprite.png),因此需要使用apiOptions.cssImageRef设置background-image引用雪碧图的路径。

  • customTemplates 可选,配置生成样式文件的样式模板

具体来说,我们在target.css选项中,将format设置为“function_based_template”,那么,最终生成的样式文件中的内容将是样式模板function_based_template定义的形式。function_based_template便需要在customTemplates 中定义。

以上案例中,function_based_template的值是templateFunction,那么将按templateFunction中的返回值生成样式内容。即生成的全是.icon {…} .icon-N{…}的形式。

案例中之所以这样设计,是为了方便直接在html中使用<i class='icon icon-N'></i>的形式,这样将直接加载出对应的图标,其中N是图标的名称。

  • spritesmithOptions 可选, spritesmith的配置。

spritesmith是另一个插件,webpack-spritesmith使用了spritesmith。spritesmithOptions 选项用来配置在spritesmith中可用的那些配置。

   – algorithm 配置生成雪碧图的算法。比如设为“binary-tree”,则雪碧图看起来正正方方,还可以设为top-down、left-right、diagonal、alt-diagonal,不同值之间拼接小图标的方式不同,因此最终的雪碧图形状不同。

   – padding 配置雪碧图中小图标之间的间距,可根据需要设置。

最新文章

  1. Redis 5种数据结构使用及注意事项
  2. Codeforces #256 Div.2
  3. EntityFramework 更新表结构到数据库
  4. 就Double、Decimal来说数据计算异常
  5. Blog 入职新公司的一些吐槽!
  6. IntelliJ IDEA Subversion的使用方式
  7. 移动App设计之分层架构+MVC
  8. vue 单页面应用实战
  9. Jumony Core 3,真正的HTML引擎
  10. 3101: N皇后
  11. 使用jemeter手工编写注册、登陆脚本 运用 fiddler (一)
  12. vxworks下的串口测试程序
  13. 2018/1.6 Javascript 继承和克隆
  14. MySQL函数--(1)
  15. MVC4程序运行报错
  16. mac subLime3 JSON 格式化插件安装
  17. python 中的map,dict,lambda,reduce,filter
  18. nrf24l01 IRQ一直为高电平
  19. gradle tool升级到3.0注意事项
  20. Cal Cat for Mac(猫咪控日历工具)安装

热门文章

  1. CSS的选择器分为两大类
  2. pyhton 信号量Semaphore和BoundedSemaphore
  3. Linux系统安装java jdk
  4. 2017蓝桥杯贪吃蛇(C++C组)
  5. 深入理解== 和 equals 的本质区别
  6. Vue-CLI 3.x 部署项目至生产服务器
  7. CDR
  8. CH5E07 划分大理石(背包dp+二进制拆分)
  9. python3(二十五) getClassInfo
  10. Python 获取任意周期开盘日