vue移动端自适应布局(基于vue-cli)【分分快三计

作者:分分快三计划

Vue3:脚手架配置

与原本的vue-cli 2.x版本不一样的是:假如选拔最新版本的@vue/cli开始化vue项目时,平常看不到webpack的配制文件。而在原先的2.x本子,大家能够在utils.js中轻易配制px2rem有关布置。

原文: juejin.im

1.安装lib-flexibl
npm i lib-flexible --save

安装postcss和postcss-loader和postcss-px2rem:

cnpm i -D postcss postcss-loader postcss-px2rem

npm i lib-flexible -S

6.双重开动项目就可以

安装lib-flexible:

cnpm i -S lib-flexible

然后在build的vue-loader.conf.js配置postcss

4.安装px2rem-loader
npm install px2rem-loader

4. 在根目录下开创配制文件vue.config.js,并配制如下音信

vue.config.js

const path = require("path");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const CleanWebpackPlugin = require("clean-webpack-plugin"); 
const VueLoaderPlugin = require('vue-loader/lib/plugin'); 
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const px2rem = require('postcss-px2rem');

function resolve (dir) {
    return path.join(__dirname,dir)
}
module.exports= {
    mode:"development",
    entry:"./src/main.js",
    output:{
        path:path.resolve(__dirname,"./dist"),
        filename:"main.bundle.js"
    },
    resolve :{
        extensions: ['.js', '.vue', '.json',".css"],
         alias: {
           'vue$': 'vue/dist/vue.esm.js',
           '@': resolve('src'),
         }
    },
    devServer:{
        contentBase:"./dist",
        port:9000,
        open:true,
    },
    plugins:[
        new VueLoaderPlugin(),
        new HtmlWebpackPlugin({
            template:"./public/index.html",
            filename:"index.html"
        }),
        new CleanWebpackPlugin(['./dist']),
        new MiniCssExtractPlugin({
          filename: "color.css",
         // chunkFilename: "[id].css"
        })
    ],

    module:{
        rules:[
            { test: /.vue$/, loader: 'vue-loader'},
            //{test:/.css$/,use:['style-loader','css-loader']},
            {
                test:/.css$/,
                exclude:/node_modules/,
                use:[
                    MiniCssExtractPlugin.loader,
                    'css-loader',
                    {
                        loader:"postcss-loader",
                        options:{
                            plugins:()=>[ 
                                px2rem({remUnit: 75})
                            ]
                        }
                    },
                ]
            },
            {
                test:/.js$/,
                exclude:/(node_modules|bower_components)/,
                use:['babel-loader']
            },
            {
                test:/(png|gif|jp(e)?g)$/,
                use:[
                    {
                        loader:'url-loader',
                        options:{
                            limit:8192
                        }
                    }
                ]
            }

        ]
    }
}

res:
分分快三计划 1

引入在此之前要安装,小编就不写了,如若您忘了还找不到错误,真真的不相符那行。

