本篇討論的頁面指專門針對手機設備設計的頁面,並不是兼容全設備的響應式佈局。 文中提到的 device-width 指 viewport meta 標籤中 width 的值,即由瀏覽器指定的值,經常使用機型對應值可參照 Screen Sizes。javascript
在不一樣尺寸的手機設備上,頁面「相對性的達到合理的展現(自適應)」或者「保持統一效果的等比縮放(看起來差很少)」。css
通常來講,咱們須要關注的是:字體、高寬間距、圖像(圖標、圖片)。html
其中,圖像相對要複雜一些,針對流量、清晰度等問題網上也有比較成熟的解決方案,好比:矢量化、字體化、image-set 等等,在此不作深刻。在知足快速開發的需求下,咱們使用較爲偷懶的方式:利用 css 將圖像限定在元素內( img 圖片使用 [max-]width: 100%
,背景圖像使用 background-size ),佈局只針對元素進行。前端
另外要考慮到,設計師設計視覺稿時使用什麼樣的寬度,才能既知足設計自身的需求又能讓前端開發方便的切圖適配。java
圍繞這三要素,咱們用一個小例子來講明接下來要介紹的三種方案的實現方式,按 640px 標準需實現的效果如圖:android
這是目前最通用的一種作法,屬於自適應佈局,viewport width 設置爲 device-width,以較小寬度(如 320px)的視覺稿做爲參照進行佈局。垂直方向的高度和間距使用定值,水平方向混合使用定值和百分比或者利用彈性佈局,最終達到「當手機屏幕變化時,橫向拉伸或者填充空白的效果」。圖像元素根據容器狀況,使用定值或者 background-size 縮放。git
粗略瀏覽了下一些大廠的首頁,像百度、騰訊、Facebook、Twitter 都是採用的這種方案。github
實現比較簡單,樣式中的尺寸都按照視覺稿二分之一大小設置web
視覺稿、頁面寬度、viewport width 使用統一寬度,利用瀏覽器自身縮放完成適配。頁面樣式(包括圖像元素)徹底按照視覺稿的尺寸,使用定值單位 (px、em)便可完成。瀏覽器
縮放失效問題需經過 js 動態設定 initial-scale。
var fixScreen = function() { var metaEl = doc.querySelector(‘meta[name="viewport"]‘), metaCtt = metaEl ? metaEl.content : ‘‘, matchScale = metaCtt.match(/initial\-scale=([\d\.]+)/), matchWidth = metaCtt.match(/width=([^,\s]+)/); if ( metaEl && !matchScale && ( matchWidth && matchWidth[1] != ‘device-width‘) ) { var width = parseInt(matchWidth[1]), iw = win.innerWidth || width, ow = win.outerWidth || iw, sw = win.screen.width || iw, saw = win.screen.availWidth || iw, ih