前言

    首先你要知道 vwrem 是什么?怎么使用?

    ①:简单来说 vw 是视口单位,相当于把视口等分成了1001vw = 1;

    ②:rem是相对单位,设置根元素 htmlfont-size,比如给 html 设置字体大小为100px1rem = 100px;

    注:我之前针对 vwrem 分别写过一篇博客,详见如下

      vw:https://www.cnblogs.com/tu-0718/p/9906692.html

      rem:https://www.cnblogs.com/tu-0718/p/9146631.html

  

  正文

    还记得第一次知道 rem 时,我的心情如沐春风,感觉找到了新大陆

     那时常为移动端写自适应页面而苦恼,传统的百分比布局和媒体查询早已让我心力交瘁

     百分比布局的缺点:宽度虽然能随屏幕自适应,但高度固定不变,当设备屏幕越来越大,会有一种被强行拉伸的既视感,用户体验差

     媒体查询的缺点:CSS 代码量增多,体积增大,要为每一个不同分辨率的设备单独写一套样式来自适应,这样的话我宁愿狗带

      在这种情况下,rem 的出现无异于黑暗中的一道曙光,不过它也有一个缺点

     rem的缺点:需要引入一段JS代码,这样违背了样式行为分离的思想,而且耦合深,无法解耦

     不过,对于很多人来说这并不是问题,毕竟引入一段 JS 代码能省去那么多麻烦,何乐而为呢?

    如果你对 rem 的这个缺点无法忍受或追求更好的解决方案,那么 vw 无疑会是你的另一道曙光

    使用 vw,不需要引入 JS 代码就能达到比 rem 更好的效果,并且相对于视口,所以在宽屏上也能很好的显示

    vw的缺点:vw 虽然好用,但却有一个蛋疼的地方,因为相对于视口,所以失去了最大宽度/高度的限制,

          可能你在宽屏上看到完美,竖屏上就不忍直视了。这时需要你额外为元素添加最大宽度/高度来限制

       

   说了这么多,难道就没有一种方法能够让我们真正身心愉悦的写移动端的页面了吗?答案是肯定的!!!

   但俗话说得好,三个臭皮匠,顶个诸葛亮。既然单独一种方法不行,我们就打配合嘛,这样 vw + rem 的方式就应运而生了

   ①:我们以 iPhone6为基准,屏幕宽度为375px,然后换算成 vw

     375 / 100 = 3.75;

    注:vw 是视口单位,被均分成了100,1vw = 1,所以根据上面计算,1vw = 3.75px

   ②:一般使用 rem 会给 html font-size 设置大小为 100px,因为方便计算,这里需要把100px 换算为 vw

    100 / 3.75 = 26.6666666vw;     

    注:上面结果能最大限度减少像素偏差,经测试,若值舍五入为27vw或26vw都会有1-2像素的偏差

   原文参考:http://www.cnblogs.com/xwkj/p/10308082.html

   Demo

    此时表面上看html的font-size被设置为26.6666666vw,但实际html的font-size为100px,1rem = 100px

   元素的值还是用rem,而不是用vw,这么说可能有点绕,运行下面demo在iPhone6下查看就会明白了

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<title></title>
<style>
html {
font-size: 26.6666666vw;
}
div {
margin: 0.2rem auto;
width: 3rem;
height: 0.3rem;
line-height: 0.3rem;
color: #fff;
font-size: 0.16rem;
text-align: center;
background-color: #000;
}
</style>
</head>
<body>
<div>我是第一</div>
<div>我是第二</div>
<div>我是第三</div>
</body>
</html>

    

    注:上面divfont-size 我用的 rem,没用px,主要想让demo效果更明显。

      在实际项目中,有时并不想让字体随设备屏幕变大而变大,可根据项目需求选择为 font-size 设置 rem 还是 px

 

  

