移動端總結

移動端技巧總結

對移動端開發(fā)和適配的技巧總結,主要從適配和注意事項兩方面進行總結

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的區(qū)別

  • 默認的html font-size 是16px

  • chrome默認最小font-size為12px

  • em == font-size

  • 區(qū)別em單位自己获三,rem根元素

4.3 手機端方案的特點

  • 百分比布局,無法解決寬高比例的問題

  • 一切單位以寬度為準锨苏,就能完美還原設計稿

4.4 REM使用JS動態(tài)調整疙教,可以和其它單位同時存在

<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產生延遲的原因

單剛開始出現(xiàn)全觸屏手機時的網站都是為桌面端設計的伞租,沒有設置<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”沪斟,統(tǒng)一采用iOS
  2. 使用touchstart事件而不是click

  3. 使用fastclick庫(2017年以后逐漸不用)

6. 點擊擊穿原因及解決

6.1 什么是點擊穿透

在移動端,比如當用戶通過監(jiān)聽touchstart事件暇矫,綁定監(jiān)聽函數(shù)讓浮層關閉時主之,關閉后浮層后面對應位置頁面其他元素也會被點擊。如果浮層后是一個鏈接李根,用戶點擊浮層關閉后大約300ms頁面同時發(fā)生跳轉

6.2 產生原因

觸屏設備為了區(qū)分用戶雙擊縮放槽奕,對click做了300ms延遲觸發(fā),因此用戶在移動端觸屏設備的操作流程以及事件觸發(fā)如下:

  1. 手指點擊屏幕觸發(fā)touchstart事件
  2. 手指短暫停留房轿,如有小移動觸發(fā)touchmove事件
  3. 手指離開屏幕觸發(fā)touchend事件
  4. 等待300ms看用戶是否再次觸摸屏幕粤攒,若沒有在用戶手指離開的位置觸發(fā)click事件

總結: 擊穿的根源在第四步,touchstart事件綁定的監(jiān)聽函數(shù)已經讓浮層關閉囱持,300ms后在用戶手指離開位置觸發(fā)click事件將點擊不到浮層夯接,自然點擊到浮層后面的頁面元素,出現(xiàn)點擊擊穿的現(xiàn)象纷妆。

6.3 解決辦法

  1. 監(jiān)聽改用click事件替換touchstart事件關閉浮層盔几,就產生導致300ms延遲的判定
  2. 還是采用touchstart事件進行監(jiān)聽,在touchstar事件里阻止默認事件Event.preventDefault(),阻止300ms后的click觸發(fā)
  3. 異步處理延后浮層關閉事件掩幢,添加定時器setTimeout大于等于300ms逊拍。

7. 關于1px的實現(xiàn)

7.1 為什么要實現(xiàn)1px

在移動端頁面時上鞠,border: 1px solid red;,還是會覺得1px太寬不能完美還原設計稿顺献,所以需要實現(xiàn)比1px更細的邊框

7.2 實現(xiàn)方式

  1. viewport縮放: viewport適配的方案旗国,適配的原理是整個頁面放大縮小枯怖,當然也包括邊線

  2. 設置0.5px

    .item {
          border-bottom: .5px solid black;
          /*ios有效 部分android無效*/
        }
    
  3. 偽元素 + transform:iOS/android都有效注整,缺點處理一條邊框還好,如果是4條邊框兩個偽元素不夠得新增標簽來實現(xiàn)

.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);
        }
    
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末度硝,一起剝皮案震驚了整個濱河市肿轨,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蕊程,老刑警劉巖椒袍,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異藻茂,居然都是意外死亡驹暑,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門辨赐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來优俘,“玉大人,你說我怎么就攤上這事掀序》溃” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵不恭,是天一觀的道長叶雹。 經常有香客問我,道長换吧,這世上最難降的妖魔是什么折晦? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮沾瓦,結果婚禮上满着,老公的妹妹穿的比我還像新娘。我一直安慰自己暴拄,他們只是感情好漓滔,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乖篷,像睡著了一般响驴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上撕蔼,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天豁鲤,我揣著相機與錄音秽誊,去河邊找鬼。 笑死琳骡,一個胖子當著我的面吹牛锅论,可吹牛的內容都是我干的。 我是一名探鬼主播楣号,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼最易,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了炫狱?” 一聲冷哼從身側響起藻懒,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎视译,沒想到半個月后嬉荆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡酷含,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年鄙早,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椅亚。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡限番,死狀恐怖,靈堂內的尸體忽然破棺而出什往,到底是詐尸還是另有隱情扳缕,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布别威,位于F島的核電站躯舔,受9級特大地震影響,放射性物質發(fā)生泄漏省古。R本人自食惡果不足惜粥庄,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豺妓。 院中可真熱鬧惜互,春花似錦、人聲如沸琳拭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽白嘁。三九已至坑鱼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間絮缅,已是汗流浹背鲁沥。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工呼股, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人画恰。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓彭谁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親允扇。 傳聞我的和親對象是個殘疾皇子缠局,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內容

  • 移動端的適配 一、Viewport視口 用法: 屬性:width: 控制Viewport的大小蔼两,device-wi...
    呆毛和二貨閱讀 1,250評論 0 1
  • 1甩鳄、安卓瀏覽器看背景圖片逞度,有些設備會模糊 用同等比例的圖片在PC機上很清楚额划,但是手機上很模糊,原因是什么呢档泽?經過研...
    xiongshunshun閱讀 237評論 0 1
  • 移動端適配 相對于PC端來說俊戳,移動端設備分辨率百花齊放,千奇百怪馆匿,對于每一個開發(fā)者來說抑胎,移動端適配是我們進行移動端...
    markdown閱讀 2,469評論 0 42
  • 轉自H5頁面窗口自動調整到設備寬度,并禁止用戶縮放頁面 (部分安卓手機的UC瀏覽器寫完以后還是可以放大縮薪ケ薄)忽略將...
    clfeng閱讀 741評論 2 2
  • H5頁面窗口自動調整到設備寬度阿逃,并禁止用戶縮放頁面 (部分安卓手機的UC瀏覽器寫完以后還是可以放大縮小) 忽略將頁...
    阿根廷斗牛閱讀 3,600評論 0 0