js实现px与rem的换算(移动端)vue/react

news/2024/7/15 17:33:10 标签: react.js, javascript

1. 

 简单的方法:

javascript">function rem(){ 
    document.getElement.style.fontSize=document.getElement.clientWidth/7.5+'px'
 }
window.onload=rem()//文档加载完成执行
window.onresize=rem()//当浏览器被重置大小时执行Javascript代码

可参考onresized的文档API

菜鸟教程onresize的相关教程

2.

复杂的方法:

自执行函数(designWidth, maxWidth)传入设计图宽度即可

javascript">(function(designWidth, maxWidth) {
    var doc = document,
        win = window,
        docEl = doc.documentElement,
        remStyle = document.createElement("style"),
        tid;
 
    function refreshRem() {
        var width = docEl.getBoundingClientRect().width;
        maxWidth = maxWidth || 540;
        width>maxWidth && (width=maxWidth);
        var rem = width * 100 / designWidth;
        remStyle.innerHTML = 'html{font-size:' + rem + 'px;}';
    }
 
    if (docEl.firstElementChild) {
        docEl.firstElementChild.appendChild(remStyle);
    } else {
        var wrap = doc.createElement("div");
        wrap.appendChild(remStyle);
        doc.write(wrap.innerHTML);
        wrap = null;
    }
    refreshRem();
 
    win.addEventListener("resize", function() {
        clearTimeout(tid);
        tid = setTimeout(refreshRem, 300);
    }, false);
 
    win.addEventListener("pageshow", function(e) {
        if (e.persisted) {
            clearTimeout(tid);
            tid = setTimeout(refreshRem, 300);
        }
    }, false);
 
    if (doc.readyState === "complete") {
        doc.body.style.fontSize = "16px";
    } else {
        doc.addEventListener("DOMContentLoaded", function(e) {
            doc.body.style.fontSize = "16px";
        }, false);
    }
})(640, 640);

3.可以给 html,body设置一个font-size:62.5%;

首先,rem是以html为基准。

一般的,各大主流浏览器的font-size默认值为16px,此时1rem=16px。如果此时将rem与px进行换算很麻烦,比如0.75rem=12px。

为了更方便的进行换算(比如1:10)

html,body{
  font-size: 62.5%;  
}

用rem定义尺寸的另一个好处是更能适应 缩放/浏览。

至于选择62.5%而非10px的原因,主要是兼容性和未来发展趋势的综合考虑,px这个单位的含义已经越来越混乱,几乎无法评估以后的设备是会一直像现在这样对网页上的px做兼容处理,还是让px回归“像素”的本意,但62.5%代表默认字体尺寸的62.5%这个含义基本不会有混乱。

4.如果是vue或者react可使用px2rem插件实现

可参考这篇文章


http://www.niftyadmin.cn/n/1557734.html

相关文章

如何删除Git仓库中冗余的tag?

比如如下tag: b_3.0.18_201806201808 b_3.0.18_201806201819 b_3.0.18_201806212108 1、一个一个删 本地删除tag :git tag -d b_3.0.18_201806201808 git tag -d b_3.0.18_201806201819 git tag -d b_3.0.18_201806212108 删除远程tag:git push origin :refs/tag…

Angulars.js安装步骤(初学)

1.安装node.js 下载,安装,在终端测试安装是否成功:node -v(查看nodejs版本) npm -v(查看npm版本)下载地址:https://nodejs.org/en/download 2.安装angular cli 安装typescript(新建项目的时候会自动安装,…

Terminating app due to uncaught exception 从哪儿来?

[NSException raise:"1111" format:"错误diamante方法是范德萨发"]; 输出: *** Terminating app due to uncaught exception 1111, reason: 错误diamante方法是范德萨发 *** First throw call stack: (0x2ee82f0b 0x39615ce7 0x2ee82e4d 0xc73a1 0x316e7…

Angular项目文件结构及作用(初学)

最近初学了Angular.js介绍一下文件结构及目录。下图是新建项目得目录结构,下面来介绍一下目录得结构及作用。 第一层目录: 【node_modules 】 第三方依赖包存放目录(与vue,react作用相同)【e2e 】 端到端的测试目录 用来做自动测…

模型指向同一地址,结构体指向不同地址

1.内存地址的指向Class 类型的model 只要改变 值, 都会修改同一个指针, 但是struct 创建的类型, 修改了对应属性值, 其他值不会修改, 还是空的, 2.优缺点结构体自带初始化方法 init,对象需要自定义init方…

[iOS 字符串] 字符串后几位截取

记录一个很简单的小问题; 截取字符串有如下方法 [string substringToIndex:7];//截取掉下标7之后的字符串 [string substringFromIndex:2];//截取掉下标2之前的字符串 [string substringWithRange:range];//截取范围类的字符串 遇到一个问题, 如何直接截取某串字符串的后…

window.open 打开新窗口被拦截的解决方案

最近公司开发的一个项目,平凡用到下载各种类型的文件,但是例如.txt,.jpg,.pdf格式的文件呢浏览器会在当前窗口直接打开,影响用户体验,尝试各种方案和百度总结一下几点; 原理: 当window.open为用户触发事件内…

echarts设置x轴,标签与x轴的距离(当y轴有负数时,x轴标签紧贴x轴)

在用echarts做折现图时遇到的问题效果图 是这样的。 option {xAxis: [{type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun],onZero: false,show: true}, ],yAxis: [{type: value,}, {}],series: [{data: [3, 10, -9, 3, -3, 19, 15],type: line}] }; 而做出来的是这样…