返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue项目中使用rem替换px的实现示例
  • 424
分享到

vue项目中使用rem替换px的实现示例

2024-04-02 19:04:59 424人浏览 独家记忆
摘要

目录工具安装插件在项目根目录下添加.postCSSrc.js文件index.html关于移动端页面适配,rem和vw适配方案 基础点:rem相对根节点字体的大小。所以不用px; 根字

移动端页面适配,rem和vw适配方案

基础点:rem相对根节点字体的大小。所以不用px;
根字体:字体的大小px;
px:你就当成cm(厘米)这样的东西吧;
基准:750设计稿(一般UI设计师给的都是750的设计稿);

工具

Vue-cli:使用脚手架来搭建vue前端项目
postcss:就是postcss用js插件帮你转换css样式的一个工具。比如,这里的把你的文件里面16px替换成1rem(根大小默认16px的情况);这样你就不用自己去算了!
cssrem:主要是帮你把px(UI设计给设计稿上的px)转换成对应的rem
然后:还要用js代码去动态算根目录应该有的字体大小,反正就是一段js代码去动态获取屏幕宽度

安装插件


npm i postcss,postcss-pxtorem,postcss-loader,postcss-import,postcss-url

然后再index.html里面加上


<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">

在项目根目录下添加.postcssrc.js文件


module.exports = {
    "plugins": {
      "postcss-import": {},      //用于@import导入css文件
      "postcss-url": {},           //路径引入css文件或node_modules文件
      "postcss-aspect-ratio-mini": {},   //用来处理元素容器宽高比
      "postcss-write-svg": { utf8: false },    //用来处理移动端1px的解决方案。该插件主要使用的是border-image和background来做1px的相关处理。
      "postcss-cssnext": {},  //该插件可以让我们使用CSS未来的特性,其会对这些特性做相关的兼容性处理。
      "postcss-px-to-viewport": {    //把px单位转换为vw、vh、vmin或者vmax这样的视窗单位,也是vw适配方案的核心插件之一。
          viewportWidth: 750,    //视窗的宽度
          viewportHeight: 1334,   //视窗的高度
          unitPrecision: 3,    //将px转化为视窗单位值的小数位数
          viewportUnit: 'vw',    //指定要转换成的视窗单位值
          selectorBlackList: ['.ignore', '.hairlines'],    //指定不转换视窗单位值得类,可以自定义,可以无限添加
          minPixelValue: 1,    //小于等于1px不转换为视窗单位
          mediaQuery: false   //允许在媒体查询中使用px
      },
      "postcss-viewport-units":{}, //给vw、vh、vmin和vmax做适配的操作,这是实现vw布局必不可少的一个插件
      "cssnano": {    //主要用来压缩和清理CSS代码。在webpack中,cssnano和css-loader捆绑在一起,所以不需要自己加载它。
          preset: "advanced",   //重复调用
          autoprefixer: false,    //cssnext和cssnano都具有autoprefixer,事实上只需要一个,所以把默认的autoprefixer删除掉,然后把cssnano中的autoprefixer设置为false。
          "postcss-zindex": false   //只要启用了这个插件,z-index的值就会重置为1
       } 
    }
  } 

当你切换不同尺寸的屏幕的时候,需要动态改变根字体的大小,一段简单的js插入在head里面:在public目录下直接新建的shipei.js,然后将这个js引入到index.html的head里面


//shipei.js
(function() {
   function autoRootFontSize() {
       document.documentElement.style.fontSize =        Math.min(screen.width,document.documentElement.getBoundinGClientRect().width)  /  750 * 32 + 'px';
         // 取screen.width和document.documentElement.getBoundingClientRect().width的最小值;除以750,乘以32;懂的起撒,就是原本是750大小的32px;如果屏幕大小变成了375px,那么字体就是16px;也就是根字体fontSize大小和屏幕大小成正比变化!是不是很简单
   }
   window.addEventListener('resize', autoRootFontSize);
   autoRootFontSize();
})();

