网页适配(移动端网页布局方案)

一、rem方案

        方式一:

        跟pc端网页平滑自适应一样,通过js控制html字体大小,实现移动端的页面自适应布局。     使用这种布局方式

        需要在头部设置:

   <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1, minimum-scale=1">

    也就意味着使用”理想视口 ” 进行布局;

        方式二:

                    media+rem     如果通过媒体查询做移动端开发,需要把主流的屏幕大小适配出来,例:

@media screen and (min-width:350px){ 
	html{font-size:342%;} 
}
@media screen and (min-width:360px){ 
	html{font-size:351.56%;} 
} 
字体的百分比计算逻辑

        依据设计稿的尺寸进行推导!

例如:

                设计稿 宽:750px,  设计稿字体尺寸:16px  假定1rem = 100px,字体尺寸: 1 / 16 * 100 = 625%;  (1px对应的rem大小,最后*100) 当屏幕尺寸为640px时, 字体大小是:625% * (640 / 750)= 533.3333%; 当屏幕尺寸为375px时, 字体大小是:625% * (375 / 750)= 312.5%;

二、flexible.js 方案 (手淘方案)

        flexible.js方案是手淘(手机淘宝)开源的一个做移动端适配的方案,此方案的主体思路跟rem方案类似,但是也有区别;     类似:都是通过设置font-size来进行适配     区别:rem方案是通过”理想视口 ”(不考虑dpr)的方式进行适配,而flexible方案是考虑dpr,然后配合页面缩放(initial-scale)完成适配;

        flexible.js 详解

                flexible方案是以iPhone6 为基稿进行的设计,大家可以理解成flexble默认以750宽(因为iphon6的物理分辨率是750*1334)的设计稿为基础进行的设计。 他的设计思想是把设计稿分成十份,1rem = 1份;所以默认html的font-size =75px;     所以如果你在使用flexible设计移动端适配时,如果你的设计稿是750,那么px与rem的转换比例就是75,如果你的设计稿是640,那么px与rem的转换比例是64。    Flexible适配考虑了iphone dpr为1,2,3的情况,对于安卓来说,他统一的设置dpr为1,所以对于安卓的高清适配flexible不是很完美。

三、vm/vh 移动端适配

                                        ​​​​​​​1vw = 屏幕宽度的1%;     1vh = 屏幕高度的1%;   

 使用vm/vh做移动端适配,可以说是最完美的方案,唯一不足就是部分手机厂商的支持度不是很好。

手淘的flexible方案就是模拟的vw/vh特性(flexible是把页面分成10份)。     

使用vm/vh做移动端适配,不需要考虑js换算等操作,是纯css方案。唯一注意的是把设计稿的px单位转换成vw/vh单位即可。     

转换px为vw/vh方案有很多,这里使用vscode的px2vw插件:     px2vw         

四、移动端网页布局方案会碰到的问题

                1.经典1px问题

         问题出现的原因:1px问题是在移动设置1px的边框时,在不同的设备上会出现比1px粗的情况。原因是在dpr为2或者更高的屏幕上,1px其实占据的真实物理像素为2px或更多,设计师的本意肯定是1px就是1px,所以就会出现1px的问题。     

        各种适配方案的特点:     

                (1) rem适配方案, 可以采用rem单位去制作1px的边框,虽然可以一定程序上避免1px的问题,但是会出现不精准的情况,这就需要跟设计师沟通看这个问题是否可以接受。如果直接使用1px单位,那么就需要处理1px问题。             

                (2)flexible.js适配方案,使用flexible适配方案可以避免iphone端1px的问题,因为flexible方案考虑了iphone端的dpr问题,但是安卓端是没有考虑dpr的,所以安卓端1px问题根据需求需要处理;  

                (3)vm/vh方案,和(1)一样的情况;

        解决1px问题的方法有很多,各有各的特色,这里推荐一种方法:transform+伪元素     transform+伪元素解决1px问题

        2.图片模糊问题

                问题出现的原因:我们平时看使用的图片大多数都属于位图(png、jpg…),位图的由一个个像素点构成,每个像素都具有特点的位置和颜色:

理论上,位图的每个像素对应在屏幕上使用一个物理像素渲染,才能达到最佳的显示效果。   

 而在dpr>1的屏幕上,位图的一个像素可能由多个物理像素渲染,然而这些物理像素点并不能被准确的分配上对应位图像素的颜色,所以相同的图片在dpr>1的屏幕上就会模糊。    

3.解决方案       

        为了保证图片质量 我们应该尽可能让一个屏幕像素来渲染一个图片像素,所以  针对不同DPR的屏幕,我们需要展示不同的分辨率图片

        如:在dpr=2的屏幕上展示两倍图(@2x),在dpr=3的屏幕上展示三倍图(@3x)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值