• Web优化系列,雪碧图


    前言

    我们在开发网站的时候,通常会把常用的图标合并成css sprite(雪碧图),可以有效的减少站点的http请求数量,从而提高网站性能。

    下面让我们一起来学习一下如何使用webpack合并sprite图。

    准备

    • webpack
    • webpack-spritesmith插件
    • file-loader
    • sass-loader(因为webpack-spritesmith除了生成雪碧图之外,还会生成相应的mixin,使用起来很方便,所以要用sass)
    • 这里我还使用了ExtractTextPlugin来提取css文件,这不是必须的你也可以不用,用的话需要安装extract-text-webpack-plugin这个插件

    使用npm安装好上面的东西

    下面请开始我们的表演

    step1:将我们要合并的图标准备好,放在src下的ico文件夹下

    给大家分享一个好用的icon下载网站,里面的图标风格我很喜欢,而且是免费的哦,大家也可以到里面去下载自己喜欢的icon用于本次练习

    57,900 个免费的平面图标

    这是我下载的png图片

    facebooktwittergoogle

    step2 在你的webpack.config.js中按下面这样编写

    const path = require('path');
    const SpritesmithPlugin = require('webpack-spritesmith');
    
    module.export = {
        // ...
        module: {
            rules: [
                {
                    test: /png$/
                    loader:[
                        'file-loader?name=i/[hash].[ext]'
                    ]
                },
                {
                    test: /.(css|scss)$/,
                    use: ExtractTextPlugin.extract({
                        fallback: 'style-loader',
                        use: ['css-loader', 'postcss-loader', 'sass-loader']
                    })
                }
            ]
        },
    
        resolve: {
            modules: [
                'node_modules',
                'assets/sprite' //css在哪里能找到sprite图
            ]
        },
    
        plugins: [
            new SpritesmithPlugin({
                src: {
                    cwd: path.resolve(__dirname, 'src/ico'),  //准备合并成sprit的图片存放文件夹
                    glob: '*.png'  //哪类图片
                },
                target: {
                    image: path.resolve(__dirname, 'src/assets/sprites.png'),  // sprite图片保存路径
                    css: path.resolve(__dirname, 'src/assets/_sprites.scss')  // 生成的sass保存在哪里
                },
                apiOptions: {
                    cssImageRef: "~sprite.png" //css根据该指引找到sprite图
                }
            })
        ]
    }

    step3 在你的scss文件中@import导入生成的文件

    @import '../../../assets/sprite/_sprite.scss'; //路径请自行更改
    
    .facebook{ 
        @include sprite($facebook); 
    }
    
    .twitter{ 
        @include sprite($twitter); 
    }
    
    .google{ 
        @include sprite($google); 
    }

    step4 运行webpack,看到我们的sprite图已经被用在我们的站点上了

    /assets/sprite/sprite.png就是我们生成的sprite图了

    最后看看应用在网站上的效果

    总结

    好了,以上就是webpack生成css sprite的办法了,是不是觉着很简单呢,如果本文对您有帮助,请记得点个赞哦。

  • 相关阅读:
    leetcode 141 环形链表
    [转载]Tensorflow中reduction_indices 的用法
    SIFT特征原理与理解
    numpy切片和布尔型索引
    IPython的使用
    [文献阅读]基于卷积神经网络的高光谱图像深度特征提取与分类
    验证码校验
    防止表单重复提交
    MyBatis 一对一,一对多,多对多
    MySQL基础内容
  • 原文地址:https://www.cnblogs.com/magicg/p/12844684.html
Copyright © 2020-2023  润新知