移动端开发学习

移动端基础概念

▪ 做移动端(wap)和做PC端区别:

1、系统      PC:Windows/mac区别不大 ;  移动端:ios/android/windows有区别

2、浏览器   PC:区别很大   ; 移动端:区别不大

3、分辨率(尺寸)    PC:有区别      ; 移动端:区别很大

调试方法:可在谷歌浏览器的手机模式下查看,但是始终与真机效果有差别,所以还可在sublime里真机测试,不过这里有一个更方便的办法,可将做好的demo地址放入二维码生成器中,生成二维码,手机扫描即可。PS:如何将做好的demo生成二维码?获得本机电脑的ipv4地址(windows+r,输入cmd,进入系统运行界面,ipconfig),再替换到demo地址,进入二维码生成器。

 

▪ 设备独立像素:屏幕的大小、屏幕的尺寸(别名叫做点points,是个单位),获取window.screen.width/window.screen.height

注意:1、横竖屏切换时,真机里的这个值不会改变,但在模拟器里会切换

      2、在一个点里,可以放下多个像素

      3、这个值可以通过缩放改变

▪ 设备像素(物理像素):屏幕的分辨率(实际放的像素值),买手机时厂家告诉你的分辨率,这个值是虚拟的,无法获取

▪ 像素比(DPR,这个值无法改变),缩放的比例=设备像素/设备独立像素,获取window.devicePixelRatio

http://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions,可在该网址了解细节

▪ viewport 视口(可视区窗口),通过meta标签设置

未设置时

1、屏幕的高度一般为980,但是不同型号设备相应不同

2、真机与模拟器的值也会不同

3、用window.innerWidth/window.innerHeight方法获取

设置后

Content:视口的相关设置

Width:屏幕的宽度,一般不设置成确定数值,安卓设备有些不支持   device-width:设备的实际宽度  height同理

User-scalable:能否缩放   yes-允许缩放  no-不允许缩放

Initial-scale:初始比例(要与最小比例保持一致) maximum-scale:最大能够缩放的比例  minium-scale:最小能够缩放的比例

1、若设置缩放的话,就把width与user-scalable去掉

2、用了缩放后,并不是真正地缩放了,而是改变了设备的独立像素(屏幕的尺寸)

 

移动端适配方案

 

▪ 适配:在不同尺寸的手机设备上,页面相对性的达到合理的展示(自适应)或者保持一定效果的等比缩放(看起来差不多)

 

适配的元素:1、字体    2、宽高   3、间距   4、图像(图片、图标)这个比较难

 

适配的方法:1、百分比适配   2、比例缩放适配   3、viewport适配    4、rem适配  5、弹性布局适配

 

▪ 百分比布局问题(一般情况下,百分比布局配合其他适配方式使用):

 

1、百分比的值不好计算

 

2、需要确定父级元素的大小,因为要根据父级元素的大小进行计算

 

3、宽度可以设置,但是高度不好设置

 

▪ 比例缩放适配:把所有机型的设备设置成一致的

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">

          <!--切记一定要写移动端优先-->
          <meta name="viewport" content="width=device-width,user-scalable=no"/>

        <title></title>
        <style type="text/css">
            body{
                margin:0px;
            }
            div{
                width:25%;
                height:500px;
                float:left;
            }
            div:nth-child(1){
                background:red;
            }
            div:nth-child(2){
                background:green;
            }
            div:nth-child(3){
                background:blue;
            }
            div:nth-child(4){
                background:pink;
            }
        </style>
        <script type="text/javascript">
            (function(){
            var curWidth=window.screen.width;
            var targetWidth=375;
//            计算缩放比
            var scale=curWidth/targetWidth;
//            动态创建meta元素
            var meta=document.createElement("meta");
            meta.name="viewport";
            meta.content="'initial-scale='+scale+',minimun-scale='+scale+',maximum-scale='+scale";
//            将创建好的meta标签插入头部
            document.head.appendChild(meta);
            })();
        </script>
    </head>
    <body>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </body>
</html>

 

 

1、viewport需要通过js动态的设置(不能直接把device设置成数值)

 

2、通过设置比例(初始比例和缩放比例的),把宽度缩放成

 

一致的

 

注意:viewport里给了缩放以后的值后,最终的页面的宽度是拿来的值除以缩放比例

 

缺点:所有的手机将会看上去是同样大小,没有分别,用户体验非常不好;有时会算出小数,导致有一些误差(无关紧要)

 

▪  viewport适配跟比例缩放适配相似,看下面的代码

 

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">

<!--切记一定要写移动端优先-->

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

          <title></title>

          <style type="text/css">

            body{
                margin:0px;
            }
            div{
                width:25%;
                height:500px;
                float:left;
            }
            div:nth-child(1){
                background:red;
            }
            div:nth-child(2){
                background:green;
            }
            div:nth-child(3){
                background:blue;
            }
            div:nth-child(4){
                background:pink;
            }
        </style>
        <script type="text/javascript">
            (function(){
                /*
                 * 320/scale=640
                 * scale=320/640(设备独立像素/设备像素)=1/2
                 * scale=414/1242=1/3
                 */
//            计算缩放比
            var scale=1/window.devicePixelRatio;
//            动态创建meta元素
            var meta=document.createElement("meta");
            meta.name="viewport";
            meta.content="'initial-scale='+scale+',minimun-scale='+scale+',maximum-scale='+scale";
//            将创建好的meta标签插入头部
            document.head.appendChild(meta);
            })();
        </script>
    </head>
    <body>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </body>
</html>

 

 

 

