1. 程式人生 > >(8/24) 圖片跳坑大戰--css中的圖片處理

(8/24) 圖片跳坑大戰--css中的圖片處理

web 參數 拷貝 ons document ide 前言 inf spa

前言:此節的開展是在上一節的基礎上進行的,(每一節都是從無到有編寫關於此節的知識),最後會附上相關完整代碼。上一節

CSS中的圖片處理

技術分享圖片

1.新建images文件夾

在src目錄下新建一個images文件夾,把需要的圖片放入images文件夾。圖片下載

2.新增標簽

在index.html文件中增加一個放置div的標簽(需要註意的是這裏修改的是src下的index.html文件,不是dist下的),代碼如下:

<div id="img"></div>

3.編寫樣式

在src目錄下的css目錄下的index.css文件中編寫樣式,如下,

src/css/index.css:

body{
    background-color: #018eea;
    color: red;
    font-size: 32px;
    text-align: center;
}
#img{
    background-image: url(../images/webapck.jpg);
    width:271px;
    height:285px;
}

4.loader安裝

使用npm在終端安裝file-loaderurl-loader

npm install --save-dev file-loader url-loader

關於file-loaderurl-loader

,下面了解一下:

(1)file-loader:解決引用路徑的問題,拿background樣式用url引入背景圖來說,我們都知道,webpack最終會將各個模塊打包成一個文件,因此我們樣式中的url路徑是相對入口html頁面的,而不是相對於原始css文件所在的路徑的。這就會導致圖片引入失敗。這個問題是用file-loader解決的,file-loader可以解析項目中的url引入(不僅限於css),根據我們的配置,將圖片拷貝到相應的路徑,再根據我們的配置,修改打包後文件引用路徑,使之指向正確的文件。

(2)url-loader:如果圖片較多,會發很多http請求,會降低頁面性能。這個問題可以通過url-loader解決。url-loader會將引入的圖片編碼,生成dataURl。相當於把圖片數據翻譯成一串字符。再把這串字符打包到文件中,最終只需要引入這個文件就能訪問圖片了。當然,如果圖片較大,編碼會消耗性能。因此url-loader提供了一個limit參數,小於limit字節的文件會被轉為DataURl,大於limit的還會使用file-loader進行copy。

5.配置url-loader

安裝之後,開始使用loader,此時在loader使用時不需要用require引入,在plugins才需要使用require引入。

webpack.config.js文件:

 //模塊:例如解讀CSS,圖片如何轉換,壓縮
    module:{
        rules: [
            {
              test: /\.css$/,
              use: [ ‘style-loader‘, ‘css-loader‘ ]
            },{
               test:/\.(png|jpg|gif)/ ,
               use:[{
                   loader:‘url-loader‘,
                   options:{
                       limit:500000
                   }
               }]
            }
          ]
    },

註釋:

  • test:/.(png|jpg|gif)/是匹配圖片文件後綴名稱。

  • use:指定使用的loader和loader的配置參數。

  • limit:是把小於500000B的文件打成Base64的格式,寫入打包後的js中。

此處只是其中一種配置方式,其余可參考

為什麽只使用了url-loader?

在配置loader時,我們並沒有在webpack.config.js中使用file-loader,但是依然打包成功了。這個和file-loader和url-loader之間的關系有關。url-loader和file-loader是什麽關系呢?簡單的說,url-loader封裝了file-loader,url-loader不依賴於file-loader,即使用url-loader時,只需要安裝url-loader即可,不需要安裝file-loader,因為url-loader內置了file-loader。url-loader工作分兩種情況:

1.文件大小小於limit參數,url-loader將會把文件轉為DataURL(Base64格式);

2.文件大小大於limit,url-loader會調用file-loader進行處理,參數也會直接傳給file-loader。

也就是說,其實我們只安裝一個url-loader就可以了。但是為了以後的操作方便,這裏就順便安裝上file-loader。

6.打包

在終端使用webpack命令進行打包。

webpack

技術分享圖片

7.啟動服務

在終端中執行npm run server命令,啟動我們的服務,然後通過 http://localhost:1818/ 進行訪問。

技術分享圖片

訪問效果如下:

技術分享圖片

相關完整代碼:

src/index.html:

技術分享圖片
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>webpack</title>
</head>
<body>
<div id="img"></div>
<div id="title"></div>
</body>
</html>
View Code

src/entry.js:

技術分享圖片
import css from ‘./css/index.css‘
document.getElementById(‘title‘).innerHTML=‘Hello Webpack‘;
View Code

src/css/index.css:

技術分享圖片
body{
    background-color: #018eea;
    color: red;
    font-size: 32px;
    text-align: center;
}
#img{
    background-image: url(../images/webapck.jpg);
    width:271px;
    height:285px;
}
View Code

package.json:

技術分享圖片
{
  "name": "webpack3",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "server": "webpack-dev-server"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "css-loader": "^2.0.0",
    "file-loader": "^2.0.0",
    "html-webpack-plugin": "^3.2.0",
    "style-loader": "^0.23.1",
    "url-loader": "^1.1.2",
    "webpack": "^3.6.0",
    "webpack-dev-server": "^2.9.7"
  }
}
View Code

webpack.config.js:

技術分享圖片
const path = require(‘path‘);
const uglify = require(‘uglifyjs-webpack-plugin‘);
const htmlPlugin= require(‘html-webpack-plugin‘);
module.exports={
    //入口文件的配置項
    entry:{
        entry:‘./src/entry.js‘,
        //這裏我們又引入了一個入口文件
        entry2:‘./src/entry2.js‘,
    },
    //出口文件的配置項
    output:{
        //輸出的路徑,用了Node語法
        path:path.resolve(__dirname,‘dist‘),
        //輸出的文件名稱
        filename:‘[name].js‘
    },
    //模塊:例如解讀CSS,圖片如何轉換,壓縮
    module:{
        rules: [
            {
                test:/\.css$/,
                use:[‘style-loader‘,‘css-loader‘]
            },
            {
                test:/\.(png|jpg|gif)/,
                use:[{
                    loader:‘url-loader‘,
                    options:{
                        limit:500000
                    }
                }
                ]
            }
        ]
    },
    //插件,用於生產模版和各項功能
    plugins:[
        // new uglify(),
        new htmlPlugin({
            minify:{
                removeAttributeQuotes:true
            },
            hash:true,
            template:‘./src/index.html‘
        })
    ],
    //配置webpack開發服務功能
    devServer:{
        contentBase:path.resolve(__dirname,‘dist‘), //絕對路徑
        host:‘localhost‘,
        compress:true,
        port:1818
    }
}
View Code

(8/24) 圖片跳坑大戰--css中的圖片處理