可爱的rem

前端开发中,移动端的开发可以说是举足轻重了,可是又面临着不同设备尺寸和分辨率的尴尬点。今天[2018-09-16]台风山竹登陆广东,来势汹汹,外出是不可能的了,那就宅着写写这篇小文章吧...原文请戳这里-谈谈rem单位

超长的前奏

说到移动端的响应布局,你也许会想到:

1. 使用CSS3媒体查询的方法

body {background: yellow;
}
@media screen and (max-width: 400px) {body {background: red;}
}
复制代码

嗯,这种的样式的工作量超级大,因为要对图片和文字等资源针对不同的尺寸进行设置。一种凉凉的感觉从心底飘过~~~

2. 直接使用百分比

这种方法比较适合移动端上,页面图片铺满宽度屏幕的运营推广活动的情况。因为在设计的时候会有一个750px的宽等等设计规范,能够很好的适配到不同手机啦。然后工作就是切图了...

#percent{width: 100%;display: flex;flex-direction: row;justify-content: center;align-items: center;
}
#percent .item{flex: 1;
}
#percent .item img{display: block;width: 100%;height: auto;
}
复制代码

这种切图比较费力,如果认真看上面的gif图的话会发现是三张同等宽高的图片,在chrome上的调试器上看是有白条的,不过不影响。因为在真机上是不存在的。如果不是切图宽度等分的情况下,那就不建议这种百分比的适配方法了。

3. 固定宽度

这种方法比较适合PC端开发,在移动端是必须不能才去的。因为移动端的宽度足够,能够带来足够好的体验,并且最重要的一点是其像素比是1啊。在缩放的时候不会带来内容变形的体验。如果到移动端上面,那就呵呵了~

#container{width: 680px;background: yellow;margin: 0 auto;
}
h1{text-align: center;
}
复制代码

4. 使用viewport

移动设备上的viewport是设备屏幕上用来显示网页的那部分区域,再具体一点就是浏览器上用来显示网页的那部分区域,但viewport又不局限于浏览器可视区域的大小,它可能比浏览器的可视区域大,也可能比浏览器的可视区域小。

这得要在网页的head标签上面设置meta,比如:

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
复制代码

嗯,这个知识点还是一丢丢的,详细的内容参考菜鸟教程:响应式 Web 设计 - Viewport。 本博文的重点不是这个~

是的,我们可以使用REM来进行适配啊:可以说是目前最强的移动端适配方案...

rem是什么

rem和em单位一样,都是一个相对单位,不同的是em是相对于父元素的font-size进行计算,rem是相对于根元素htmlfont-size进行计算的,这样一来rem就完美的绕开了复杂的层级关系,实现了类似em单位的功能。默认情况下,浏览器给的字体大小是16px,按照转化关系16px = 1rem

咦,都是固定了根元素是默认16px了,如何设备不同的移动设备呢?

问题提出也是答案所在,我们动态改变根元素html的字体默认大小不就行了嘛!见下:

rem自适应处理方案

使用rem布局的时候,为了兼容不同的分辨率,我们应该要动态的修正根字体的大小,让所有的用rem单位的子元素跟着一起缩放,从而达到自适应的效果。

嗯,下面就是动态改变根字体的大小了,采取的当然是javascript来进行控制啦,不然怎么知道像素比哦。

一种是获取像素比【像素比=物理像素/逻辑像素】通过devicePixelRatio,其兼容性在ie上要在11及11+,兼容性良好。罢了,不讨论IE浏览器了,看者慎用IE...

(function(){var devicePixelRatio = window.devicePixelRatio || 1;
})();
复制代码

嗯,在移动端上面适配,rem和viewport搭配效果更佳哦!完整代码片段如下:

