weex屏幕适配的问题怎么解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了weex屏幕适配的问题怎么解决相关的知识,希望对你有一定的参考价值。

参考技术A 一、"自适应网页设计"的概念
2011年,Ethan Marcotte提出了"自适应网页设计"(Responsive Web Design)这个名词,指可以自动识别屏幕宽度、并做出相应调整的网页设计。
自适应网页设计"到底是怎么做到的?其实并不难。
首先,在网页代码的头部,加入一行viewport元标签。
  
viewport是网页默认的宽度和高度,上面这行代码的意思是,网页宽度默认等于屏幕宽度(width=device-width),原始缩放比例(initial-scale=1)为1.0,即网页初始大小占屏幕面积的100%。
所有主流浏览器都支持这个设置,包括IE9。对于那些老式浏览器(主要是IE6、7、8),需要使用css3-mediaqueries.js。
  
三、不使用绝对宽度
由于网页会根据屏幕宽度调整布局,所以不能使用绝对宽度的布局,也不能使用具有绝对宽度的元素。这一条非常重要。
具体说,CSS代码不能指定像素宽度:
  width:xxx px;
只能指定百分比宽度:
  width: xx%;
或者
  width:auto;
四、相对大小的字体
字体也不能使用绝对大小(px),而只能使用相对大小(em)。
  body
    font: normal 100% Helvetica, Arial, sans-serif;
  
上面的代码指定,字体大小是页面默认大小的100%,即16像素。
  h1
    font-size: 1.5em;
  
然后,h1的大小是默认大小的1.5倍,即24像素(24/16=1.5)。
  small
    font-size: 0.875em;
  
small元素的大小是默认大小的0.875倍,即14像素(14/16=0.875)。
五、流动布局(fluid grid)
"流动布局"的含义是,各个区块的位置都是浮动的,不是固定不变的。
  .main
    float: right;
    width: 70%;
  
  .leftBar
    float: left;
    width: 25%;
  
float的好处是,如果宽度太小,放不下两个元素,后面的元素会自动滚动到前面元素的下方,不会在水平方向overflow(溢出),避免了水平滚动条的出现。
另外,绝对定位(position: absolute)的使用,也要非常小心。
六、选择加载CSS
"自适应网页设计"的核心,就是CSS3引入的Media Query模块。
它的意思就是,自动探测屏幕宽度,然后加载相应的CSS文件。
  <link rel="stylesheet" type="text/css"
    media="screen and (max-device-width: 400px)"
    href="tinyScreen.css" />
上面的代码意思是,如果屏幕宽度小于400像素(max-device-width: 400px),就加载tinyScreen.css文件。
  <link rel="stylesheet" type="text/css"
    media="screen and (min-width: 400px) and (max-device-width: 600px)"
    href="smallScreen.css" />
如果屏幕宽度在400像素到600像素之间,则加载smallScreen.css文件。
除了用html标签加载CSS文件,还可以在现有CSS文件中加载。
  @import url("tinyScreen.css") screen and (max-device-width: 400px);
七、CSS的@media规则
同一个CSS文件中,也可以根据不同的屏幕分辨率,选择应用不同的CSS规则。
  @media screen and (max-device-width: 400px)
    .column
      float: none;
      width:auto;
    
    #sidebar
      display:none;
    
  
上面的代码意思是,如果屏幕宽度小于400像素,则column块取消浮动(float:none)、宽度自动调节(width:auto),sidebar块不显示(display:none)。
八、图片的自适应(fluid image)
除了布局和文本,"自适应网页设计"还必须实现图片的自动缩放。
这只要一行CSS代码:
  img max-width: 100%;
这行代码对于大多数嵌入网页的视频也有效,所以可以写成:
  img, object max-width: 100%;
老版本的IE不支持max-width,所以只好写成:
  img width: 100%;
此外,windows平台缩放图片时,可能出现图像失真现象。这时,可以尝试使用IE的专有命令:
  img -ms-interpolation-mode: bicubic;
或者,Ethan Marcotte的imgSizer.js。
  addLoadEvent(function()
    var imgs = document.getElementById("content").getElementsByTagName("img");
    imgSizer.collate(imgs);
  );
不过,有条件的话,最好还是根据不同大小的屏幕,加载不同分辨率的图片。有很多方法可以做到这一条,服务器端和客户端都可以实现。本回答被提问者采纳

weex的适配原理

一、理解weex的适配前需要先理解几个概念

1.屏幕尺寸:屏幕显示的实际大小,按照屏幕的对角线测量。

