前端中网页布局px ,rem,em,vw,vh的认识和区别有哪些?

移动端开发中的尺寸单位与适配策略
本文详细介绍了移动端开发中常用的像素单位px、相对单位rem、em以及vw、vh的使用。重点讨论了rem作为布局单位在解决不同屏幕尺寸适配问题上的应用,包括视口的概念和媒体查询。同时提到了flexible.js框架在实现响应式布局中的作用。此外,还对比了em和vw/vh的使用场景,并给出了实际开发中的例子。最后,概述了各种单位在浏览器中的兼容情况。

 

目录

1、px 为像素单位

2、rem

 2.1 视口:开发屏幕大小

 2.2媒体查询

3.em 

4、vw,vh是相对视口尺寸的计算结果

3.1口:vw大小

3.2 实际举例(iPhoneone6/7/8视口)

5、各大单位浏览器兼容效果 


1、px 为像素单位

px是常用的像素单位,一般多用于PC端网页开发,直接使用书写

前端人员拿到的设计稿一般也是px单位,后续根据需求进行单位换算

 

2、rem

在移动端开发时,常会因为手机屏幕大小不同,分辨率不同,出现如何设置html标签字号的问题

 

 2.1 视口:开发屏幕大小

 为解决这个问题,产生了rem布局,将网页均分为10等份,html标签字号 为视口宽度1/10,以根字号  为参考标准

 2.2媒体查询

不同的分辨率有不同的根字号,需要进行媒体查询,代码示例如下

 但一般情况下,不使用此方式进行正常开发,每次进行手动查询很麻烦

现在都使用flexble.js配合人实现在不同宽度设备中,网页元素尺寸等比缩放问题

  • flexble.js是手淘开发的一个用来适配移动端的JS框架
  • 核心原理是根据不同的视口宽度给网页中的html根节点设置不同的font-size

引入方式 

 flexble.js源代码

(function flexible (window, document) {
  var docEl = document.documentElement
  var dpr = window.devicePixelRatio || 1

  // adjust body font size
  function setBodyFontSize () {
    if (document.body) {
      document.body.style.fontSize = (12 * dpr) + 'px'
    }
    else {
      document.addEventListener('DOMContentLoaded', setBodyFontSize)
    }
  }
  setBodyFontSize();

  // set 1rem = viewWidth / 10
  function setRemUnit () {
    var rem = docEl.clientWidth / 10
    docEl.style.fontSize = rem + 'px'
  }

  setRemUnit()

  // reset rem unit on page resize
  window.addEventListener('resize', setRemUnit)
  window.addEventListener('pageshow', function (e) {
    if (e.persisted) {
      setRemUnit()
    }
  })

  // detect 0.5px supports
  if (dpr >= 2) {
    var fakeBody = document.createElement('body')
    var testElement = document.createElement('div')
    testElement.style.border = '.5px solid transparent'
    fakeBody.appendChild(testElement)
    docEl.appendChild(fakeBody)
    if (testElement.offsetHeight === 1) {
      docEl.classList.add('hairlines')
    }
    docEl.removeChild(fakeBody)
  }
}(window, document))

3.em 

em和rem类似,都是依据font-size进行页面布局缩放,但是em多依赖于直接亲父级font-size的大小,只会找最近的父级,不直接依赖于整体的html根标签

4、vw,vh是相对视口尺寸的计算结果

vw: viewport    width                        1vw=1/100视口宽度

vh: viewport   hight                           1vw=1/100视口高度

3.1口:vw大小

一般而言,移动端开发多依据于iPhoneone6/7/8大小进行开发

例如以上视口宽度,1vw=3.75px,1vh=6.67px

实际开发中一般不使用vh进行开发,移动端屏幕宽度相对比较固定大小,而高度则因手机型号变化而变化比较大

3.2 实际举例(iPhoneone6/7/8视口)

 盒子实际大小

 box 宽度:  50vw × 3.75px=160px

box高度:30vw ×3.75px=96px

提醒:less里面进行换算只可使用一种单位,否则以前面单位为准,此地使用两种仅为演示效果

5、各大单位浏览器兼容效果 

检查网站:Can I use... Support tables for HTML5, CSS3, etcicon-default.png?t=M5H6https://caniuse.com/

 

 rem为例

 

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值