我们只须求在cssLoader前边加上一个px2remLoader就能够,px2rem-loader的remUnit 选项意思是1rem=多少像素,结合lib-flexible,大家将px2remLoader的option.remUnit 设置成设计稿宽度的1/10,这里大家若是设计稿的宽度为750px ,并将px2remLoader 放进loaders数组中
const px2remLoader = {
loader: 'px2rem-loader',
options: {
remUnit: 75
}
}
// generate loader string to be used with extract text plugin
function generateLoaders (loader, loaderOptions) {
//笔者的类型上本来的是const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader],将他替换到下边的就能够了
const loaders = [cssLoader,px2remLoader]
if (loader) {
loaders.push({
loader: loader '-loader',
options: Object.assign({}, loaderOptions, {
sourceMap: options.sourceMap
})
})
}

1. 安装
npm i node-sass sass-loader scss-loader -D

3.在品种根目录的index.html 底部出席手提式有线电话机端适配的meta的代码
<meta name="viewport" content="width=device-width, initial-scale=1.0">

4.在根目录下创建配制文件vue.config.js,并配制如下音信

vue.config.js

module.exports = {
    css: {
        loaderOptions: {
            css: {
                // options here will be passed to css-loader
            },
            postcss: {
                // options here will be passed to postcss-loader
                plugins: [require('postcss-px2rem')({
                    remUnit: 75
                })]
            }
        }
    }
}

res:
分分快三计划 2

若是或不是,那就那样改,把module.exports的开始和结果改成以上内容。

2.在项目入口文件main.js中引进lib-flexible
import 'lib-flexible/flexible.js'

注:

1.remUnit在这里间要基于lib-flexible的准绳来配制,纵然您的设计稿是750px的,用75就恰恰好。

2.当您碰到1px的边框时,日常轻便发觉页面缺点和失误部分边框,这时你能够选用/no/语法来掩瞒该属性转变,譬喻

border: 1px solid red; /*no*/

3.由于字体的特殊性,大家在编写翻译font-size属性时,平日不行使rem单位,那时候你能够如此使用:

font-size: 24px; /*px*/

仿效文书档案

使用flexible插件时 会自动把px转变到rem单位。在vue-cli中设置过lib-flexible之后 ,将px转变到rem,大家将应用px2rem以此工具, 它有webpack的loader: https://github.com/Jinjiang/px2rem-loader (这是px2rem-loader的github地址)

2. 在品种进口文件main.js中引进lib-flexible

main.js

import'lib-flexible/flexible.js';

.selector {
    width: 150px;
    height: 64px; /*px*/
    font-size: 28px; /*px*/
    border: 1px solid #ddd; /*no*/
}

.selector {
    width: 2rem;
    border: 1px solid #ddd;
}
[data-dpr="1"] .selector {
    height: 32px;
    font-size: 14px;
}
[data-dpr="2"] .selector {
    height: 64px;
    font-size: 28px;
}
[data-dpr="3"] .selector {
    height: 96px;
    font-size: 42px;
}

5.配置px2rem-loader

2. 在项目入口文件main.js中引进lib-flexible

import 'lib-flexible/flexible.js'

先是运营以下命令

本篇文章引自 http://blog.csdn.net/z1712636234/article/details/77881685;

1. 安装

到此处只是调用,剩下的使用情势上边消除。

在vue-cli生成的webpack 配置中,vue-loader 的options和另外样式文件loader 最后都以由build/untils.js里的一个办法生成的。

3.在类型public目录的index.html底部参与手提式有线电话机端适配的meta的代码

然后在main.js使用

参谋资料:

postcss-px2rem:

mini-css-extract-plugin:

{
    test: /.css$/,
    exclude: /node_modules/,
    use: [

     MiniCssExtractPlugin.loader, 
      "css-loader",
    //   "postcss-loader"
      {
          loader:"postcss-loader",
          options:{
              plugins:()=>[ 
              px2rem({remUnit: 75})
            ]
          }
      },

    ]
},

消除难点2

原生配置:

postcss: [
    require('autoprefixer')({
      browsers: ['iOS >= 7', 'Android >= 4.1']
    }),require('postcss-px2rem')({
      rootValue: 75, // 这里对应的是750的设计图尺寸
      selectorBlackList: ['html'],
      mediaQuery: true,
      propBlackList: ['border-radius','border'] // 如果要保持font-size不转换,替换为 ['font-size']
    })
  ]
安装lib-flexible:

npm i -S lib-flexible

npm i -D postcss postcss-loader postcss-px2rem

贴具体代码吧,假如您是比照vux的webpack安装的,只要求展开webpack.base.conf.js文件,然后把最下边包车型地铁module.exports修改为以下内容

3.在类型public目录的index.html尾部参预手提式有线电话机端适配的meta的代码

假使您是依据上边一步步来的,难点4已经缓慢解决了,要是还是不是依照来了,应该如下方法化解。
在main.js里面引进

安装css文件打包插件

cnpm i -D MiniCssExtractPlugin css-loader

const vuxLoader = require('vux-loader')
const webpackConfig = originalConfig // 原来的 module.exports 代码赋值给变量 webpackConfig

module.exports = vuxLoader.merge(webpackConfig, {
  plugins: ['vux-ui']
})

解决问题5

那是最难的,也是最烦的,weUI竟然没动用rem布局,用的px加em。
下一场经过查找,开采有人建设方案很鸡贼,近来察觉的鸡贼方案相当多,比如静音播放未有声息的节拍这么些狠毒应用方案有空也得以唠唠。

import 'lib-flexible'
module.exports = vuxLoader.merge(webpackConfig, {
  plugins: ['vux-ui', 'progress-bar', 'duplicate-style',{
    name: 'after-less-parser',
    fn: function (source) {
      if (this.resourcePath.replace(/\/g, '/').indexOf('/vux/src/components') > -1) {
        source = source.replace(/px/g, 'PX')
      }
      // 自定义的全局样式大部分不需要转换
      if (this.resourcePath.replace(/\/g, '/').indexOf('App.vue') > -1) {
        source = source.replace(/px/g, 'PX').replace(/-1PX/g, '-1px')
      }
      return source
    }
  }, {
    name: 'style-parser',
    fn: function (source) {
      if (this.resourcePath.replace(/\/g, '/').indexOf('/vux/src/components') > -1) {
        source = source.replace(/px/g, 'PX')
      }
      // 避免转换1PX.less文件路径
      if (source.indexOf('1PX.less') > -1) {
        source = source.replace(/1PX.less/g, '1px.less')
      }
      return source
    }
  }]
})
import FastClick from 'fastclick'
FastClick.attach(document.body)
npm i postcss-loader postcss-px2rem -D
  1. 应用手淘flexible布局,字体须求依附dpr看来改动大小
  2. 行使postcss-px2rem自动调换页面中的rem,然而字体不转变,border利用1px方案化解也不转移
  3. 自动抬高浏览器宽容前缀
  4. 运用fastclick消除点击延迟主题素材
  5. 设置postcss和scss还大概有less,不是笔者神经病,是援引插件和民用习贯。
  6. 改动vux的px为PX,因为weUI未有行使rem,使用的是em和px,可是又不可能把它的px给调换来rem,并且vux还恐怕有二个1px.less,也不可能把它的px转变到大写。但是浏览器不管px是高低写,都能依照px解析。

因为小编安排了border不转换,所以/*no*/,能够不用加,加了也不顶用。可是字体一定要采取/*px*/本条注释。那样能力依赖dpr改动字体大小。chrome的活动端调试工具不扶植dpr改换,所以能够手动更动dpr查看效果。

npm i autoprefixer -D
npm i vue-cli -g // 如果还没安装
vue init airyland/vux2 projectPath

cd projectPath
npm i

化解难题4

本条标题不另行,难的是安装scss,用上边包车型地铁法子

至于autoprefixer的布置本人查,能够查阅如下文章
autoprefixer配置

vue vux es6 webpack移动端常用配备步骤

  1. 创设项目(vue项目标流程就不多讲了)**

  2. cnpm install vux --save**

  3. build/webpack.base.conf.js配置:

const vuxLoader = require('vux-loader')
把第一个module.exports赋值变量**let webpackConfig** ={里面代码不动}
然后这个放在最底部去
module.exports = vuxLoader.merge(webpackConfig, {
  plugins: ['vux-ui', 'progress-bar', 'duplicate-style']
})

4.安装vux-loader接纳命令cnpm install vux-loader -D

5.cnpm install less less-loader --save-dev 以科学编写翻译less源码

6.cnpm install yaml-loader --save-dev 以科学进行语言文件读取

7.index.html进口页面<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">

8.main.js里面配备:
(须求设置正视cnpm install fastclick --save
const FastClick = require('fastclick')
FastClick.attach(document.body) //去掉点击延迟300秒
(要求设置依赖cnpm install axios --save
const axios = require('axios')
Vue.prototype.$ajax = axios;

9.index.html其间引进rem自适应布局的js,有要求用jq的也在此边引进以保障质量。

此处笔者的安插是依据手淘布局方案的,本身能够有温馨的适配方案。

基于vue-cli配置
下一场使用vux的webpack配置

题外话
微信iOS收款到账语音提示开采计算

下一场手淘方案有字体根据dpr动态改动,所以书写CSS的时候要在前边加上注释,如下:

  1. vux文档
  2. npm网站
  3. 大漠的手淘布局方案flexible
  4. vux的github
    另外:

因为主题材料3也是postcss的插件,所以一齐化解。(假诺您根据vux的webpack依照的,难点3可粗略)
再安装

消除难点6

化解难点1

安排目标

本文由分分快三计划发布,转载请注明来源

关键词: 分分快三计划 Vue