美文网首页@认知·互联网
web移动端布局的那些事儿

web移动端布局的那些事儿

作者: MrRuo | 来源:发表于2020-02-06 21:20 被阅读0次

随着Hybrid App的兴起,移动端web开发变得火热起来。web页面相比于App原生页面具有可移植性强开发效率高迭代速度快的一些优势,让大部分的App都会内嵌一些web页面。

web的移动端开发和PC开发最大的区别就是在布局上有所不同。本文通过两个方面,布局单位解决一像素问题两个方面阐述了如何移动端布局。

布局单位

针对较为简单的内容展示页面,使用flex构建页面结构,px作为页面布局的基本单位,足以满足需求。

在面对px无法实现的复杂页面时,主张采用rem作为移动端布局的主要单位。介绍完如何使用rem布局之后,讲述了为什么不采用vw作为主要布局单位。

如何使用rem布局

rem是指相对于根元素的字体大小的单位。html默认的font-size是16px,那么1rem就代表了16px。

根据屏幕宽度设置根元素的字体大小之后, 在布局时使用 rem 单位来布局,就可以达到自适应的目的。

先来看一下js代码是如何设置html标签的 font-size的。

  (function() {
      function setRootFontSize() {
        var docEl = document.documentElement;
        var viewportWidth = docEl.getBoundingClientRect().width;
        docEl.style.fontSize = viewportWidth / 750 * 100 + 'px'; //  设计稿宽度为750
      }

      setRootFontSize();
      window.addEventListener('resize', setRootFontSize);
    })();

为了方便设计稿到rem的换算,在计算根元素字体大小的时候,将视口宽度除以设计稿宽度,在代码示例中代码宽度为750。

浏览器最小字号是12px,为了防止计算结果过小,导致页面出现问题。在这里将计算结果乘以100。

在书写css的时候,只要将设计稿宽度除以100加上rem即可。

例如,一个div在宽度在750像素下,测量的宽度为175px,按照下面的方式来写。

div {
  width: 1.75rem;
}

这种根目录字体大小的计算方式,让设计稿测量长度换算到rem十分简单。完全不需要px2rem等构建工具帮助转换,降低了项目的构建成本。

为什么不采用vw

vw作为新出的视口单位,100vw等于视口的宽度。非常适合响应式布局,但是vw有着两个劣势。

  1. vw对低版本手机的兼容性问题,并且vw的polyfill具有性能问题。viewport-units-buggyfill的实现原理是通过document.styleSheets将所有的样式表全部遍历一边,将视口单位换算成px之后,重新写入html中。如果页面样式比较多,计算量比较大。这将对不支持vw的低端手机造成巨大的性能压力。

  2. vw不够灵活,无法限制页面最大宽度或者最小宽度。在兼容pad的时候,防止页面过宽,页面中响应式元素过大。通常需要限制一个最大宽度。达到最大宽度之后,居中显示。使用vw构建的web页面,无法实现此类需求。

解决一像素问题

css中的px并不是真正的物理像素,在做1px的边框或者分割线的时候,如果直接使用1px是无法做出设计师想要的效果的。

目前比较流行的一个解决方案是,通过meta标签设置viewport,将页面按照dpr(设备像素比)完成缩放。

var dpr = window.devicePixelRatio;

<meta
  name="viewport"
  content="width=device-width,initial-scale=1 / dpr,user-scalable=no"
>

这样设置之后,将会影响外部引入的UI组件。并且也会影响使用用px来描述大小的文字。

防止在dpr高的机型上字体变小,dpr低的设备上字体变大,只能为根元素添加dpr属性,通过描写多种css来实现。

document.documentElement.setAttribute('dpr', window.devicePixelRatio)

p {
  font-size: 16px;
}
[dpr=2] p {
  font-size 32px;
}
[dpr=3] p{
  font-size: 48px;
}

所以推荐在写1像素边框的使用,直接使用0.5px来代替1px,这种方式不会造成副作用,并且从肉眼来看,和设计稿相差无几。

相关文章

  • web移动端布局的那些事儿

    随着Hybrid App的兴起,移动端web开发变得火热起来。web页面相比于App原生页面具有可移植性强、开发效...

  • 移动布局

    移动web开发流式布局 ====================== 1.0 移动端基础 1.1浏览器现状 PC端...

  • 移动端

    app Web App Hybird App 移动端页面 设计图 测试 移动端的设置 移动端的布局 弹性 fl...

  • 【移动端】移动web布局

    Flexbox弹性布局 另外有一个常见的问题:不定宽高的水平垂直居中css3的解决方式是: flexbox版: F...

  • Web移动端Fixed布局的解决方案

    index Web移动端Fixed布局的解决方案 __veblen 移动端业务开发,iOS 下经常会有 fixed...

  • 移动web开发与适配

    学习目标 了解移动web简单调试方法 了解移动web常见适配方案 掌握移动端布局技巧 全面掌握rem适配方法 移动...

  • web移动端---伸缩布局

    伸缩布局 1. 如何摆放盒子? 让盒子一行显示 用 浮动 让盒子压着另外一个盒子 用 定位 如果要移动盒子的位置可...

  • 2020-10-30 web移动端

    web移动端 1.重点:适配 2.目标:掌握4种适配方案 ( 流式布局、弹性布局、响应式布局、像素适配(rem适配...

  • web移动端布局之流式布局

    移动端布局之流式布局meta视口标签,写移动端布局必须加入视口标签: 二倍图:在移动端布局中,我们需要一个5050...

  • 移动web开发_流式布局

    移动web开发流式布局 1.0 移动端基础 1.1浏览器现状 PC端常见浏览器:360浏览器、谷歌浏览器、火狐浏览...

网友评论

    本文标题:web移动端布局的那些事儿

    本文链接:https://www.haomeiwen.com/subject/pmmsxhtx.html