響應式佈局指的是同一頁面在不一樣屏幕尺寸下有不一樣的佈局。傳統的開發方式是PC端開發一套,手機端再開發一套,而使用響應式佈局只要開發一套就夠。css
使用@media
媒體查詢能夠針對不一樣的媒體類型定義不一樣的樣式,特別是響應式頁面,能夠針對不一樣屏幕的大小,編寫多套樣式,從而達到自適應的效果。舉例來講:html
@media screen and (max-width: 960px){
body{
background-color:#FF6699
}
}
@media screen and (max-width: 768px){
body{
background-color:#00FF66;
}
}
@media screen and (max-width: 550px){
body{
background-color:#6633FF;
}
}
@media screen and (max-width: 320px){
body{
background-color:#FFFF00;
}
}
複製代碼
上述的代碼經過媒體查詢定義了幾套樣式,經過max-width設置樣式生效時的最大分辨率,上述的代碼分別對分辨率在0~320px,320px~550px,550px~768px以及768px~960px的屏幕設置了不一樣的背景顏色。前端
經過媒體查詢,能夠經過給不一樣分辨率的設備編寫不一樣的樣式來實現響應式的佈局,好比咱們爲不一樣分辨率的屏幕,設置不一樣的背景圖片。好比給小屏幕手機設置@2x圖,爲大屏幕手機設置@3x圖,經過媒體查詢就能很方便的實現。css3
可是媒體查詢的缺點也很明顯,若是在瀏覽器大小改變時,須要改變的樣式太多,那麼多套樣式代碼會很繁瑣。git
好比當瀏覽器的寬度或者高度發生變化時,經過百分比單位,經過百分比單位可使得瀏覽器中的組件的寬和高隨着瀏覽器的變化而變化,從而實現響應式的效果。github
height,width屬性的百分比依託於父標籤的寬高。可是,padding、border、margin等屬性的狀況又不同?瀏覽器
css3中引入了一個新的單位vw/vh,與視圖窗口有關,vw表示相對於視圖窗口的寬度,vh表示相對於視圖窗口高度。 任意層級元素,在使用vw單位的狀況下,1vw都等於視圖寬度的百分之一。bash
與百分比佈局很類似,但更好用。前端工程師
rem單位是相對於字體大小的html元素,也稱爲根元素。 默認狀況下,html元素的font-size爲16px。因此此時1rem = 16px。架構
@media screen and (max-width: 414px) {
html {
font-size: 18px
}
}
@media screen and (max-width: 375px) {
html {
font-size: 16px
}
}
@media screen and (max-width: 320px) {
html {
font-size: 12px
}
}
複製代碼
利用rem和媒體查詢,在分辨率發生變換時,給它不一樣的font-size。
//動態爲根元素設置字體大小
function init () {
// 獲取屏幕寬度
var width = document.documentElement.clientWidth
// 設置根元素字體大小。此時爲寬的10等分
document.documentElement.style.fontSize = width / 10 + 'px'
}
//首次加載應用,設置一次
init()
// 監聽手機旋轉的事件的時機,從新設置
window.addEventListener('orientationchange', init)
// 監聽手機窗口變化,從新設置
window.addEventListener('resize', init)
複製代碼
理解:上面代碼實現了,不管設備可視窗口如何變化,始終設置rem爲width的1/10.即實現了百分比佈局。就沒有初版的媒體查詢那樣僵硬。
以上代碼需在dom以前寫入(可放在head裏面第一個script標籤)
其實,如今的主流UI框架都會考慮到響應式佈局這個問題,好比elementUI,iview等框架提供了柵格系統,<row>
搭配<col>
來實現響應式佈局。 因此在工做中直接拿來使用就完事了。
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
複製代碼
這個寫法是用戶不能縮放的頁面設計。由於,若是頁面能縮放的話,就會影響用戶的體驗,在手機端,咱們均可以找到點擊的按鈕或者本身感興趣的菜單進行操做。其二:就是咱們若是讓頁面縮放的話,就徹底暴露了咱們手機app的程序是html的架構了。因此,咱們專爲移動端的設計頁面的時候,就不須要用戶進行縮放了。
flexible.js
是阿里手淘團隊開發的。用來解決移動端的適配問題。
假設如今要適配一個iphone6的設備。
flexible.js
會自動判斷dpr進行整個佈局視口的放縮至於flexible.js
怎麼使用的能夠自行搜索,由於本人移動端作得少,就再也不多說了。