index.html


<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <meta Http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <link rel="stylesheet" href="/public.css" rel="external nofollow"  type="text/css">
    <link rel="icon" href="<%= BASE_URL %>favicon.ico" rel="external nofollow" >
    <title><%= htmlWEBpackPlugin.options.title %></title>
    <script src="/shipei.js" type="text/javascript" charset="utf-8"></script>
  </head>
  <body>
    
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

注意 放到 public 里的东西,可以不用写开头目录,脚手架打包的时候找不到,会去public文件夹找的

关于

getBoundingClientRect().width获取到的其实是父级的右边距离浏览器原点(0,0)左边距离浏览器原点(0,0)的距离,即父级的宽度+2padding+2border。
此时的clientWidth等于父级的宽度+2*padding,不包括边框的宽度。
当不隐藏子级内容,即overflow为auto时,前者的宽度依然为这个数字,因为父级并没有改编盒模型。后者的宽度为上述得到的宽度-滚动条的宽度(17px);


<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
        </style>
    </head>
    <body>
        <div id="divParent" style="background-color: #aaa; padding:8px; border:solid 7px #000; height:200px; width:500px; overflow:hidden;">
                <div id="divDisplay" style="background-color: #0f0; margin: 30px; padding: 10px;
                    height: 400px; width: 600px; border: solid 3px #f00;">
                </div>
            </div>
    </body>
</html>
<script type="text/javascript">
    
     var divP = document.getElementById('divParent');
            var divD = document.getElementById('divDisplay');
    
            var clientWidth = divP.clientWidth;
            var getWidth = divP.getBoundingClientRect().width;
            divD.innerHTML += 'clientWidth: ' + clientWidth + '<br/>';
            divD.innerHTML += 'getWidth: ' + getWidth + '<br/>';
</script>

运行结果是clientWidth为516,他的计算是内容宽+2padding
getWidth(也就是getBoundingClientRect().width)包括内容宽+2padding+2border
第五步:就是将设计稿上的px转换成rem为单位:安装 cssrem插件 (在插件市场):
然后在 文件-->首选项-->设置 然后搜索cssrem 设置Root Font Size为16即可

 到此这篇关于vue项目中使用rem替换px的实现示例的文章就介绍到这了,更多相关vue rem替换px内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: vue项目中使用rem替换px的实现示例

