移动开发基础与响应式开发 flex grid 布局

移动开发基础:

       1.   物理像素:是指屏幕分辩率,又叫设备像素;开发中不会用到,只是用于认识屏幕的分辨率;

        2.   css像素:又叫逻辑像素,也叫设备独立像素,独立于设备像素外的像素;用于开发中;

        3.   终点检测:检测当前设备和浏览器等信息console.log(navigator.userAgent)

 

横竖屏检测:

       window.orientation

        横屏:90 ,-90 
        竖屏:0  ,180

        

 

加速度检测:

      devicemotion事件监听手机加速度

       主要有两个属性 event.acceleration   加速度 ,这个属性兼容性不好,必要手机要有陀螺仪才能支持

                                 event.accelerationIncludingGravity  重力加速度,大部分手机都能有效的支持

                                      

                                      

                                      重力加速度 - 加速度 = 手机的引力

                                      

 

      ios中需要https以及第一次需要用户主动点击授权!!! 

       

 

 

 移动端单位:

           1.px;     2.%百分比;   

          3.em 相对于自身字体大小,如果本身没有字体大小,就会去父元素去找字体大小

          4.rem 相对于根元素html字体大小   默认浏览器字体大小是16px,所以1rem=16px;

                    根元素设置font-size:62.5%;  那么1rem=10px;

            5.vw,vh  相对浏览器可视区域的宽度和高度的1%;  

 

移动端适配:

          根据不同屏幕尺寸,自动调节各种长度大小;

          原理,利用rem,再根据不同的屏幕尺寸动态计算font-size

          

 

视口--viewport:

         

           

             ios10以后不支持meta禁止缩放!!

     document.addEventListener('gesturestart', function (event) {
           event.preventDefault()
     })

           获取视口宽度

                      window,innerWidth ;

                      documentElement.clientWidth;

                      document.documentElement.getBoundingClientRect().width;

 

flex布局:

       移动端最爱的布局方式;

       flex容器写法:

                  1.display:flex  ||  inline-flex;     后者是既有块元素也有行内元素属性

                  2.flex-direction:row || row-reverse || column || column-reverse  主轴的方向

                  3.flex-wrap:nowrap || wrap || wrap-reverse   是否换行   

                  5.justify-content:flex-start || flex-end ||center ||space-between || space-around  子元素在主轴对齐方式

                          注意:space-between是两边紧靠,中间平分,space-around是每个元素间距相同

                          

 

                  4.align-items:flex-start || flex-end  || center || baseline || stretch   子元素在交叉轴对齐方式

                            注意:baseline内容基线对齐,stretch是拉伸对齐

                  5.align-content:flex-start || flex-end ||center ||space-between || space-around  多行时交叉轴对齐方式

                            注意:一定要换行才有效

           flex子项的写法:

                  1. order:number;默认是0,可以让元素排序,从小到大,不能为负,只能大于等于0的正整数

                  2.flex-grow:number;设置相同数字,空间AA分,否则谁大谁占的多,拉伸占满容器

                  3.flex-shrink:number;默认为1,空间不足时自动缩小,为0,不缩小,出现滚动条

                  4.flex-basis:auto || 0 ||width  默认auto,就是子元素宽度,为0,宽度被内容撑开

 

grid布局:

      二维布局,能同时对横向和竖向进行布局

         父项:display:grid

                  grid-template-columns:100px 100px 100px; //表示分成3列 ,每列的宽为100px ,也可以用repeat(3,100px)简写

                  grid-template-rows:100px 100px 100px;/表示分成3行 ,每行的高为100px ,也可以用repeat(3,100px)简写

                  row-gap:20px;行间距

                  column-gap:20px;列间距   row-gap和column-gap可以简写gap:20px 20px;

                  grid-auto-flow:row; 子元素顺序    默认是row,从左向右排序,column从上向下排序
                  align-items: start/center/end/stretch  子元素在单元格的位置, 默认是stretch:拉升,占满整个单元格
                  justify-items: 同上
                  align-content: start | end | center | stretch | space-around | space-between | space-evenly 整个内容在容器的位置
                  justify-content: 同上

                  单位不仅仅是px,也可以是%

                  

 

 

       子项:

              grid-row-start和grid-column-start 在现有网格外部放置项目

               

                   

                  grid-column-start | grid-column-end | grid-row-start | grid-row-end 定义某个子项目的位置 项目的四个边框从哪个网格开始

 

        常用布局方法

         

 

           

 

 

  

       关键字1:auto-fill  单元格固定,容器不固定,就会依次填满,一行满了,就会换下一行

                  

 

 

                  

 

      关键字2:fr  剩下的宽度按比例分

                  例:容器宽度减100px后,剩下的宽度,2fr刚好是1fr的两倍

                 

                 

 

        关键字3:minmax()   

                例:最小不能小于100px ,最大不能超过1fr

                 

 

        关键字4:auto() 长度由浏览器自己决定;

 

 

媒体查询:就是查询屏幕大小

        设备类型:screen print all  常用all适用于所有设备

        判断条件 and (类似||,或的意思) not (类似!不)  only(仅仅)

        单一条件: 

            @media screen and (min-width:900px){  ...  }

            查询        屏幕             如果大于900px为真      { 就执行括号里面 }; 

        多个条件:

            @media screen and (min-width:900px) and (max-width:1000px){ ... }

             注意:包括前条件,不包括后条件

            

 移动端事件:

http://hammerjs.github.io/已封装好各种手势的插件(https://www.jianshu.com/p/0b0b9364f967中文地址)

 

touchstart:手指触摸到一个 DOM 元素时触发;

touchmove:手指在一个 DOM 元素上滑动时触发;

touchend:手指从一个 DOM 元素上移开时触发;

touchcancel:当系统停止跟踪触发触发;

 

event.touches  当前屏幕上的手指列表

event.targetTouches  当前元素的手指列表

event.changedTouches   触发当前时间的手指列表

 

touch对象代表一个触点,可以通过event,changedTouches[0]获取

      

        事件点透:点击上层后,上层消失,就会触发下面元素 

                          原因:执行touch后,间隔200毫秒,会查看该位置是否有鼠标事件,有就会执行

                   解决:阻止touch的默认事件

 

移动端性能优化提升

      css方面 :  

          1.类名书写层级尽量简洁;

              

          2.减少高级选择器的使用;

          3.通配符*最好不用;

          4.css中的属性,尽量写合并的属性,类似margin;

          5.使用flex布局;

          6.动画尽量用css3的3d,让cpu加速

      dom方面

          1.获取元素,如果能用id获取,就用id,但是不能滥用,合适再用;

          2.减少dom的使用,需要重复利用的,就单独提取出来;

          3.动态修改样式时,尽量修改class名,不要直接修改样式;

      事件优化

          1.减少事件的使用,利用事件代理(事件委托),原理:事件冒泡;

          2. scroll  resize mousemove touchmove针对这种事件,就要进行节流函数;

      资源的按需加载和预加载

           按需加载也加懒加载,需要的时候再加载;

           预加载,就是空闲的时候,偷偷加载;

           1.图片按需加载

 

posted @ 2019-07-04 14:39  fanbu  阅读(238)  评论(0编辑  收藏  举报