vue项目中使用rem,在入口文件添加内容操作


Posted in Javascript onNovember 11, 2020

在使用vue-cli搭建好项目框架后,在目录结构的index.html文件中添加一段js代码:

<script>
   window.onload = function () {
  var setRem = function () {
    // UI设计稿的宽度
    var uiWidth = 1200;

    // 移动端屏幕宽度
    var winWidth = document.documentElement.clientWidth;

    // 比率
    var rate = winWidth / uiWidth;

    // 设置html元素的字体大小
    document.documentElement.style.fontSize = rate * 20 + "px"
  };

  setRem();

  window.onresize = function () {
    setRem();
  }
}
</script>

然后在写css就可以将px单位换成rem.

这里设置的比例是20px=1rem,

例如:宽度为100px时,可以直接写成5rem

(function (doc, win) {
  let fn = () => {
   let docEl = doc.documentElement,
    clientWidth = docEl.clientWidth;
   if (!clientWidth) return;
   docEl.style.fontSize = 16 * (clientWidth / 1920) + 'px';
  }
  if (!doc.addEventListener) return;
  win.addEventListener('resize', fn);
  doc.addEventListener('DOMContentLoaded', fn);
 })(document, window);

补充知识:vue 中使用 rem 布局的两种方法

在使用 vue-cli 开发 H5 项目时,需要进行 rem 适配,下面提供两种常用的方法(以 750 设计稿为例),希望对大家有所帮助。

方法一:在 index.html 或者 main.js 中添加以下代码:

const setHtmlFontSize = () => {
 const htmlDom = document.getElementsByTagName('html')[0];
 let htmlWidth = document.documentElement.clientWidth || document.body.clientWidth;
 if (htmlWidth >= 750) {
  htmlWidth = 750;
 }
 if (htmlWidth <= 320) {
  htmlWidth = 320;
 }
 htmlDom.style.fontSize = `${htmlWidth / 7.5}px`;
};
window.onresize = setHtmlFontSize;
setHtmlFontSize();

注: 这里设置的比例是 100px = 1rem,例如:元素宽度为 100px 时,可以直接写成 1rem

方法二:使用 lib-flexible 和 px2rem-loader 自动转换

1、安装插件

npm install lib-flexible --save

npm install px2rem-loader --save-dev

2、配置插件

在入口文件 main.js 中引入 lib-flexible:

vue项目中使用rem,在入口文件添加内容操作

在 build/utils.js 文件中配置 px2rem-loader:

vue项目中使用rem,在入口文件添加内容操作

安装并配置好 lib-flexible 和 px2rem 之后要重启一下项目,才能自动把 px 转换成 rem。

内联的 px 样式不能自动转换。

另外,px 写法上会有些不同,大家可以参考 px2rem 官方介绍,下面简单介绍一下。

1. 直接写 px,编译后会直接转化成 rem;---- 【除下面两种情况,其他长度用这个】

2. 在 px 后面添加 /*no*/,不会转化 px,会原样输出; ---- 【一般 border 用这个】

3. 在 px 后面添加 /*px*/,会根据 dpr 的不同,生成三套代码。---- 【一般 font-size 用这个】

示例代码如下:

/* 编译前 */
.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;
}

以上这篇vue项目中使用rem,在入口文件添加内容操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
DWZ table的原生分页浅谈
Mar 01 Javascript
修改file按钮的默认样式实现代码
Apr 23 Javascript
基于jQuery.Validate验证库知识点的详解
Apr 26 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
Dec 01 Javascript
AngularJS报错$apply already in progress的解决方法分析
Jan 30 Javascript
JS中input表单隐藏域及其使用方法
Feb 13 Javascript
js实现抽奖效果
Mar 27 Javascript
微信小程序 页面跳转传值实现代码
Jul 27 Javascript
JS中获取 DOM 元素的绝对位置实例详解
Apr 23 Javascript
vue中各选项及钩子函数执行顺序详解
Aug 25 Javascript
angularjs1.5 组件内用函数向外传值的实例
Sep 30 Javascript
OpenLayers3加载常用控件使用方法详解
Sep 25 Javascript
VUE前端从后台请求过来的数据进行转换数据结构操作
Nov 11 #Javascript
Vue 防止短时间内连续点击后多次触发请求的操作
Nov 11 #Javascript
Vue 401配合Vuex防止多次弹框的案例
Nov 11 #Javascript
VUE-ElementUI 自定义Loading图操作
Nov 11 #Javascript
在elementui中Notification组件添加点击事件实例
Nov 11 #Javascript
vue.js+element 默认提示中英文操作
Nov 11 #Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
Nov 11 #Javascript
You might like
PHP中显示格式化的用户输入
2006/10/09 PHP
php微信公众账号开发之前五个坑(一)
2016/09/18 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
JS实现打开本地文件或文件夹
2021/03/09 Javascript
网站404页面3秒后跳到首页的实例代码
2013/08/16 Javascript
javascript中的altKey 和 Event属性大全
2015/11/06 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
JS按条件 serialize() 对应标签的使用方法
2017/07/24 Javascript
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
对mac下nodejs 更新到最新版本的最新方法(推荐)
2018/05/17 NodeJs
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
2018/11/28 Javascript
vue 项目打包时样式及背景图片路径找不到的解决方式
2019/11/12 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
[03:08]迎霜节狂欢!2018年迎霜节珍藏Ⅰ一览
2018/12/25 DOTA
Python脚本实现集群检测和管理功能
2015/03/06 Python
Python中set与frozenset方法和区别详解
2016/05/23 Python
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
python3连接MySQL数据库实例详解
2018/05/24 Python
详解python如何在django中为用户模型添加自定义权限
2018/10/15 Python
python入门之基础语法学习笔记
2020/02/08 Python
关于python 的legend图例,参数使用说明
2020/04/17 Python
python3中sys.argv的实例用法
2020/04/24 Python
用python实现学生管理系统
2020/07/24 Python
python在一个范围内取随机数的简单实例
2020/08/16 Python
Python的信号库Blinker用法详解
2020/12/31 Python
CSS3制作半透明边框(Facebox)类似渐变
2012/12/09 HTML / CSS
css3实现背景颜色渐变让图片不再是唯一的实现方式
2012/12/18 HTML / CSS
Linux文件系统类型
2012/02/15 面试题
高一英语教学反思
2014/01/22 职场文书
文明礼仪标语
2014/06/13 职场文书
反四风对照检查材料
2014/09/22 职场文书
预备党员群众路线教育实践活动思想汇报2014
2014/10/25 职场文书
优秀党员先进材料
2014/12/18 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
幼儿园毕业致辞
2015/07/29 职场文书