本文链接: https://lsjlt.com/news/129979.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • vue项目中使用rem替换px的实现示例
    目录工具安装插件在项目根目录下添加.postcssrc.js文件index.html关于移动端页面适配,rem和vw适配方案 基础点:rem相对根节点字体的大小。所以不用px; 根字...
    99+
    2024-04-02
  • vue项目中如何使用rem替换px
    这篇文章主要讲解了“vue项目中如何使用rem替换px”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue项目中如何使用rem替换px”吧!工具vue-cl...
    99+
    2024-04-02
  • Vue项目中Websocket的使用实例
    目录前言判断浏览器是否支持websocket的方法Vue项目里使用websocket的实例总结前言 由于项目需求有要使用长链接,我们普通的http请求如果用轮询的方式与服务端通讯就很...
    99+
    2023-02-16
    vue websocket websocket教程 vue websocket库
  • vue项目中使用websocket的实现
    什么是websocket? “WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数...
    99+
    2024-04-02
  • vue项目完成后如何实现项目优化的示例
    目录一、为开发模式与发布模式指定不同的打包入口二、通过externals加载外部CDN资源三、通过CDN优化ElementUI的打包四、首页内容定制五、使用路由懒加载一、为开发模式与...
    99+
    2024-04-02
  • vue项目中扫码支付的实现示例(附demo)
    目录需求背景思路分析UI展示开始使用一 编写支付组件模板二 支付组件的JS相关代码和说明附:组件JS完整的源码需求背景 市场报告列表展示的报告有两种类型,一种是免费报告,另一种是付...
    99+
    2024-04-02
  • vue项目实战的示例分析
    这篇文章主要为大家展示了“vue项目实战的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue项目实战的示例分析”这篇文章...
    99+
    2024-04-02
  • 手把手教你如何在vue项目中使用rem布局
    目录如何在vue项目中使用rem布局方法一:使用lib-flexible1. 安装包2. 引入文件3. 根据需要设置rem4.使用rem方法二:使用postcss-pxtorem1....
    99+
    2023-02-08
    vue中使用rem布局 vue项目rem适配 rem布局实现
  • Vue中使用Lodash的实现示例
    安装 cnpm i -S lodash 全局引入 import _ from 'lodash' Vue.prototype._ = _ 使用 在任何地方使用_或者this._即可调用...
    99+
    2024-04-02
  • vue项目中js文件使用vue的this实例说明
    目录vue中其他.js文件使用this实例main.js中导出vuerequest.js中导入main.js并使用vue模板使用this问题vue中其他.js文件使用this实例 在...
    99+
    2022-12-08
    vue项目js文件 vue的this js文件使用vue的this
  • Vue中怎么实现替换路由而不切换选项卡
    今天小编给大家分享一下Vue中怎么实现替换路由而不切换选项卡的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。什么是Vue路由系...
    99+
    2023-07-06
  • vue项目实现一键网站换肤效果实例(webpack-theme-color-replacer的使用)
    目录前言CSS样式覆盖 - 最简单粗暴的力工做法LESS、SCSS变量覆盖 - 学会使用工具的做法CSS变量 - 新款工具的做法webpack-theme-color-replac&...
    99+
    2023-02-13
    vue项目一键换肤功能 前端vue换肤实现 vue实现换肤功能
  • vue中项目结构的示例分析
    这篇文章主要为大家展示了“vue中项目结构的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue中项目结构的示例分析”这篇文章吧。新建一个项目之后,我们...
    99+
    2024-04-02
  • 如何在Vue中实现替换路由而不切换选项卡
    随着前端技术的不断发展,Vue成为了一个非常流行的前端框架。在Vue开发过程中,路由系统是不可或缺的一个重要部分。但是,有时候我们需要在不刷新整个页面的情况下切换路由,同时还需要保持当前选项卡的状态不变。本文将介绍如何在Vue中实现替换路由...
    99+
    2023-05-14
  • SpringBoot+mybatis+Vue实现前后端分离项目的示例
    目录一、SpringBoot环境搭建1、项目的数据库2、项目所需依赖3、application.yml文件4、入口类二、vue实现前后端分离1、前端页面2、springBoot控制层...
    99+
    2024-04-02
  • Vue项目实现html5图片上传的示例代码
    目录图例1.选择图片2.预览图片2.1添加图片预览代码 两种方法的对比3.裁剪图片4.上传选择图片 -> 预览图片 -> 裁剪图片 -> 上传图片 我会以...
    99+
    2024-04-02
  • vue-cli中项目结构的示例分析
    小编给大家分享一下vue-cli中项目结构的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!总体框架一个vue-cli的项...
    99+
    2024-04-02
  • vue项目中vue-i18n和element-ui国际化开发实现的示例分析
    这篇文章主要介绍vue项目中vue-i18n和element-ui国际化开发实现的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在vue构建的项目中,我们常用element-...
    99+
    2024-04-02
  • SSM项目中使用拦截器和过滤器的实现示例
    一、拦截器概述 Spring MVC 也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定 的功能,自定义的拦截器必须实现 HandlerInterceptor 接口 ...
    99+
    2024-04-02
  • vue中使用词云图的实现示例
    在vue中, 查找到有两种方法来实现词云图, 分别是echarts 和 highcharts Echarts: 注意,wordcloud对应的echarts版本有要求:echarts...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作