移动端布局方案—vw+rem的更多相关文章

  1. 移动端适配方案以及rem和px之间的转换

    背景 开发移动端H5页面 面对不同分辨率的手机 面对不同屏幕尺寸的手机 视觉稿 在前端开发之前,视觉MM会给我们一个psd文件,称之为视觉稿. 对于移动端开发而言,为了做到页面高清的效果,视觉稿的规范 ...

  2. 移动端布局方案汇总&&原理解析

    阿里flexible布局 - 版本1.x 该布局于 2017年8月9日被2.0版本取代 实现原理 假设(UI稿750px宽) 设置viewport的 scale = 1/window.devicePi ...

  3. 移动端适配方案(rem+flex)

    为什么用rem不用px? 主流:各大网站的移动版绝大多数都是用的rem.   移动端屏幕分辨率差别太大:最低适配的iPhone6,分辨率仅为750*1334.而现在市面上大多数手机,都达到了1080* ...

  4. 移动适配请使用比rem等更好的布局方案

      移动端大行其道,rem/em.百分比.响应式方案更是层出不穷,看见周围的伙伴们都在对使用rem和百分比情有独钟,可我却偏不爱,之所以出现如此多的方法,其目的只有一个屏幕适配.   屏幕适配顾名思义 ...

  5. CSS3移动端vw+rem不依赖JS实现响应式布局

    1.前言 (1)vw/vh介绍 在使用之前,我们先简单了解一下什么是vw和rem以及它们的作用,vw是css3出现的一个新单位,它是"view width"缩写,定义为把当前屏幕分 ...

  6. 移动端布局rem em

    1.概念 em作为font-size的单位时,其代表父元素的字体大小,em作为其他属性单位时,代表自身字体大小 rem作用于非根元素时,相对于根元素字体大小:rem作用于根元素字体大小时,相对于其出初 ...

  7. 移动端页面开发适配 rem布局原理

    主题 HTML移动端页面开发适配 rem布局原理 什么是适配,为什么要适配 我们拿到的设计图一般是以640,750,1080分辨率为基准设计的,而现在的手机终端各式各样,分辨率不同,逻辑像素不同 ,适 ...

  8. rem移动端适配方案

    一. rem vs em 单位 定义 特点 rem font size of the root element 以根元素字体大小为基准 em font size of the element 以父元素 ...

  9. 利用vw+rem实现移动web适配布局

    基本概念 1.单位 Px(CSS pixels) 像素 (px) 是一种绝对单位(absolute units), 因为无论其他相关的设置怎么变化,像素指定的值是不会变化的 其实是相对于某个设备而言的 ...

随机推荐

  1. Linux CentOS内核升级

    1. 说明 正在使用的阿里云服务器报了几个内核漏铜,使用自带[一键修复]需要额外的支付费用,所以尝试采用升级系统内核的方式来修复漏洞. 1.1 服务器参数 操作系统:CentOS 7.4 64位 当前 ...

  2. WPF 开源框架项目介绍

    旧版本项目说明 旧版本由于是从学习WPF进行开发的, 历经时长有半年之余,基本上现学现用的那种, 所以存在很多缺陷, 由于整体的设计多处更新, 故旧版本将会终止维护(砍), 基于WCF的项目也会停止, ...

  3. Python-- easy_install 的安装

    http://peak.telecommunity.com/dist/ez_setup.py 将这里面的复制出来打包成ez_setup.py 然后cmd到目录下,直接输入ez_setup.py 可能会 ...

  4. Gitlab的CI/CD初尝试

    初衷:今天公司的前端和测试人员吵起来了.原因是测试埋怨前端人员把Bug的状态更改为已解决,结果代码根本没提交,而前端人员埋怨测试测的太频繁了,需要打几个环境的包不方便.又要改东西又要频繁打包费时间.凡 ...

  5. Java学习——泛型

    Java学习——泛型 摘要:本文主要介绍了什么是泛型,为什么要用泛型,以及如何使用泛型. 部分内容来自以下博客: https://www.cnblogs.com/lwbqqyumidi/p/38376 ...

  6. Java生鲜电商平台-技术方案与文档下载

    Java生鲜电商平台-技术方案与文档下载 说明:任何一个好的项目,都应该有好的文档与设计方案,包括需求文档,概要设计,详细设计,测试用例,验收报告等等,类似下面这个图: 有以下几个管理域: 1. 开发 ...

  7. Linux命令行基本数据库语句

    -- 数据库的操作 -- 链接数据库 mysql -uroot -p mysql -uroot -pmysql -- 退出数据库 exit/quit/ctrl+d -- sql语句最后需要有分号;结尾 ...

  8. system execl

    1. system(); int system(const char *command); 在Windows下,用来调用常用的Dos命令 在Linux下,system()会调用fork()产生子进程, ...

  9. flink 实现三角枚举EnumTriangles算法详解

    1.三角枚举,从所有无向边对中找到相互连接的三角形 /** * @Author: xu.dm * @Date: 2019/7/4 21:31 * @Description: 三角枚举算法 * 三角枚举 ...

  10. [b0009] 玩Hadoop中碰到的各种错误

    1. Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class mp.filetest.WordCount2 ...