移動端適配方案
1、媒體查詢
媒體查詢的使用還能節省開發時間和成本,因為開發人員只需編寫一次程式碼,就可以適應多種裝置。同時,它還可以根據裝置的特性選擇最適合的圖片、字型和其他資源,從而減少頁面載入時間,提高網站的效能。響應式設計是一種現代網頁設計方法,它可以使網頁在不同的裝置和螢幕大小上呈現出合適的佈局和樣式。總之,媒體查詢對於現代網頁開發來說至關重要。它提供了一種簡單而有效的方式來建立自適應佈局,提高使用者體驗,並使網頁設計更加靈活和現代化。
2、flexible 方案(動態 rem 方案)
動態rem適配方案的流程:
- meta 標籤設定 viewport 寬度為螢幕寬度;
- 根據不同螢幕修改根元素 font-size 大小,一般設定為螢幕寬度的十分之一(可引入 lib-flexible 庫,或者自己寫相應邏輯);
- 開發環境配置 postcss-px2rem 或者類似外掛;
- 根據設計稿寫樣式,元素寬高直接取設計稿寬高即可,單位為 px,外掛會將其轉換為 rem;
- 段落文字也按照設計稿寫,單位為px,不需要轉換為 rem;
lib-flexible 其核心程式碼如下:
(function flexible (window, document) { var docEl = document.documentElement // 根據螢幕寬度設定根元素字型大小,set 1rem = viewWidth / 10 function setRemUnit () { var rem = docEl.clientWidth / 10 docEl.style.fontSize = rem + 'px' } setRemUnit() // reset rem unit on page resize window.addEventListener('resize', setRemUnit) window.addEventListener('pageshow', function (e) { if (e.persisted) { setRemUnit() } }) }(window, document))
if (!dpr && !scale) { var isAndroid = win.navigator.appVersion.match(/android/gi); var isIPhone = win.navigator.appVersion.match(/iphone/gi); var devicePixelRatio = win.devicePixelRatio; if (isIPhone) { // iOS下,對於2和3的屏,用2倍的方案,其餘的用1倍方案 if (devicePixelRatio >= 3 && (!dpr || dpr >= 3)) { dpr = 3; } else if (devicePixelRatio >= 2 && (!dpr || dpr >= 2)){ dpr = 2; } else { dpr = 1; } } else { // 其他裝置下,仍舊使用1倍的方案 dpr = 1; } scale = 1 / dpr; }
3、Viewport 方案
即將視覺視口寬度 window.innerWidth
和視覺視口高度 window.innerHeight
等分為 100 份。1vw 等於視口寬度的1%
vw 適配方案的流程:
- meta 標籤設定 viewport 寬度為螢幕寬度;
- 開發環境配置 postcss-px-to-viewport 或者類似外掛;
- 根據設計稿寫樣式,元素寬高直接取設計稿寬高即可,單位為 px,外掛會將其轉換為 vw;
- 段落文字也按照設計稿寫,單位為px,不需要轉換為 vw;
當然,沒有一種方案是十全十美的,vw
同樣有一定的缺陷:
px
轉換成vw
不一定能完全整除,因此有一定的畫素差。- 比如當容器使用
vw
,margin
採用px
時,很容易造成整體寬度超過100vw
,從而影響佈局效果。當然我們也是可以避免的,例如使用padding
代替margin
,結合calc()
函式使用等等...