vue项目中使用postcss-px2rem的方法总结「建议收藏」

vue项目中使用postcss-px2rem的方法总结「建议收藏」标题vue项目中postcss-px2rem的使用在项目中为了屏幕适配,经常会用到rem,postcss-px2rem就是为了让我们直接在将代码中px自动转化成对应的rem的一个插件如何使用:1.安装npmipostcss-px2rem–save-dev2.设置(以下总结了三种方式)1).找到项目根目录下的.postcssrc文件module.exports={“plugins”:{“postcss-import”:{},”postcss-url”

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

vue项目中使用postcss-px2rem的2种方法

在项目中为了屏幕适配,经常会用到rem,postcss-px2rem就是为了让我们直接在将代码中px自动转化成对应的rem的一个插件.(下边的方法适用于使用cli2脚手架搭建的项目,现在好多数项目使用cli3搭建,我在后边的文章中增加了对cli3项目自适应的配置.)

如何使用:

1.安装

npm i postcss-px2rem –save -dev

2.设置

1).找到项目根目录下的.postcssrc文件


module.exports = {
  "plugins": {
    "postcss-import": {},
    "postcss-url": {},
    // to edit target browsers: use "browserslist" field in package.json
    "autoprefixer": {
      "browsers": ['last 10 Chrome versions', 'last 5 Firefox versions', 'Safari >= 8']
     },
     'postcss-px2rem':{'remUnit':75}    //配置rem基准值,75是iphone6标准
  }
}

Jetbrains全家桶1年46,售后保障稳定

remUnit: 75 代表 1rem = 75px; 所以当你一个75px值时,它会自动转成 (75px/75)rem,

转化完之后,你还需要在根元素设置他的font-size,因为rem是相对根元素来设置大小的

html {
    font-size: 10vw;
}

这样的话我们设置的px值 就变成对应的 10%的屏幕宽度 *(75px/75)rem

2) 找到根目录下的vue-loader.conf.js

本人使用的是这种方法.
首先需要设置html的fontsize值,1rem = html的font-size,这里咱们动态设置一下,可以直接在index.html中设置
PC端

(function () {
    function setRootFontSize() {
        let rem, rootWidth;
        let rootHtml = document.documentElement;
        //限制展现页面的最小宽度
        rootWidth = rootHtml.clientWidth < 1366 ? 1366 : rootHtml.clientWidth;
        // 19.2 = 设计图尺寸宽 / 100( 设计图的rem = 100 )
        rem = rootWidth / 19.2;
        // 动态写入样式
        rootHtml.style.fontSize = `${rem}px`;
    }
    setRootFontSize();
    window.addEventListener("resize", setRootFontSize, false);
})();

移动端

(function () {
    function setRootFontSize() {
        let dpr, rem, scale, rootWidth;
        let rootHtml = document.documentElement;
    
        dpr = window.devicePixelRatio || 1; //移动端必须设置
        //限制展现页面的最小宽度
        rootWidth = rootHtml.clientWidth < 1366 ? 1366 : rootHtml.clientWidth;
        rem = rootWidth * dpr / 19.2; // 19.2 = 设计图尺寸宽1920 / 100(设计图的rem = 100)
        scale = 1 / dpr;
    
        // 设置viewport,进行缩放,达到高清效果 (移动端添加)
        let vp = document.querySelector('meta[name="viewport"]');
        vp.setAttribute('content', 'width=' + dpr * rootHtml.clientWidth + ',initial-scale=' + scale + ',maximum-scale=' + scale + ', minimum-scale=' + scale + ',user-scalable=no');
    
        // 动态写入样式
        rootHtml.style.fontSize = `${rem}px`;
    }
    setRootFontSize();
    window.addEventListener("resize", setRootFontSize, false);
    window.addEventListener("orientationchange", setRootFontSize, false); //移动端
})();

vue-loader.conf.js位置

'use strict'
const utils = require('./utils')
const config = require('../config')
const isProduction = process.env.NODE_ENV === 'production'
const sourceMapEnabled = isProduction
  ? config.build.productionSourceMap
  : config.dev.cssSourceMap

const px2rem = require('postcss-px2rem')
module.exports = {
  loaders: utils.cssLoaders({
    sourceMap: sourceMapEnabled,
    extract: isProduction
  }),
  cssSourceMap: sourceMapEnabled,
  cacheBusting: config.dev.cacheBusting,
  transformToRequire: {
    video: ['src', 'poster'],
    source: 'src',
    img: 'src',
    image: 'xlink:href'
  },
  postcss: function() {
    return [px2rem({remUnit: 100})];
  }
}

修改完成后 记得重新编译
我还写了一篇 移动端自适应px2vw的文章,有需要的可以去看看,希望对你有帮助,多多评论指教.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/207472.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 5G网络切片综述 — 1

    5G网络切片综述 — 1简介随着5G时代的来临,21年的SA在国内的全范围商用,现阶段人们对于5G的必要性认识还不足。主要是目前人们用的5G主要集中在eMBB(enhancedMobileBroadband)即增强型移动带宽的阶段,而大数据业务如在线直播、高清视频等在4G上都得到了很好的支持,所以带宽的继续增大对于用户体验的边际效应递减。5G所带来的真正改善并不仅仅是在于大带宽,而在于5G提供了在同一张物理5G网络的情况下,同时能够提供eMBB,URLLC(Ultra-ReliableLow-LatencyCommun

    2022年10月2日
    2
  • vue项目封装组件_前端组件封装

    vue项目封装组件_前端组件封装前言在使用vue进行日常开发的时候,组件的封装是一个很常规的操作,也可以从npm仓库下载别人封装好的组件来使用,比如iview,elementui等…但每个项目的应用场景不同,所以我们有时也需要自己封装组件。而如果在开发中换了项目,那么就只能复制代码过去,略显麻烦,这个时候呢,可以将封装好的组件上传到npm仓库,需要使用时就可以直接通过npm指令下载,非常方便。1.环境准备因为我们封装的是Vue组件,所以直接在脚手架中封装即可。//创建项目因为我们只需封装组件所以RouterSt

    2022年9月23日
    3
  • tensorflow 层_win7怎么扩展屏幕

    tensorflow 层_win7怎么扩展屏幕前言读TensorFlow相关代码看到了STN的应用,搜索以后发现与增强网络对图像变换(旋转、缩放、偏移等)的抗干扰能力,简单说就是提高卷积神经网络的空间不变性。国际惯例,参考博客:理解SpatialTransformerNetworksgithub-STNDeepLearningPaperImplementations:SpatialTransformerNetwork…

    2022年8月30日
    2
  • js页面刷新或关闭时弹框消失_js刷新页面如何保留页面内容

    js页面刷新或关闭时弹框消失_js刷新页面如何保留页面内容onbeforeunload事件属性  定义:在即将离开当前页面(刷新或关闭)时执行JavaScript,例如:<script>window.onbeforeunload=function(e){e.returnValue=(“确定离开当前页面吗?”);}</script>  用法:onbeforeunload事件在…

    2025年7月9日
    3
  • java volatile 修饰符

    java volatile 修饰符小编参考了添加链接描述这篇博客,在此对博主进行感谢!volatile修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。新建MainDemopublicclassMainDemo{//privatestaticinta=0;privatestaticvolatileinta=0;pri

    2022年7月18日
    17
  • C# Lambda表达式 两个list取交集 做筛选

    C# Lambda表达式 两个list取交集 做筛选publicIList<Markers>getEngineerByCenterPoint(floatlatitude,floatlongitude){MapAddressmapAddress=newMapAddress(latitude,longitude);List<Markers>markers…

    2022年9月28日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号