移动终端屏幕自适应的一点经验

原创
2014/09/27 12:13
阅读数 650

1)地球人都知道采用标签:

<meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-    scale=1.0,user-scalable=no;">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="format-detection" content="telephone=no">

    除此之外还有一个content属性 target-densitydpi= medium-dpi,device-dpi,low-dpi,high-dpi 也是会影响的,不过最好设置默认的值 medium-dpi .


2)对于采用<img>标签的图片我们必须明确它的宽高

<img style="width=200px;max-width:100%;height:200px;max-height:100%;"/>

之所以这样设置,原因是图片如果不明确设置宽高,它采用自身的宽高进行页面布局,从而打破了部分浏览器的屏幕自适应。那么我们采用width 与 max-width的目的其一是找一个最好的宽度,如果宽度无法满足,那么不能超越屏幕中设定的最大值,这样的话就不会因为图片而破坏布局了。另外,width与height一般不会同时指定,原因是图片的宽高设置其一,另一个按比例变化,所以设置二者反而适得其反。


3)页面布局时采用的宽度与高度

    对于容器我们应该采用百分比设置width,height要么写死px,要么自适应,千万不要使用百分比设置高度,原因是复杂的页面根本控制不住高度的设置。对于容器的padding border margin 不用百分比设置大小,这些调解间距的属性只是粗糙控制而已,因为不同的分辨率下就算你写死了几个像素他们给你的显示也是不一样的。对于非容器类标签当然采用像素控制,不用百分比,或者采用自适应。因为这些标签已经是显示的内容了,内容是必须在UI设计师确定好大小的。


4)文字大小

    很多人都认为采用em,相对单位,可是又有人知道吗?这个单位的计算是在父元素的基础上计算大小的,所以必须知道父元素字体的大小你才可能确定这个百分比。就因为这点,我非常不喜欢用它。页面中采用像素设置字体大小不也很好。


5)位置的设置

    总是喜欢把文字居中,把位置居中等....写多了页面就知道,居中真的还不如靠右靠左强,原因是:页面中的文字在不断变化(需求还未明确之前),然后一贯居中后发现没有达到左右对齐。为了弥补居中对齐,我往往会采用<span visibility>来控制对齐,想想这会带来多少无意义的标签啊。


6)div 还是 table

    一般大的容器我是不会使用table的,这个加载太慢,都懂的。但是小的容器就会采用,想想如果总是采用 div 去 float,你要去兼容多少浏览器啊,不同浏览器对float解析还是稍有差异的。


7)对于不同的屏幕分辨率采用不同的像素,个人觉得像我这种Java程序员真的没心思去那样写,可以接受就可以了,一个页面写那么多CSS,有点不分重点的感觉。


为了更好了解meta标签,下面是转载的内容:


下面是转载 http://my.68design.net/29551/news/14587.html 关于meta标签的真正意义

    手机浏览器是把页面放在一个虚拟的“窗口”(viewport)中,通常这个虚拟的“窗口” (viewport)比屏幕宽,这样就不用把每个网页挤到很小的窗口中(这样会破坏没有针对手机浏览器优化的网页的布局),用户可以通过平移和缩放来看网 页的不同部分。常用的viewport布局为:<meta name="viewport" content="width=device-width,user-scalable=no" />

具体的含义是:

width:控制 viewport 的大小,可以指定的一个值,如果 600,或者特殊的值,如 device-width 为设备的宽度(单位为缩放为 100% 时的 CSS 的像素),默认的虚拟窗口为980像素宽(目前大部分网站的标准宽度),然后按一定的比例(3:1或2:1)进行缩放。

height:和 width 相对应,指定高度。

target- densitydpi:一个屏幕像素密度是由屏幕分辨率决定的,通常定义为每英寸点的数量(dpi)。Android支持三种屏幕像素密度:低像素密度, 中像素密度,高像素密度。一个低像素密度的屏幕每英寸上的像素点更少,而一个高像素密度的屏幕每英寸上的像素点更多。Android Browser和WebView默认屏幕为中像素密度。

下面是 target-densitydpi 属性的 取值范围

device-dpi –使用设备原本的 dpi 作为目标 dp。 不会发生默认缩放。

high-dpi – 使用hdpi 作为目标 dpi。 中等像素密度和低像素密度设备相应缩小。

medium-dpi – 使用mdpi作为目标 dpi。 高像素密度设备相应放大, 像素密度设备相应缩小。 这是默认的target density. 

low-dpi -使用mdpi作为目标 dpi。中等像素密度和高像素密度设备相应放大。

<value> – 指定一个具体的dpi 值作为target dpi. 这个值的范围必须在70–400之间。

<meta name="viewport" content="target-densitydpi=device-dpi" />
<meta name="viewport" content="target-densitydpi=high-dpi" />
<meta name="viewport" content="target-densitydpi=medium-dpi" />
<meta name="viewport" content="target-densitydpi=low-dpi" />
<meta name="viewport" content="target-densitydpi=200" />

为了防止Android Browser和WebView 根据不同屏幕的像素密度对你的页面进行缩放,你可以将viewport的target-densitydpi 设置为 device-dpi。当你这么做了,页面将不会缩放。相反,页面会根据当前屏幕的像素密度进行展示。在这种情形下,你还需要将viewport的 width定义为与设备的width匹配,这样你的页面就可以和屏幕相适应。

initial-scale:初始缩放比例,也即是当页面第一次 load 的时候缩放比例。

maximum-scale:允许用户缩放到的最大比例,范围从0到10.0。

minimum-scale:允许用户缩放到的最小比例,范围从0到10.0。

user-scalable:用户是否可以手动缩放,值可以是:①yes、 true允许用户缩放;②no、false不允许用户缩放,如果你将其设置为no,那么minimum-scale 和 maximum-scale都将被忽略,因为根本不可能缩放。。

所有的缩放值都必须在0.01–10的范围之内。

将这些属性设置之后放入html5 的meta属性中,即可对手机屏幕进行适应,例:

meta name="viewport"
        content="
        height = [pixel_value | device-height] ,
        width = [pixel_value | device-width ] ,
        initial-scale = float_value ,
        minimum-scale = float_value ,
        maximum-scale = float_value ,
        user-scalable = [yes | no] ,
        target-densitydpi = [dpi_value | device-dpi | high-dpi | medium-dpi | low-dpi]
    "
/>

下面是两个实际使用的例子:


(设置屏幕宽度为设备宽度,禁止用户手动调整缩放)

<meta name="viewport" content="width=device-width,user-scalable=no" />


(设置屏幕密度为高频,中频,低频自动缩放,禁止用户手动调整缩放)

<meta name="viewport" content="width=device-width,target-densitydpi=high-dpi,initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no"/>



展开阅读全文
打赏
1
35 收藏
分享
加载中
更多评论
打赏
0 评论
35 收藏
1
分享
返回顶部
顶部