2.屏幕分辨率:屏幕容纳像素点的总合,比如2280*1080指的是手机能容纳的像素行数像素列数(与具体手机外观上的长宽不是一个概念)。

3.设备独立像素:也叫 密度无关像素 ,可以认为是计算机坐标系统中的一个点,这个点表示一个可以由程序使用并控制的虚拟像素,可以由相关系统转换为物理像素。

    在pc端一个独立设备像素等于一个设备像素(也叫物理像素),也就是分辨率为2280*1080,则独立设备像素也为2280*1080(特指在pc端放大100%的情况下)。

    在移动端,一个设备像素可能等于几个设备独立像素(也是css像素)。

4.ppi:屏幕像素密度,密度越高,拟真度越高 计算方式:

如下图A,B两个界面:

weex的适配原理


同样的物理尺寸为1英尺。界面A容纳16个像素点,B界面容纳64个点,故一个像素点所占的物理尺寸变小。若想让我们看到的红点在A-B两个不同界面看到的效果达到一致,如下图:

weex的适配原理


根据屏幕分辨率的计算公式:得出物理尺寸(肉眼可见的尺寸)相同的情况下,B界面的像素密度=2*A界面像素密度。

dpr(倍率):物理像素与设备独立像素之间的比例;

注意:在javascript中,可以通过window.devicePixelRatio获取到当前设备的dpr。

下面两个图显示了目前市面上大部分手机的倍率:



在物理像素与设备独立像素达到1:1的时候,页面显示的效果最佳。

设计稿通常以物理像素作为单位制作。750x1334做出的图就是2倍图。


二、实际需要的适配图片的计算方式

1.假设以1334*750为基准的设计稿,设计稿上的某一个图片宽为100px;高为200px;则在分辨率为2280*1080,ppi为403的设备,(dpr=3)上,

若要形成设备独立像素与物理像素为1:1的关系,则需要的图片的实际宽:3*(100/2 )= 150px;(表示宽需要150个像素点填充)

若在分辨率为1334*750,ppi为326,dpr=2的设备上,需要的图片实际宽为:2*(100/2)= 100px;(表示宽需要100个像素点填充)。


三、weex提供的图片处理方式

    weex图片处理提供了三种方式:

    1.contain 缩放图片以完全装入image区域

    2.stretch:按照image设定的宽高比例缩放图片,假设图片宽高比>设定宽高比,则图片拉升。图片宽高比< 设定宽高比,则图片压缩。图片会覆盖整个image区域,图片变形,但是不会裁减。

    3.cover:通过缩放覆盖整个image设置的区域,图片不会变形,但是当image设置区域宽高比不等于图片的宽高比时,会裁减。当设置区域宽高小于图片宽高会压缩图片,当宽高大于图片宽高会失真。

    注意contain方式设置图片,当图片与设置区域宽高比不一致时,图片不会覆盖整个设置区域,但可保证图片不变形。同样存在设置区域过小或者过大导致图片失真,不会让图片变形。

综上,在weex框架中,为确保图片完整覆盖image的设置区域。在图片的处理上采用cover或者stretch的方式。


四、总结

为确保图片的清晰度:

1.粗略的做法,直接给出一张二倍图适应所有的机型,因为现在市场倍率为1的机型大部分已经被淘汰,二倍图在倍率为3的机型上可能有一点点失真,肉眼可能不是很能分辨出来。

1.适中的做法,同一张图设计师给出一倍图,二倍图,三倍图,在获取到客户端的倍率后,选取合适的倍图显示。

2.完美适配的方式:前端获取手机的倍率,传给后台,后台则返回相应倍率的图片,比如某安卓机型是1.5倍率的,则像后台索取1.5倍率的图片。


以上是关于weex屏幕适配的问题怎么解决的主要内容,如果未能解决你的问题,请参考以下文章

android 1080p屏幕 有无虚拟按键的适配

Android 屏幕适配屏幕适配通用解决方案 ③ ( 自定义组件解决方案 | 获取设备状态栏高度 | 获取设备屏幕数据 )

Android 屏幕适配屏幕适配通用解决方案 ③ ( 自定义组件解决方案 | 获取设备状态栏高度 | 获取设备屏幕数据 )

移动适配移动Web怎么做屏幕适配

Android 屏幕适配屏幕适配通用解决方案 ② ( 自定义组件解决方案 | 需要解决的问题 : 设计稿坐标数据转为屏幕真实坐标数据 | 实现步骤 )

Android 屏幕适配屏幕适配通用解决方案 ② ( 自定义组件解决方案 | 需要解决的问题 : 设计稿坐标数据转为屏幕真实坐标数据 | 实现步骤 )