rem+viewport缩放:移动端/web端的前端适配方案

2019-04-2321:41:23WEB前端开发Comments4,151 views字数 1525阅读模式

rem

rem是CSS3新增的一个相对单位(root em,根em)这个单位与em有什么区别呢?
区别在于
1.使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素。
2.这个单位可谓集相对大小和绝对大小的优点于一身,通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁
3.除了IE8及更早版本外,所有浏览器均已支持rem。对于不支持它的浏览器,应对方法也很简单,就是多写一个绝对单位的声明。
这些浏览器会忽略用rem设定的字体大小。比如:p{font-size:14px;font-size:0.875rem;}

(推荐一个单位转换的工具:http://pxtoem.com/)
复制代码

1.通过媒体查询的方式:css3的media queries

media queries :主要通过查询不同的宽度来执行不同的css代码,最终以达到界面的配置。
核心语法:
@media screen and(max-width:600px){
	/**
		*/
	html{
	 font-size:32px;
	}
}
复制代码

优点:

  • media query 可以做到设备像素比的判断,方法简单,成本较低,特别是对于PC端和移动端维护同一套代码的时候;Bootstrap框架就是使用这种方式布局;
  • 调整屏幕宽度的时候,不需要刷新页面即可响应;
  • 图片便于修改,只需要修改CSS文件;

缺点:

  • 代码量大,维护不方便 -为了兼顾大屏幕或高清设备,会造成其他设备资源浪费,特别是加载图片资源
  • 为了兼顾移动端和PC端各自响应式的展示效果,难免会损失各自特有的交互方式

2.淘宝触屏版以flex弹性盒子布局,实现移动端适配:

以淘宝触屏版首页为代表的flex弹性布局+width:100%百分比单位;不需要适配的地方仍然是px单位;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/11393.html

以下为例: 淘宝网触屏版文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/11393.html

在iphone6/7/8 下: 底部tab栏,position:fixed定位;display:flex;盒子布局;flex-direction:row;justify-content:space-between;文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/11393.html

rem+viewport缩放:移动端/web端的前端适配方案

在iPad下: 在中间分类栏:以posiution:position;display:flex;flex-direction:column;弹性盒子文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/11393.html

rem+viewport缩放:移动端/web端的前端适配方案

京东商城的开发团队同样也使用了移动端/web端相同的适配布局方式:京东开发团队文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/11393.html

rem+viewport缩放:移动端/web端的前端适配方案

在我个人看来,flex弹性盒子布局,以其灵活方便的优势,在适配布局上占据了一席主流地位;flex+vw的布局方式/flex+百分比的布局方式更受前端开发者的欢迎文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/11393.html

3.的rem+viewport缩放

根据屏幕宽度设定rem值,需要适配的元素都使用rem单位,不需要适配的元素还是使用px单位。1em=16px;
复制代码

实现原理:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/11393.html

1.根据rem将页面放大dpr倍, 然后viewport设置为1/dpr.

如iphone6 plus的dpr为3, 则页面整体放大3倍, 
1px(css单位)在plus下默认为3px(物理像素) 

然后viewport设置为1/3, 这样页面整体缩回原始大小. 从而实现高清。
复制代码

这样整个网页在设备内显示时的页面宽度就会等于设备逻辑像素大小,也就是device-width。 这个device-width的计算公式为:设备的物理分辨率/(devicePixelRatio * scale), 在scale为1的情况下,device-width = 设备的物理分辨率/devicePixelRatio 。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/11393.html

作者:GeekQiaQia
链接:https://juejin.im/post/5cbdee71f265da03b57b5866
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/11393.html

文章源自菜鸟学院-https://www.cainiaoxueyuan.com/gcs/11393.html
  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/gcs/11393.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定