<head><meta name="viewport" />
</head>
复制代码
(function(){var fontSizeMatchDeviceWidth = function(){var deviceWidth = document.documentElement.clientWidth || window.screen.width || 320,devicePixelRatio = window.devicePixelRatio || 1,fontSize = (Math.ceil(deviceWidth * 16 / 320)),scale = 1 / devicePixelRatio; // 默认的缩放document.documentElement.style.fontSize = fontSize + 'px';document.querySelector('meta[name="viewport"]').setAttribute('content','width=device-width,initial-scale='+'scale'+',maximum-scale='+scale+',minimum-scale='+scale+',user-scalable=no,viewport-fit=cover'); // 增加viewport-fit=cover适配iphone x};(function(){var ua = navigator.userAgent;if(/android/i.test(ua) || /ipad|itouch|iphone/i.test(ua)|| /tianqi/i.test(ua)){fontSizeMatchDeviceWidth();} else { // pc端优雅降级document.documentElement.style.fontSize = '24px';}})();
})();
复制代码

在上面的基础上,添加点点样式,完整的一个demo走一下:

#container{background: yellow;margin: 0 auto;
}
h1{text-align: center;
}
复制代码

如有纰漏,欢迎看到的各位小哥哥小姐姐指正 @~@! 更多内容请前往我的github

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/450683.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kafka直连方式消费多个topic

一个消费者组可以消费多个topic&#xff0c;以前写过一篇一个消费者消费一个topic的&#xff0c;这次的是一个消费者组通过直连方式消费多个topic,做了小测试&#xff0c;结果是正确的&#xff0c;通过查看zookeeper的客户端&#xff0c;zookeeper记录了偏移量 package day04 /…

100个经典的C语言算法

100个经典的C算法 C语言的学习要从基础开始&#xff0c;这里是100个经典的算法 题目&#xff1a;古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔 子长到第三个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;…

MySQL常见面试题目详解

文章目录1. SQL1.1 介绍一下数据库分页1.2 介绍一下SQL中的聚合函数1.3 表跟表是怎么关联的&#xff1f;1.4 说一说你对外连接的了解1.5 说一说数据库的左连接和右连接1.6 SQL中怎么将行转成列&#xff1f;1.7 谈谈你对SQL注入的理解1.8 将一张表的部分数据更新到另一张表&…

[转]windows系统激活

原文链接主题&#xff1a;使用kms激活&#xff0c;可以直接使用命令来完成。 方法&#xff1a;在win10桌面状态下&#xff0c;右击windows徽标或按快捷键windowsx&#xff0c;点击命令提示符&#xff08;管理员&#xff09; 用到的命令是slmgr&#xff0c;手动kms激活命令如下&…

jackson annotations注解详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 官方WIKI&#xff1a;https://github.com/FasterXML/jackson-databind/wiki jackson 1.x和2.x版本的注解是放置在不同的包下的 1.x是在…

JS-for的衍生对象

在js中一般使用方法&#xff1a; 1.常规的for(var i0;i<length;i) 2.for-in:for(var item in list) 3.for of 描述&#xff1a;对应于一个对象的每个属性&#xff0c;或一个数组的每个元素&#xff0c;执行一个或多个语句。 语法&#xff1a;for (variable in [object | ar…

浮点数在计算机中存储方式

C语言和C#语言中&#xff0c;对于浮点类型的数据采用单精度类型&#xff08;float&#xff09;和双精度类型(double)来存储&#xff0c;float数据占用32bit,double数据占用64bit,我们在声明一个变量float f 2.25f的时候&#xff0c;是如何分配内存的呢&#xff1f;如果胡乱分配…

操作系统面试题目详解

文章目录1.13 什么是协程&#xff1f;1.14 为什么协程比线程切换的开销小&#xff1f;1.15 线程和进程的区别&#xff1f;1.16 进程切换为什么比线程更消耗资源&#xff1f;1.17 介绍一下进程之间的通信。1.18 介绍一下信号量。1.19 说说僵尸进程和孤儿进程。1.20 请介绍进程之…

(项目)在线教育平台(六)

八、授课机构功能 1、模板继承 如果几个页面的大体结构相同&#xff0c;可以使用继承的方式来实现母版的重用性&#xff0c;也就是子版继承母版的内容&#xff0c;既可以使用模板的内容&#xff0c;也可以重写需要改变的地地方。 首先完成授课机构的页面&#xff0c;通过页面显…

