【移动适配】移动Web怎么做屏幕适配(一)

屏幕适配是一个很容易被忽略的问题,但对于精益求精的产品而言,是必不可少的。对于Web开发的求职者而言,也是一个必需要理解清楚的经典问题

首发于微信公众号(啃先生)

 (一)

移动端适配的是什么?

我们讨论的是网页适配多种尺寸屏幕,让网页效果看起来和设计师的设计稿一样。说白了就是同一套代码在不同分辨率的手机上跑时,页面元素间的间距,留白,以及图片大小会随着变化,在比例上跟设计稿一致。

举个粟子吧

图1.  260*400的屏幕

图2.  380*400的屏幕

  上边的页面在不同大小屏幕上的展现,咋一看没什么问题,一般的工程师会认为已经OK了,所以前端工程师很容易忽略屏幕适配。但是对于一些精益求精的产品而言,这还达不到要求。例如有以下问题:

  1. 图1的屏幕的尺寸较小,因此头像应该小些,话题左边的空白也应该小一些。
  2. 图片应该保持正方形,而且两张图之间的边距应该随屏幕变化而变化

明白了,所以padding,margin,图片等的大小基本都要做适配

 (二) 

那有什么方法可以做到这种适配?

关键要找到一种长度单位,使得一样的取值,在不同尺寸的屏幕上的大小按比例缩放。

长度单位我只知道px ??

我将在下一期的文章里推有关viewport和css像素px中的细节,这篇文章只关注如何适配,所以先只谈结论:

  1. 网页在viewport中布局,viewport被分成一个个小方块,一个CSS像素占一个方块
  2. 在设置了viewport宽度等于设备宽度的情况下,通过某种算法,在不同大小的屏幕上,1个CSS像素所占屏幕的物理尺寸是一样大的

既然1个CSS像素在不同屏幕上物理尺寸一样大,那px肯定不能做为适配的方法了

长度单位rem是相对于html标签的font-size来计算的。例如html标签设置font-size:36px,同时div设置width:1.2rem。那么这个div的宽度就是1.2rem=36px*1.2=43.2px

如上面的例子,如果加载页面的时候,使用JS根据屏幕的大小动态设置html标签的font-size,随着html标签font-size的值变化,div的1.2rem换算成px的值 也跟着变化,即实现了div随屏幕大小变化而变化,而CSS代码始终是width:1.2rem。以此类推到页面所有的元素。

明白了,奥秘就在于结合px的固定尺寸和rem的相对尺寸!

 (三)

啃先生,原理我明白了,你有没有可执行的具体方案 ???

业内比较流行的做法(参考阿里的flexible),有以下要点:

  1. 设置viewport为设备宽度(这里不一定,但目前先这样足矣)
  2. 将viewport分成10rem,并计算出1rem在当前浏览器的像素值,把它赋予html标签的font-size(分成10rem只是为了方便计算而已)
  3. 写CSS代码时,遇到要适配的地方,比如width,margin,padding等,就不要再用px了,改成用rem

JS和Html代码如下:

CSS代码做了类似如下的修改:

运行结果如下:边距和头像图片都随屏幕变化而变化了

  

(四)

代码量很少,就是要理解消化。有一个问题,设计师给的设计稿尺寸单位都是用px,但是刚刚说的第3步,写CSS的时候要用rem,这个怎么换算?会很麻烦

现有设计师提供宽度为400px的设计稿,其中某个图片的宽度设计为20px,那么,CSS的写法就是img{width: 0.05rem;},怎么得出这个结果的呢?

  1. 设计稿的宽度视同手机宽度,即假设有一个viewport为400px的手机
  2. 将它分成10rem,每个rem为40px;
  3. 那么图片宽度20px自然就是0.5rem;

