一、什么是雪碧图?
CSS雪碧 即CSS Sprite,也有人叫它CSS精灵,是一种CSS图像合并技术,该方法是将小图标和背景图像合并到一张图片上,然后利用css的背景定位来显示需要显示的图片部分。
二:为什么要用雪碧图
结合我们公司的需求来说,因为有很多组件,每个组件下有大概50张图片,每张图片是一个请求,也就是发了300多个请求,这样是很可怕的,所以为了优化性能,减少http请求,决定采用雪碧图的形式。
雪碧图是将你想要的很多张图片整理成一张图片,然后通过background-*来进行图片识别和定位来达到之前的效果。
三:如何使用雪碧图
雪碧图在之前有很多方式,如ps之类,现在最佳的方案还是在webpack-spritesmith。
我其实对webpack并不是很了解,我现在列出使用方法和我在使用webpack时候遇到的问题。
1.安装
执行命令行:npm install --save-dev webpack-spritesmith
2.在webpack.config.js中写入
var path = require('path')
var SpritesmithPlugin = require('webpack-spritesmith')
//自定义样式
var templateFunction = function (data) {
var shared = '.ico { background-size: TWpx THpx }'
.replace('TW', data.sprites[0].total_width / 2)
.replace('TH', data.sprites[0].total_height / 2)
var perSprite = data.sprites.map(function (sprite) {
return '&.element-N {\n width: Wpx;\n height: Hpx;\n background-position: Xpx Ypx;\n}'
.replace('N', sprite.name)
.replace('W', sprite.width / 2)
.replace('H', sprite.height / 2)
.replace('X', sprite.offset_x / 2)
.replace('Y', sprite.offset_y / 2)
.replace('TW', sprite.total_width / 2)
.replace('TH', sprite.total_height / 2)
}).join('\n')
return shared + '\n' + perSprite
}
module.exports = {
...
module: {
rules: [
{test: /\.styl$/, use: [
'style-loader',
'css-loader',
'stylus-loader'
]},
{test: /\.png$/, use: [
'file-loader"htmlcode">
src: {
//引入路径
cwd: path.resolve(__dirname, 'src/images/ios/'),
glob: '*.png' //这里进行更改
},
这里可以参考在这里根据需求进行设置:http://www.globtester.com/
把glob改成
@(wechat|element|ios)/images/*.png
效果
五:更深层次的需求
我其实是想在各自的文件夹下的图片,生成各自文件夹下的雪碧图和css,那该如何实现呢,我写了一部分,还没有写完,感觉遇到了技术难点,我呈现出代码,会继续优化来实现
var path = require('path')
var SpritesmithPlugin = require('webpack-spritesmith')
var platforms = ['android', 'ant', 'element', 'ios', 'wechat']//, 'windows']
// var url = 'ant'
const TARGET = process.env.TARGET
console.log({ TARGET })
module.exports = [TARGET].map(l => {
console.log(l)
const url = l
const fn = (data) => {
console.log(url)
var shared = 'background-size: TWpx THpx\n'
.replace('TW', data.sprites[0].total_width / 2)
.replace('TH', data.sprites[0].total_height / 2)
var perSprite = data.sprites.map(function (sprite) {
return `&.${url}-N {\n width: Wpx;\n height: Hpx;\n background-position: Xpx Ypx;\n}\n`
.replace('N', sprite.name)
.replace('W', sprite.width / 2)
.replace('H', sprite.height / 2)
.replace('X', sprite.offset_x / 2)
.replace('Y', sprite.offset_y / 2)
.replace('TW', sprite.total_width / 2)
.replace('TH', sprite.total_height / 2)
}).join('\n')
return shared + '\n' + perSprite
}
return {
module: {
rules: [
{test: /\.styl$/, use: [
'style-loader',
'css-loader',
'stylus-loader'
]},
{test: /\.png$/, use: [
'file-loader?name=i/[hash].[ext]'
]}
]
},
entry: {
[url]: path.join(__dirname, url),
},
output: {
path: path.join(__dirname, '../parsed/', url),
filename: '[name].css'
},
resolve: {
modules: ['node_modules', 'spritesmith-generated']
},
plugins: [
new SpritesmithPlugin({
src: {
cwd: path.resolve(__dirname, 'images/'+url+'/'),
glob: '*.png' // '@(android|ant|element|ios|wechat|windows)/*.png'
},
target: {
image: path.resolve(__dirname, '../parsed/'+url+'/'+url+'.png'),
css: [
[path.resolve(__dirname, '../parsed/'+url+'/'+url+'.css'), {
format: 'function_based_template'
}]
]
},
customTemplates: {
'function_based_template': fn
}
})
]
}
})
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
P70系列延期,华为新旗舰将在下月发布
3月20日消息,近期博主@数码闲聊站 透露,原定三月份发布的华为新旗舰P70系列延期发布,预计4月份上市。
而博主@定焦数码 爆料,华为的P70系列在定位上已经超过了Mate60,成为了重要的旗舰系列之一。它肩负着重返影像领域顶尖的使命。那么这次P70会带来哪些令人惊艳的创新呢?
根据目前爆料的消息来看,华为P70系列将推出三个版本,其中P70和P70 Pro采用了三角形的摄像头模组设计,而P70 Art则采用了与上一代P60 Art相似的不规则形状设计。这样的外观是否好看见仁见智,但辨识度绝对拉满。
更新动态
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]