▪ rem: css3新增的一个相对单位,相对于根节点(html)字体的大小的值

Html{font-size=10px}  2em=20px

通过它可以做到只修改根元素的大小,能成比例地调整所有字体大小,只依赖html字体的大小,在移动端开发里常用。

静态设置rem:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">

          <!--切记一定要写移动端优先-->
          <meta name="viewport" content="width=device-width,user-scalable=no"/>

        <title></title>
        <style type="text/css">
            body{
                margin:0;
            }
            div{
                width:4rem;
                height:4rem;
                background:yellow;
                float:left;
            }
            section{
                width:16rem;
                height:4rem;
                background:pink;
                /*在元素佐佑两侧均不允许浮动*/
                clear:both;
            }
            p{
                width:2.35rem;/*47px*/
                height:2.35rem;
                background:gray;
                clear:both;
            }
        </style>
        <script type="text/javascript">
            window.onload=function(){
//                获取html
                var html=document.documentElement;
//                获取整个界面宽度
                var width=window.screen.width;
//                在控制台输出
                console.log(width);
//                设置根节点字体大小,将屏幕均分成16份,关于被除数,只要以基准换算出来是整数都可以
                html.style.fontSize=width/16+"px";
//                iphone5下,1rem=320/16=20px
            }
        </script>
    </head>
    <body>
        <div>1</div>
        <div>2</div>
        <div>3</div>
        <div>4</div>
        <section></section>
        <p></p>
    </body>
</html>

 

动态设置rem,方法有二

1、

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <!--切记一定要写移动端优先-->
        <meta name="viewport" content="width=device-width,user-scalable=no"/>
        <link rel="stylesheet" type="text/css" href="rem.css"/>
        <title></title>
        <script type="text/javascript">
            window.onload=function(){
                var html=document.documentElement;
                var width=window.screen.width;
//                要有单位px
                html.style.fontSize=width/15+"px";
            }
        </script>
    </head>
    <body>
        <div>1</div>
        <div>2</div>
    </body>
</html>

创建一个less文件:

//结尾有冒号
@rem:25rem;

body{
    margin:0px;
}
div:nth-child(1){
//  只是数值,没有单位了
    width:187/@rem;
    height:100/@rem;
    background:red;
}
//写好以后右键,选择编译,就会编译出一个同名的css文件,没修改一些就要编译一次,css文件里会出现算好的rem值

编译后形成css文件

div:nth-child(1) {
  width: 7.48rem;
  height: 4rem;
  background: red;
}

2、利用HBuilder自带的px转换成rem的功能

点击工具,再选择选项,单击左侧的HBuilder,就会弹出下面的窗口,打开px转rem功能,设置相关参数,就可以直接在css里设置了,此时输入px值会自动换成rem值

 

1、必须动态地区设置html的大小,才能适配

 

2、根据页面(注意:是psd图,也就是真实大小)的宽度除以一个系数,把算出类的这个值赋值给html的font-Size属性

 

特点:1、所有有单位的属性会根据屏幕的尺寸自动加算

 

      2、同样的一个元素,在不同设备下的大小是不一样的,在尺寸小的设备下显示的小,反之,大

 

      3、一般以iphone6为基准,以它的宽度750除上一个系数,再去计算rem

 

为什么要除以一个数字呢?给你一大屏思考!

 

1、一个页面里,不可能全部都是整屏的元素,肯定有一行放多个的元素,所以就把一行等分成n份

 

2、不除以一个数字的话,那1个rem就是一整个屏幕的宽度了,这个值太大,如果元素的宽度比它小的话,不容易计算

 

3、这个系数可以自己定,建议给一个能整除的值

 

▪ vw:相对于视口的宽度,视口被均分为100单位的vw

h1 {font-size: 8vw;}

如果视口的宽度是200mm,那么上述代码中h1元素的字号将为16mm,即(8x200)/100

▪ px:绝对单位,给多少是多少,不会变,做不到适配,在移动端开发里很少用

▪ em:相对单位,相对于自身字体大小的值

Font-size:12px;   1em=12px

问题:1、chrom下有最小字体限制,必须为12px,所以这个值不能小于12

           2、如果有两个一样的元素,但是里面的字体不一样,那就不能统一设置了,或者元素字体变化了,就又要统一设置一遍

 

 

▪ 移动端一些问题

 

1、固定定位问题

 

   固定定位在移动端的兼容性不是很好,以前老版本的某些安卓手机不支持,ios4以前的版本也不支持

 

   qq浏览器下有时候网上滑动的话,就会隐藏掉header

 

   当打开键盘时,固定定位会失效

 

2、body下的overflow问题

 

   body加了overflow:hidden后,横向没效果(ios),安卓下没问题

 

▪ 移动端的样式重置

 

1、连接点击时候,默认有一个背景

 

-webkit-tap-highlight-color:rgba(0,0,0,0);

 

2、按钮在ios下都是圆角

 

-webkit-appearance:none;  //清除输入框和按钮的默认外观

 

Border-radius:0;

 

3、每台设备里的默认字体是不一样的(移动端设备里大部分没有宋体和微软雅黑)

 

Font-family:helvetica;

 

4、横竖屏切换或用户自己通过浏览器设置的话,可以改变字体的大小(需要给body下的所有元素)

 

-webkit-text-size-adjust:100%;

 

5、长按文字ios下会选中文字,安卓下无效

 

-webkit-user-select:none;

 

6、固定定位在一些ios低版本下不兼容,以及一些国产手机里也不兼容

 

posted @ 2017-11-05 15:33  木子王白石  阅读(222)  评论(0编辑  收藏  举报