且慢,岂不是意味着,每次写到尺寸的地方,我都要先在草稿纸上把设计师给的px换算成rem?别急,sublime text 3有一款插件可以帮助你进行这个换算,你只需要输入20px,它会自动帮你换算成 0.5rem,看以下图就秒懂了

  参考


  1. 使用Flexible实现手淘H5页面的终端适配(https://github.com/amfe/article/issues/17)
  2. 移动端高清、多屏适配方案(http://www.html-js.com/article/Mobile-terminal-H5-mobile-terminal-HD-multi-screen-adaptation-scheme%203041)
  3. A tale of two viewports(http://www.quirksmode.org/mobile/viewports.html)


移动适配这个会作为一个小系列来写,下期写浏览器是怎么计算CSS像素的,它在不同屏幕上的差异。

啃先生  开始码字才知道码字不易,坚持码字更不易。转载请声明来源

时间: 2024-10-23 10:51:11

【移动适配】移动Web怎么做屏幕适配(一)的相关文章

使用cocos2dx 3.2和cocosstudio做屏幕适配----有图才有真想!

屏幕适配的文章太多了,基本上都是理论性的东西,大家明白了机制就知道了,没有完美的适配方案,除非你们的美工愿意折腾. 常规策略: 今天研究了一下屏幕适配导致的缩放和展示不全的问题(黑边的方案直接淘汰).细想一下,美工给我们一张图(假设这张图width足够长),在不同的分辨率上我们应该如何对其展示?肯定不可能在所有的分辨率上把这张图完美的按照原比例展示出来,那答案就只有两种了: 1.铺满屏幕(长宽非等比缩放 EXACTFIT) 天天德州就采用了这种方法,在不同的分辨率上能明显看到元素被缩放或者拉伸了

Cocos2d-x 3.1 一步步做屏幕适配

本文并不想讲关于屏幕适配的概念或者大道理,如果还不了解cocos2d-x屏幕适配的,请先看这篇文章:http://www.cocoachina.com/gamedev/cocos/2014/0516/8451.html.本文有一些内容和图片是引用这篇文章的.看了那么多网上关于屏幕适配的文章,还是觉得似懂非懂,所以最好的方法就是自己一步步做好适配. 一.根据屏幕尺寸选择"最"合适的图片. 如果根据屏幕尺寸来选择一样大小的图片,那么美工要哭了,因为对于安卓机,各种各样的分辨率啊,不仅美工要

android API Guides 之 web app -------------Targeting Screens from Web Apps(屏幕适配)

如果你在Android设备上设计开发一款web应用,你就应该考虑web页面在不同屏幕上的显示问题.因为Android有很多不同类型的手机屏幕,所以你应该去考虑那些影响web页面在Android设备上显示的因素. 注意:本文中描述的以下特性,已经在Android 2.0或更高的版本中的Android浏览器(Android系统默认的)和WebView(Android中用于显示网页的控件)上得到支持.第三方的浏览器可能不支持这些的属性.(也就是说只做了解) 针对web页面适配Android设备,你应该

android studio 怎么做屏幕适配?

一.关于布局适配建议1.不要使用绝对布局2.尽量使用match_parent 而不是fill_parent .3.能够使用权重的地方尽量使用权重(android:layout_weight)4.如果是纯色背景,尽量使用android的shape 自定义.5.如果需要在特定分辨率下适配,可以在res目录上新建layout-HxW.xml的文件夹.比如要适配1080*1800的屏幕(魅族MX3采用此分辨率)则新建layout-1800x1080.xml的文件夹,然后在下面定义布局.Android系统

web移动端屏幕适配方案

因为手机屏幕的分辨率大小不一 ,如果使用传统的静态布局,把每个元素的宽高样式写死,在不同的屏幕中就有各种各样的显示效果.这显然不是我们想要的结果.我们需要的是根据屏幕分辨率的不同,来适配不同的样式大小.使不同的手机分辨率下都有相同的样式布局 1.rem适配 1rem就是html标签font-size的大小,在rem适配方案中,我们以rem作为基值来设定元素的大小.1rem单位越大,元素的大小也就越大,1rem单位越小,元素的大小也就越小 实现方法:通过js获取屏幕的分辨率来动态设置1rem的大小

移动web开发中屏幕适配问题

1.首先屏幕的尺寸就是屏幕对角线的长度 尺寸是固定的 2.开发中遇到的单位 相对单位(即相对于屏幕):px em pt 绝对单位(固定的大小,与设备屏幕无关):in cm 3.像素密度 像素密度指的是1英寸里面的像素的数量,比如1英寸里面是10px,通常有两种163(3gs) 330(4s)通常超过320的像素密度就是高清屏,计算方式:屏幕的分辨率高的平方+屏幕分辨率宽的平方 ,然后再开根号,再除以屏幕的英寸. 4.设备独立像素 设备独立像素表示真实像素和分辨率像素的一个比例,比如3gs手机高度

IOS开发之绝对布局和相对布局(屏幕适配)

之前如果做过Web前端页面的小伙伴们,看到绝对定位和相对定位并不陌生,并且使用起来也挺方便.在IOS的UI设计中也有绝对定位和相对定位,和我们的web前端的绝对定位和相对定位有所不同但又有相似之处.下面会结合两个小demo来学习一下我们IOS开发中UI的绝对定位和相对定位.在前面的博客中所用到的UI事例用的全是绝对定位,用我们Storyboard拖拽出来的控件全是绝对定位的,就是我们可以同改变组件的frame来改变组件的位置和大小.而相对定位则不同,相对定位是参考组件周围的元素来确定组件的大小或

034-iOS屏幕适配-iOS笔记

学习目标 1.[了解]屏幕适配的发展史 2.[了解]autoResizing基本用法 3.[掌握]autoLayout 的基本用法 4.[掌握]autoLayout代码实现 5.[理解]sizeClass的基本用法 一.屏幕适配的发展史 随着iOS屏幕尺寸越来越多样化,屏幕适配也就越来越重要了. iphone1 - iphone3gs时代,window的size固定为(320,480).我们只需要简单计算一下相对位置就好了,不需要做屏幕适配. iphone4 - iphone4s时代,苹果推出了

android屏幕适配方案

曾经看了android的屏幕适配方案,有非常多种.当中自己用到的一种是:先找一款主流的分辨率的android机,如:1080*1920的分辨率做基准,然后在这个基准上.调整好一切布局.图片.适配其它手机分辨率的手机.用百分比来调节.比如:在480*800的主流手机上,写了一个height=520,那么在480*800的手机上,这个控件的高度则为 480height = 520 * 屏幕高度/1920. 这种方案做屏幕适配. 项目遇到一个问题. 在剩余空间里.在1080*1920的手机上适配非常好