不折騰的前端,和鹹魚有什麼區別css
目錄 |
---|
一 目錄 |
二 前言 |
三 移動端使用的單位 |
四 移動端佈局總結 |
五 1px 實現 |
六 300ms 點擊延遲 |
6.1 jsliang 闡述 |
6.2 瀏覽器開發商解決方案 |
6.3 JavaScript 解決方案 |
七 參考文獻 |
返回目錄
關於移動端的一些問題。html
返回目錄
em
:定義字體大小時以父級的字體大小爲基準;定義長度單位時以當前字體大小爲基準。rem
:以根元素的字體大小爲基準。%
:以父級的寬度爲基準。vw/vh
:基於視口的寬度和高度。返回目錄
rem
單位。能夠拷貝淘寶那份代碼直接使用,簡單來講就是定義 1rem = 16px
,而後配合 meta
使用。position: relative/absolute
佈局(如今更推薦使用 Flex 佈局)以上爲我的經驗,更多的沒接觸過,歡迎補充。前端
返回目錄
產生的緣由:git
根本緣由是 750px
的設計稿上是 UI 設計師期待的 1px
物理像素,它對應實際 375px
稿子上的 0.5px
設備獨立像素。github
而 0.5px
設備獨立像素對於 IOS-8
支持,對於安卓不支持。web
因此安卓會將 0.5px
的設備獨立像素渲染成 1px
的設備獨立像素,也就是說,安卓在 375px
稿子上的設備獨立像素爲 1px
時,佔 2px
物理像素,更粗。瀏覽器
因此咱們拿到設計稿,要按照像素比 dpr
換算,每次量的單位 = 單位 / dpr
,好比 dpr
爲 2 的時候,1px
轉換爲 CSS 之後就是 0.5px
。(咱們看的頁面效果是按以物理像素來講,這纔是問題的關鍵)佈局
方法一:利用 ::after
+ transform
post
div::after { display: block; content: ''; border: 1px solid #ccc; transform: scaleY(0.5); }
方法二:利用 box-shadow
性能
div: { box-shadow: 0 0.5px 0 0 #fff; }
返回目錄
歷史緣由:
首款 iPhone 發佈的時候,由於手機不知道用戶點擊一次屏幕,是點擊按鈕連接,仍是要進行雙擊縮放。
因此 IOS Safari 就等待 300ms
來判斷用戶須要哪一個操做(單擊仍是雙擊),而後產品一把抄,其餘手機也逐漸變成這樣了。
返回目錄
300ms
是因爲首款蘋果作了個雙擊放大的效果,爲了能看到用戶究竟是但願單擊仍是雙擊,因此有個 300ms
的等待,讓手機知道用戶想作啥。
一開始還沒啥,如今網速愈來愈快、手機性能愈來愈好,這個弊端就暴露了。
網上有不少解決方案,說的較多的是瀏覽器廠商提供 viewport
的設置,還有 pollfill
。
可是比較有效的是 FastClick
,它利用的原理是在 touchend
中綁定自定義 click
事件,觸發該事件後直接阻止 300ms
後的 click
事件。
實現自定義事件有 3 種方法:
new Event
new CustomEvent
document.createEvent('CustomEvent')
而後經過給按鈕綁定 addEventListener(eventName, callback)
來實現。
返回目錄
<meta name="viewport" content="user-scalable=no, initial-scale=1, maxinmum-scale=1">
缺陷:並不能很好解決問題,用戶想看圖片這些無法雙擊放大看了。
<meta name="viewport" content="width=device-width">
對於方案一和方案二,Chrome
是率先支持的,Firefox
緊隨其後,然而 Safari
使人頭疼的是,它除了雙擊縮放還有雙擊滾動操做,若是採用這種兩種方案,那勢必連雙擊滾動也要一塊兒禁用;
返回目錄
polyfill
除了IE,其餘大部分瀏覽器都還不支持指針事件。有一些JS庫,可讓咱們提早使用指針事件。好比:
FastClick 是 FT Labs 專門爲解決移動端瀏覽器 300 毫秒點擊延遲問題所開發的一個輕量級的庫。
實現原理是檢測到 touchend
事件的時候,經過 DOM 自定義事件模擬一個 click
事件,並把瀏覽器 300ms
以後的 click
阻止掉。
返回目錄
jsliang 的文檔庫由 梁峻榮 採用 知識共享 署名-非商業性使用-相同方式共享 4.0 國際 許可協議 進行許可。<br/>基於 https://github.com/LiangJunrong/document-library 上的做品創做。<br/>本許可協議受權以外的使用權限能夠從 https://creativecommons.org/licenses/by-nc-sa/2.5/cn/ 處得到。