C语言 socket 编程学习

对于SOCKET在这里我不想究其历史,我只想说其时它是一种进程通讯的方式,简言之就是调用这个网络库的一些API函数就能实现分布在不同主机的相关进程之间的数据交换. SOCKET中首先我们要理解如下几个定义概念: 一是IP地址:IP Address我想很容易理解,就是依照TCP/IP协议分配…

dependency 中的 classifier属性

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 classifier元素用来帮助定义构件输出的一些附属构件。附属构件与主构件对应&#xff0c;比如主构件是 kimi-app-2.0.0.jar 该项目可能还…

PHP超全局变量$_SERVER

$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等等信息的数组。这个数组中的项目由 Web 服务器创建。不能保证每个服务器都提供全部项目&#xff1b;服务器可能会忽略一些&#xff0c;或者提供一些没有在这里列举出来的项目。 $_SERVE…

VC读写XML文件

1、安装MSXML 4.0 SP2。在VC6中建立一个基于Dialog的工程。如图&#xff1a; 在界面上放置3个编辑框、1个按钮控件。其中属性设置如下。 编辑框&#xff1a; IDCategoryVariable TypeVariable NameIDC_IDValueCStringm_strIdIDC_AUTHORValueCStringm_strAuthorIDC_TITLEValueCS…

XCode10 swift4.2 适配遇到的坑

以下是2018年10月23日更新 经过大约一个月的时间的适配&#xff0c;项目正式使用XCode10(以下简称为10 or XC10)大部分库都升级为Swift4.2&#xff08;以下简称为 4.2 or S4.2&#xff09;&#xff0c;下面是适配过程中遇到的一些坑。 1. Swift4、Swift4.2混编 如果你对项目是小…

学生管理系统Java版

简单的学生管理系统 主界面编写&#xff1a; 1.用输出语句完成主界面的编写 2.用Scanner语句实现键盘的录入 3.用swich语句完成操作的选择 4.用循环完成再次回到主界面 代码实现&#xff1a; while (true) {//1.用输出语句完成主界面的编写System.out.println("--------…

dubbo 配置文件详解

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 一、dubbo常用配置 <dubbo:service/> 服务配置&#xff0c;用于暴露一个服务&#xff0c;定义服务的元信息&#xff0c;一个服务可…

ASP.NET Core 实战:Linux 小白的 .NET Core 部署之路

一、前言 最近一段时间自己主要的学习计划还是按照毕业后设定的计划&#xff0c;自己一步步的搭建一个前后端分离的 ASP.NET Core 项目&#xff0c;目前也还在继续学习 Vue 中&#xff0c;虽然中间断了很长时间&#xff0c;好歹还是坚持下来了&#xff0c;嗯&#xff0c;看了看…

学以致用十三-----Centos7.2+python3+YouCompleteMe成功历程

历经几天的摸索&#xff0c;趟过几趟坑之后&#xff0c;终于完成YouCompleteMe的安装配置。 今天同样是个不能忘记的日子&#xff0c;国耻日&#xff0c;勿忘国耻。&#xff08;9.18&#xff09; 服务器安装好&#xff0c;基本配置配置好后&#xff0c;开始安装。 一、检查服务…

VC画图用到的主要方法

1。鼠标落下&#xff0c;记录鼠标的起始位置 void CMyEasyDrawView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 //graph->m_nTypedlg-> m_bStartDraw true; m_PtPress m_PtLast point; CView::OnLButtonDown…

【最新版】Java学习路线(含B站口碑推荐视频链接)

文章目录关于如何自学一、计算机网络二、数据结构与算法三、操作系统四、计算机组成原理五、编译原理六、设计模式七、MySQL八、实操工具九、JAVA并发与JVM十、Redis十一、Linux十二、Java路线学习尚硅谷黑马程序员动力节点狂神说十三、Java基础十四、JavaWeb十五、框架十六、微…