rem布局方法

rem布局方法方法一 rem 算法 rem 的原理 根据 html 的 font size 的值进行确定 例如 htmlfont size 值为 100px1rem 100px 为了方便计算 html 的 font size 值设置成 100px 设置流程 a 看设计图的尺寸 如果设计图为 640 750dpr2 如果大于 750pxdpr3b 设计图为 750px 例如从

方法一:rem算法

  • rem的原理:根据html的font-size的值进行确定。
    例如html font-size值 为100px 1rem == 100px;
    为了方便计算 html的font-size值 设置成100px




设置流程:
 a : 看设计图的尺寸! 如果设计图为640 / 750 dpr 2 如果大于750px dpr 3 b : 设计图为750px 例如从设计图量出的大小为88px 88px / dpr(2) == 44px; 44px 转成rem .44rem ; 

根据设计图先确定适配的核心设备。

第一种情况:设计图为640px 设计图640px 考虑dpr 为2 640px / 2 == 320px 视口的宽 320px 100vw == 320px 1vw == 3.2px ?vw == 100px 31.25vw == 100px; 第二种情况:设计图为750px; 设计图为750px 考虑dpr为2 750px / 2 == 375px; 视口的宽 375px; 100vw == 375px; 1vw = 3.75px; ?vw == 100px; 26.67vw == 100px; 
  • 记住: 
      如果设计图为640px  html的font-size值为31.25vw;
      如果设计图为750px  html的font-size值为26.67vw;
    

方法二:插件适配

插件适配原理:

根据html  font-size值而定
插件来进行html的font-size的值的改变。
适应插件 flexible.js  进行适配
  • 步骤:
      1:先把html自身所带的控制视口的meta标签 先删除
      2:引入flexible.js
          在head标签里面    3: 计算流程: a: ps量出高度88px b: 88px / 100px == .88rem; 
  • flexble.js文件内容
/* eslint-disable */ ;(function(win, lib) { 
    var doc = win.document; var docEl = doc.documentElement; var metaEl = doc.querySelector('meta[name="viewport"]'); var flexibleEl = doc.querySelector('meta[name="flexible"]'); var dpr = 0; var scale = 0; var tid; var flexible = lib.flexible || (lib.flexible = { 
   }); if (metaEl) { 
    // console.warn('将根据已有的meta标签来设置缩放比例'); var match = metaEl.getAttribute('content').match(/initial\-scale=([\d\.]+)/); if (match) { 
    scale = parseFloat(match[1]); dpr = parseInt(1 / scale); } } else if (flexibleEl) { 
    var content = flexibleEl.getAttribute('content'); if (content) { 
    var initialDpr = content.match(/initial\-dpr=([\d\.]+)/); var maximumDpr = content.match(/maximum\-dpr=([\d\.]+)/); if (initialDpr) { 
    dpr = parseFloat(initialDpr[1]); scale = parseFloat((1 / dpr).toFixed(2)); } if (maximumDpr) { 
    dpr = parseFloat(maximumDpr[1]); scale = parseFloat((1 / dpr).toFixed(2)); } } } if (!dpr && !scale) { 
    var isAndroid = win.navigator.appVersion.match(/android/gi); var isIPhone = win.navigator.appVersion.match(/iphone/gi); var devicePixelRatio = win.devicePixelRatio; if (isIPhone) { 
    // iOS下,对于2和3的屏,用2倍的方案,其余的用1倍方案 if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) { 
    dpr = 3; } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)){ 
    dpr = 2; } else { 
    dpr = 1; } } else { 
    // 其他设备下,仍旧使用1倍的方案 dpr = 1; } scale = 1 / dpr; } docEl.setAttribute('data-dpr', dpr); if (!metaEl) { 
    metaEl = doc.createElement('meta'); metaEl.setAttribute('name', 'viewport'); metaEl.setAttribute('content', 'initial-scale=' + scale + ', maximum-scale=' + scale + ', minimum-scale=' + scale + ', user-scalable=no'); if (docEl.firstElementChild) { 
    docEl.firstElementChild.appendChild(metaEl); } else { 
    var wrap = doc.createElement('div'); wrap.appendChild(metaEl); doc.write(wrap.innerHTML); } } function refreshRem(){ 
    var width = docEl.getBoundingClientRect().width; if (width / dpr > 768) { 
    width = 768 * dpr; } var rem = width / 7.5; docEl.style.fontSize = rem + 'px'; flexible.rem = win.rem = rem; } 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 = 12 * dpr + 'px'; } else { 
    doc.addEventListener('DOMContentLoaded', function(e) { 
    doc.body.style.fontSize = 12 * dpr + 'px'; }, false); } refreshRem(); flexible.dpr = win.dpr = dpr; flexible.refreshRem = refreshRem; flexible.rem2px = function(d) { 
    var val = parseFloat(d) * this.rem; if (typeof d === 'string' && d.match(/rem$/)) { 
    val += 'px'; } return val; } flexible.px2rem = function(d) { 
    var val = parseFloat(d) / this.rem; if (typeof d === 'string' && d.match(/px$/)) { 
    val += 'rem'; } return val; } })(window, window['lib'] || (window['lib'] = { 
   })); 
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
上一篇 2026年3月16日 下午8:26
下一篇 2026年3月16日 下午8:26


