手机端

  1. 视口

      

1    document.documentElement.clientWidth;

用手机测试 发现 不管屏幕多大   上面的测试结果都是 980px

而 用电脑则是 变化的值

980是viewport的宽度。viewport叫做“视口”。

980是人定的,来乔布斯定的980这个数字。

980px是人为规定的宽度,叫做视口宽度,所有手机的默认视口宽度都是980px。这是一种妥协,如果用手机访问没有优化的电脑网页的时候,将非常方便,直接卡主版心(版心980),高空俯瞰页面。

html页面加上 下面代码

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />


width=device-width   视口为设备宽度(就是人设置的一个宽度)

initial-scale=1.0        初始化的视口大小是1.0倍

maximum-scale=1.0        最大的倍数是1.0倍

user-scalable=0      不允许缩放视口

发现  document.documentElement.clientWidth 在各个手机上视口不同

约束之后的视口宽度,不是自己的分辨率!!

视口越小,字越大

前端不必在意手机的 分辨率  ui需要关注

手机视口的大小又各有不同,所以要用百分比来进行布局。

如果用百分比写width,那么指的是父元素width的百分之多少。

如果用百分比写height,那么指的是父元素height的百分之多少。

如果用百分比写padding,那么指的是父元素width的百分之多少,无论是水平的padding还是竖直的padding。

如果用百分比写margin,那么指的是父元素width的百分之多少,无论是水平的margin还是竖直的margin。

不能用百分比写border的宽度。

  2.  手机浏览器内核

在移动端,仅有四个独立的浏览器内核,分别为微软的Trident、火狐的Gecko、开源内核Webkit、Opera的Presto。

目前微软的Trident在移动终端上主要为WP7、8系统内置浏览器。Opera的Presto内核主要为 Opera Mobile、OperaMini、欧朋浏览器以及欧朋HD Beta版。Webkit内核的适用范围则较为广泛,Android原生浏览器、苹果的Safari、谷歌的Chrome(Android4.0使用)都是基于Webkit开源内核开发的

兼容的前缀:

1    -ms-
2    -moz-
3    -o-
4    -webkit-

http://gs.statcounter.com/#mobile_browser-CN-monthly-201504-201604

中国用户的浏览器市场份额:

3. 百分比布局 书写不优美

  3.1可使用 CSS3弹性盒属性display:-webkit-box;

  3.2 flex布局

  3.3或第三方插件

   ...

4. 固比固

   4.1方法一 绝对定位

  4.2 display:box;属性  或 flex布局

 5.  

 min-width、max-width

限制 最大或最小的宽度

6. 高度等比变化

做手机页面的时候,盒子可能是宽度是百分比写的,高度是固定的。有些时候,盒子的高度也会等比例变化。

  6.1图片自动就是等比例变化的

图片只设置width。height不设置,高度就是自动等比例变化的。

<div><img /></div>     div是浮动的,没有高度,宽度50%,高度会自动收缩。img设置宽度100%。

 此时 图片下方会有 小段空白

 7.padding-top猫腻

padding-top也是根据父亲的width当参考的。

<style type="text/css">
2            div{
3                width: 50%;
4                height: 0px;
5                padding-top:26.79%;
6                border: 1px solid #000;
7                background: url(images/0.jpg);
8                background-size: contain;
9            }
10        </style>

height的参考者是父盒子的height属性,而padding-top参考的是父盒子的width属性。

padding-top和width都有相同的参考。

原图是560px * 300px ,  width设置为50%的时候,就有等式:

 

解得x=26.79%;

8.

display:table-cell

display属性在css3中又新增了一种,叫做table-cell属性。设置这个属性的盒子就具备了像表格td一样的性质:

当里面有img的时候会自动的按相同的比例设置每个div的宽度。

9.em和rem

em表示父元素的字号的倍数。(特例:在text-indent属性中,表示文字宽度。)

em单位不仅仅可以用来设置字号,还可以设置任何盒模型的属性,比如width、height、padding、margin、border

em属性IE6也兼容

CSS3中,IE9开始兼容一个单位叫做remr就是root

这个单位也是倍数,是html标签字号的倍数。不看父亲,一律看html标签。

html标签中,font-size设置为16px。那么全页面都是以16px当做基准,也就是说1rem=16px

em和rem区别非常大。em看父亲的字号,rem看html标签的字号。

设计师给你一个手机网页的设计图,这个设计图一定是定宽的。

比如这个设计图是600px宽度,logo 120px , nav 弹性的 , btn 120px
此时有经验的前端开发工程师,一定不会用px当做单位,会进行计算。

比如html标签的font-size:16px; 那么120/16 = 7.5 ,所以logo的width就是7.5rem。

这么做的好处是,可以配合媒体查询,来进行显示效果的增强,让大屏幕用户看到的东西真实的变大:

@media(min-width:320px){
2                html{
3                    font-size: 14px;
4                }
5            }
6            @media(min-width:380px){
7                html{
8                    font-size: 16px;
9                }
10            }
11            @media(min-width:440px){
12                html{
13                    font-size: 18px;
14                }
15            }

10 媒体查询

css现在可以根据屏幕的宽度来设置应用哪些css,不应用哪些css

@media screen and (min-width:1200px){
2                body{
3                    background-color: pink;
4                }
5            }
6            @media screen and (min-width:700px) and (max-width:1200px){
7                body{
8                    background-color: blue;
9                }
10            }
11            @media screen and (max-width:700px){
12                body{
13                    background-color: orange;
14                }
15            }

@media就表示媒体查询,查询现在看这个网页的设备是什么,以及它的宽度是多少。

screen表示看这个网页的设备是显示器,而不是残疾人听力设备、也不是打印机。

后面用and符号罗列所有的可能性。

IE6、7、8不支持媒体查询,也为了防止手机端的某些浏览器不支持媒体查询,所以不要把所有的选择器都放在媒体查询里面。“留活口”。

外链样式表也可以在link标签上应用媒体查询:

10.   touch事件

手机网页能够响应click事件,不过比较慢。这是为什么?

因为click事件触发之后,要等300ms(一般手机是300ms)验证是否有下一次点击,如果有的话,视为“双击”。而机器的双击默认操作,可能是放大视口、弹出辅助菜单等等。

大家用手机上网的时候,尤其是看一些PC网站的时候,双击一下屏幕,当前视口变大了。

所以我们在给web页面写事件的时候,一般都不用click事件。而是用touch事件。

touch事件是三个:

touchstart 表示触摸开始,这个事件每次触摸只会触发一次。

touchmove 表示触摸移动,手指放到屏幕上,移动的时候触发

touchend 表示触摸结束

box.addEventListener(“touchstart”,function(){},false);

上面的事件,必须用标准的DOM2级的方法绑定,不能用DOM0级的方式绑定。

event.touches数组 每根手指的触摸信息,都存储在了event.touches数组里面

滑动惯性

12.  库  插件

猜你喜欢

转载自www.cnblogs.com/caoleyun/p/12739216.html