移动端总结

移动端技巧总结

对移动端开发和适配的技巧总结,主要从适配和注意事项两方面进行总结

1.媒介查询

<style>
    @media(min-width: 300px) and (max-width: 320px){

    }
  </style>
<link rel="" herf="" media="(min-width: 300px) and (max-width: 320px)

2. 手机端加一个meta

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

3. 移动端特点

响应式其实用的不多,主要是在一些新闻网站或博客。大型网站多用两套页面,无IE

  1. 手机上没有hover
  2. Vue swipe、jQuery swipe;touch事件
  3. 没有resize
  4. 没有滚动条

4.REM手机专用

4.1什么是REM

  • em 一个单位m的宽度,一个汉字的宽度
  • rem rootem 根元素html的font-size 16px

4.2REM和EM的区别

  • 默认的html font-size 是16px

  • chrome默认最小font-size为12px

  • em == font-size

  • 区别em单位自己,rem根元素

4.3 手机端方案的特点

  • 百分比布局,无法解决宽高比例的问题

  • 一切单位以宽度为准,就能完美还原设计稿

4.4 REM使用JS动态调整,可以和其它单位同时存在

<script>
    var pageWidth = window.innerWidth
    document.write(`<style>html{font-size: ${pageWidth/10}px}</style>`)
  </script>
<style>
    * {
      margin: 0;
      padding: 0;
    }
    .child{
      background: #ddd;
    }
    body {
      font-size: 16px;
    }
    .child {
      width: 4rem;
      height: 2rem;
      margin: 0.5rem;
      float: left;
      border: 1px solid red /*特别小的还是用px*/
    }
    .clearfix::after{
      content: '';
      display: block;
      clear: both;
    }
  </style>

4.5在scss里使用px2rem

在scss文件里添加

@function px( $px ){
  @return $px/$designWidth*10 + rem;
}

$designWidth : 640; // 640 是设计稿的宽度,根据设计稿的宽度填写

.child{
  width: px(320);
  height: px(160);
  margin: px(40) px(40);
  border: 1px solid red;
  float: left;
  font-size: 1.2em;
}

5.点击300ms延迟

5.1 click产生延迟的原因

单刚开始出现全触屏手机时的网站都是为桌面端设计的,没有设置<meta name="viewport">,为了方便手机用户,手机浏览器添加了双击缩放的功能。手指在屏幕上快速点击两次,浏览器回将页面缩放至原始比例。

如何判定用户双击呢?在第一次点击屏幕后300ms内有第二次点击,就判定用户想要缩放而不是点击页面元素;所以当用户点击页面元素300ms后浏览器才会响应用户操作,判定用户为点击操作而不是缩放。

5.2 解决方法

  1. 设置meta:vp `

    <meta name="viewport" content="width=device-width">
    
    • android添加name=viewport的meta即可消除延迟
    • iOS上必须设置属性content=“width=device-width”,统一采用iOS
  2. 使用touchstart事件而不是click

  3. 使用fastclick库(2017年以后逐渐不用)

6. 点击击穿原因及解决

6.1 什么是点击穿透

在移动端,比如当用户通过监听touchstart事件,绑定监听函数让浮层关闭时,关闭后浮层后面对应位置页面其他元素也会被点击。如果浮层后是一个链接,用户点击浮层关闭后大约300ms页面同时发生跳转

6.2 产生原因

触屏设备为了区分用户双击缩放,对click做了300ms延迟触发,因此用户在移动端触屏设备的操作流程以及事件触发如下:

  1. 手指点击屏幕触发touchstart事件
  2. 手指短暂停留,如有小移动触发touchmove事件
  3. 手指离开屏幕触发touchend事件
  4. 等待300ms看用户是否再次触摸屏幕,若没有在用户手指离开的位置触发click事件

总结: 击穿的根源在第四步,touchstart事件绑定的监听函数已经让浮层关闭,300ms后在用户手指离开位置触发click事件将点击不到浮层,自然点击到浮层后面的页面元素,出现点击击穿的现象。

6.3 解决办法

  1. 监听改用click事件替换touchstart事件关闭浮层,就产生导致300ms延迟的判定
  2. 还是采用touchstart事件进行监听,在touchstar事件里阻止默认事件Event.preventDefault(),阻止300ms后的click触发
  3. 异步处理延后浮层关闭事件,添加定时器setTimeout大于等于300ms。

7. 关于1px的实现

7.1 为什么要实现1px

在移动端页面时,border: 1px solid red;,还是会觉得1px太宽不能完美还原设计稿,所以需要实现比1px更细的边框

7.2 实现方式

  1. viewport缩放: viewport适配的方案,适配的原理是整个页面放大缩小,当然也包括边线

  2. 设置0.5px

    .item {
          border-bottom: .5px solid black;
          /*ios有效 部分android无效*/
        }
    
  3. 伪元素 + transform:iOS/android都有效,缺点处理一条边框还好,如果是4条边框两个伪元素不够得新增标签来实现

.item::after {
      content: '';
      display: block;
      height: 1px;
      transform: scaleY(0.5);
      background: #black;
      position: relative;
      top: 13px;
    }
  1. 线性渐变背景: 兼容性好

    .item-4-border {
          margin: 10px 0;
          padding: 10px;
          background: 
             linear-gradient(to bottom, #ccc .5px, transparent 0), 
             linear-gradient(to left, #ccc .5px, transparent 0), 
             linear-gradient(to right, #ccc .5px, transparent 0), 
               linear-gradient(to top, #ccc .5px, transparent 0);
        }
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容

  • 移动端的适配 一、Viewport视口 用法: 属性:width: 控制Viewport的大小,device-wi...
    呆毛和二货阅读 1,232评论 0 1
  • 1、安卓浏览器看背景图片,有些设备会模糊 用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢?经过研...
    xiongshunshun阅读 223评论 0 1
  • 移动端适配 相对于PC端来说,移动端设备分辨率百花齐放,千奇百怪,对于每一个开发者来说,移动端适配是我们进行移动端...
    markdown阅读 2,467评论 0 42
  • 转自H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 (部分安卓手机的UC浏览器写完以后还是可以放大缩小)忽略将...
    clfeng阅读 739评论 2 2
  • H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 (部分安卓手机的UC浏览器写完以后还是可以放大缩小) 忽略将页...
    阿根廷斗牛阅读 3,567评论 0 0