概念:
流式佈局是頁面元素寬度按照屏幕分辨率進行適配調整,可是總體佈局不變。css
設計方法:
佈局都是經過百分比來定義寬度,可是高度大都是用px
固定的。html
弊端:webpack
概念:
靜態佈局是無論瀏覽器尺寸是多少,網頁上全部元素的尺寸一概使用px
做爲單位,。這種設計經常使用於pc端
css3
設計方法:
結合min-width
,若是小於這個寬度就會出現滾動條,若是大於這個寬度,則會出現留白web
弊端:npm
PC端
,移動端有嚴重的不兼容性@media
概念:
媒體查詢是css3
的新屬性,爲不一樣屏幕分辨率定義一個佈局樣式,即元素的位置和大小都是會改變的。gulp
設計方法:
根據不一樣的分辨率來設計所須要的元素的位置和大小瀏覽器
//適配iphone 5 @media screen and (max-width: 320px) { html{font-size: 14px;} .name{ font-size: 14px; margin-top: 28px; } } //適配寬度在321px - 413px 之間 @media screen and (min-width: 321px) and (max-width: 413px) { html{font-size: 16px;} .name{ font-size: 16px; margin-top: 32px; } } //適配寬度在414px - 639px 之間 @media screen and (min-width: 414px) and (max-width: 639px) { html{font-size: 17px;} .name{ font-size: 17px; margin-top: 34px; } } //適配寬度大於640px @media screen and (min-width: 640px) { html{font-size: 18px;} .name{ font-size: 18px; margin-top: 36px; } }
弊端:sass
viewport
進行縮放概念:
經過<meta>
來提供一些頁面的元信息,位於文檔的頭部<head>標籤內
來進行縮放框架
設計方法:
<meta name="viewport" content="width=device-width,minimun-scale=1.0,maximum-scale=1.0,user-scalable=no" />
經過設置最大縮放比maximum-sacle
和最小縮放比minimum-scale
來兼容屏幕。
弊端:
rem單位
等來使用。rem
等比例適配屏幕概念:rem
是css3
新增的一個相對長度單位,相對於根元素(即html元素
)font-size
計算值的倍數。經過設置html
的字體大小,來控制rem
的大小。
設計方法:
1)@media
媒體查詢在css
中定義好根元素的font-size
的大小
經過@media
媒體查詢來更改html
的字體大小,實現兼容不一樣的設備。
//適配iphone 5 @media screen and (max-width: 320px) { html{font-size: 14px;} //1rem = 14px } //適配寬度在321px - 413px 之間 @media screen and (min-width: 321px) and (max-width: 413px) { html{font-size: 16px;} //1rem = 16px } //適配寬度在414px - 639px 之間 @media screen and (min-width: 414px) and (max-width: 639px) { html{font-size: 17px;} //1rem = 17px } //適配寬度大於640px @media screen and (min-width: 640px) { html{font-size: 18px;} //1rem = 18px }
設計好根元素以後,頁面中全部的元素的位置和大小單位都採用rem
來寫。
2)js
動態計算font-size
大小
用@media
來設置根元素的font-size
不能使全部的設備全適配,用js
來計算font-size
能夠實現全適配。在<script>
標籤中加上以下代碼,這個標籤最好放在<head>
頭部裏。
(function(){ document.addEventListener('DOMContentLoaded',function(){ var html = document.documentElement; var deviceWidth = html.clientWidth; html.style.fontSize = deviceWidth/750*100 + "px"; },false); })();
其中750
數字是設計稿的尺寸,這裏採用的是iPhone 6 的設計稿尺寸750px
,由於計算出來的font-size
字體過小,且有些瀏覽器不兼容過小的字號,因此font-size
要放大100倍。
頁面元素設置寬高
css中的尺寸 = 設計稿尺寸 / 100
上述的js
代碼也能夠進行簡化:
document.documentElement.style.fontSize = document.documentElement.clientWidth / 750 *100 + "px";
效果和原理都是同樣的。一樣放在一個<script>
標籤裏,標籤放在<head>
裏面。
flexible.js
概念:flexible.js
是阿里團隊開源的一個庫,能夠輕鬆兼容各類不一樣的移動端設備自適應的問題
設計方法:
1)結合viewport
使用
在頁面的<head>
中引入viewport
<meta name="viewport" content="width=device-width,minimun-scale=1.0,maximum-scale=1.0,user-scalable=no" />
2)引入flexible_css.js,flexible.js
在頁面的<head>
中引入文件
// 加載阿里CDN的文件 <script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script>
也能夠把這兩個文件下載到本身的項目中,而後引入,效果是同樣的。
3)頁面單位採用rem
格式
能夠經過一些插件快速的將px->rem
,好比sublime text 3 的 CSSREM 插件
能夠完成自動轉換。
除了使用編輯器的插件外,還可使用css 預處理器
,好比scss
,裏面的函數、混合宏這些功能來實現。
還有一款npm工具
是px2rem
,或是使用PostCSS
。這二者適合在大項目中,由於能夠配合gulp 或是 webpack
,不適合單頁面。
4)頁面效果
配置好flexible.js
後,能夠在頁面上看到它給<html>
元素添加了data-dpr
屬性和font-size
屬性,而且二者會根據不一樣的手機分辨率來動態的改變它們的值。
弊端:
vux, weui, mini ui
等。由於市面上的一些UI 組件
都是自身已經作過適配的,再結合flexible
的話,會致使總體組件被縮小,反而處理起來更加麻煩vw, vh, vmax, vmin
屬性概念:vw,vh
是css3
新增的單位屬性,他們的計算方式是相對於視口的寬度和高度。視口被均分爲100單位vmax
相對於視口的寬度或高度中較大的那個。其中最大的那個被均分爲100單位vmin
相對於視口的寬度或高度中較小的那個。其中最小的那個被均分爲100單位的
設計方式:
元素的位置和大小採用vw , vh , vmax , vmin
爲單位
弊端:
兼容性問題,有些手機不兼容這個單位
綜上所述:
單一的H5頁面
能夠經過動態計算js
來改變font-size
大小。
大型的項目好比webpack項目
能夠採用rem + flexible + sass