相关推荐

  • matlab图像处理基础「建议收藏」

    matlab图像处理基础「建议收藏」1、MATLAB中图象数据的读取A、imread   imread函数用于读入各种图象文件,其一般的用法为          [X,MAP]=imread(‘filename’,‘fmt’)其中,X,MAP分别为读出的图象数据和颜色表数据,fmt为图象的格式,filename为读取的图象文件(可以加上文件的路径)。例:[X,MAP]=imread(’flowers.t

    2022年10月4日
    4
  • MidJourney教育辅导部署教程

    MidJourney教育辅导部署教程

    2026年3月15日
    1
  • potplayer使用madvr后没有了_potplayer配置

    potplayer使用madvr后没有了_potplayer配置 所需资源下载 Resource Version Download Notes Potplayer   Download 根据系统选择32位或64位安装文件 LAVFilters 0.68.1 Download 32位或64位版本应对应于Potplayer版本 madVR 0.90.24 Download …

    2025年11月17日
    7
  • tcp握手失败怎么办_TCP协议握手

    tcp握手失败怎么办_TCP协议握手大家好,我是小林。之前收到个读者的问题,对于TCP三次握手和四次挥手的一些疑问:第一次握手,如果客户端发送的SYN一直都传不到被服务器,那么客户端是一直重发SYN到永久吗?客户端停止重发SYN的时机是什么?第三次握手,如果服务器永远不会收到ACK,服务器就永远都留在Syn-Recv状态了吗?退出此状态的时机是什么?第三次挥手,如果客户端永远收不到FIN,ACK,客户端永远停留在Fin-Wait-2状态了吗?退出此状态时机是什么时候呢?第四次挥手,如果服务器永远收不到A

    2025年9月2日
    10
  • 免费申请国外免费域名超详细教程[通俗易懂]

    免费申请国外免费域名超详细教程[通俗易懂]1.首先申请免费域名网站:https://my.freenom.com/domains.php2.填入域名,这里我们以xcflag为列(尽量选择复杂一点的或者五个字母以上的域名,因为简单的有些域名是需要收费的),点击检查可用性。3.可以看到很多免费的域名(用的谷歌翻译插件,翻译有时候不是很准确,free翻译过来应该是免费而不是自由,之后会写一些关于谷歌插件的笔记,详细讲解)4.我们选择xcflag.tk点击立即获取,稍等一会点击购物车查看绿色按钮5.默认三个月试用,这里下拉框我们选择十二个月

    2022年6月30日
    84
  • 用python画圣诞树、樱花树、卡通图案及打包成exe文件[通俗易懂]

    用python画圣诞树、樱花树、卡通图案及打包成exe文件[通俗易懂]用python画圣诞树、樱花树、卡通图案及打包成exe文件

    2022年8月30日
    6

发表回复

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

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