02、CSS3-響應(yīng)式布局

響應(yīng)式布局原理
第一步:Meta標(biāo)簽
大多數(shù)移動瀏覽器將HTML頁面放大為寬的視圖(viewport)以符合屏幕分辨率。你可以使用視圖的meta標(biāo)簽來進行重置。下面的視圖標(biāo)簽告訴瀏覽器,使用設(shè)備的寬度作為視圖寬度并禁止初始的縮放。在標(biāo)簽里加入這個meta標(biāo)簽。<meta name="viewport" content="width=device-width, initial-scale=1
user-scalable=no">

第二步:HTML結(jié)構(gòu)
由于網(wǎng)頁會根據(jù)屏幕寬度調(diào)整布局,所以不能使用絕對寬度的布局,也不能使用具有絕對寬度的元素,更多都是百分比操作,這一條非常重要。
字體也不能使用絕對大小(px),而只能使用相對大小(em)。

第三步:媒體查詢-Media Queries
CSS3 Media Query-媒體查詢是響應(yīng)式設(shè)計的核心。它根據(jù)條件告訴瀏覽器如何為指定視圖寬度渲染頁面。
媒體查詢的目的在于為指定的視圖寬度指定不同的CSS規(guī)則,來實現(xiàn)不同的布局。媒體查詢可以寫在同一個或者單獨的樣式表中。

IE8或者更早的瀏覽器并不支持Media Query。你可以使用media-queries.js或者respond.js來為IE添加Media Query支持。

HTML中的條件注釋:
<!--[if lt IE 9]>
 <script src="https://cdn.staticfile.org/livingston-css3-mediaqueries-js/1.0.0/css3-mediaqueries.min.js"></script>
 <![endif]-->

一、響應(yīng)式布局

實現(xiàn)不同屏幕分辨率的終端上瀏覽網(wǎng)頁的不同展示方式,通過響應(yīng)式設(shè)計能使網(wǎng)站在手機和平板電腦上有更好的瀏覽閱讀體驗。

優(yōu)點:
  面對不同分辨率設(shè)備靈活性強; 
  能夠快捷解決多設(shè)備顯示適應(yīng)問題;
缺點:
  兼容各種設(shè)備工作量大,效率低下;
  代碼累贅,會出現(xiàn)隱藏?zé)o用的元素,加載時間加長;
  其實這是一種折中性質(zhì)的設(shè)計解決方案,多方面因素影響而達(dá)不到最佳效果;
  一定程度上改變了網(wǎng)站原有的布局結(jié)構(gòu),會出現(xiàn)用戶混淆的情況;

如何實現(xiàn)響應(yīng)式布局?
通過CSS3中的Media Query(媒體查詢),對應(yīng)不同屏幕大小,使用不同的樣式操作;

二、viewport視口

  例如: 瀏覽器是相框,照片要放到相框中,照片比較大的時,照片就是進行縮放操作,但整體內(nèi)容也縮放了;另外,照片要打印到相片紙中,再將其放入到相框中;
  PC端,要顯示圖片,是直接將圖片渲染到瀏覽器窗口中;
  移動端,要顯示圖片,不是直接渲染到瀏覽器窗口中的,而是渲染在虛擬區(qū)域中即是viewpot;(移動端比PC端多了一層viewport,即可以通過設(shè)置viewport來控制整體頁面的顯示)
  • viewport的概念
    移動設(shè)備上的viewport就是設(shè)備的屏幕上能用來顯示我們的網(wǎng)頁的區(qū)域。用來顯示網(wǎng)頁的那部分區(qū)域,但viewport可能比瀏覽器的可視區(qū)域要大,也可能比瀏覽器的可視區(qū)域要小。默認(rèn)情況下,移動設(shè)備上的viewport都是要大于瀏覽器可視區(qū)域的,默認(rèn)的viewport設(shè)為980px或1024px(值由設(shè)備自己決定的)。瀏覽器可視區(qū)域的寬度是比這個默認(rèn)的viewport的寬度要小,所以出現(xiàn)橫向滾動條。

  • css中的1px并不等于設(shè)備的1px
    在css中我們一般px作為單位,在桌面瀏覽器中css的1個像素往往都是對應(yīng)著電腦屏幕的1個物理像素。可能會造成我們的一個錯覺,那就是css中的像素就是設(shè)備的物理像素。
    實際情況卻并非如此,css中的像素只是一個抽象的單位,在不同的設(shè)備或不同的環(huán)境中,css中的1px所代表的設(shè)備物理像素是不同的。
    iphone3,它的分辨率為320x480,在iphone3上,一個css像素確實是等于一個屏幕物理像素的。移動設(shè)備的屏幕像素密度越來越高,從iphone4開始,蘋果公司便推出了所謂的Retina屏,分辨率提高了一倍,變成640x960,但屏幕尺寸卻沒變化,這就意味著同樣大小的屏幕上,像素卻多了一倍,這時,一個css像素是等于兩個物理像素的。
    還有一個因素也會引起css中px的變化,那就是用戶縮放。例如,當(dāng)用戶把頁面放大一倍,那么css中1px所代表的物理像素也會增加一倍;反之把頁面縮小一倍,css中1px所代表的物理像素也會減少一倍。

  • 利用meta標(biāo)簽對viewport進行控制
    最常見的操作即是: <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">該meta標(biāo)簽的作用是讓當(dāng)前viewport的寬度等于設(shè)備的寬度,同時不允許用戶手動縮放。
    meta viewport 標(biāo)簽首先是由蘋果公司在其safari瀏覽器中引入的,目的就是解決移動設(shè)備的viewport問題。

  - width: 設(shè)置layout viewport  的寬度,為一個正整數(shù),或字符串"width=device-width"(設(shè)備寬度)
  - initial-scale: 設(shè)置頁面的初始縮放值,為一個數(shù)字,可以帶小數(shù)
  - minimum-scale: 允許用戶的最小縮放值,為一個數(shù)字,可以帶小數(shù)
  - maximum-scale: 允許用戶的最大縮放值,為一個數(shù)字,可以帶小數(shù)
  - height: 設(shè)置layout viewport  的高度,這個屬性對我們并不重要,很少使用
  - user-scalable: 否允許用戶進行縮放,值為"no"或"yes", no 代表不允許,yes代表允許

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">

三、媒體查詢

媒體查詢可用于檢測很多事情:

  - viewport(視窗) 的寬度與高度
  - 設(shè)備的寬度與高度
  - 朝向 (智能手機橫屏,豎屏)
  - 分辨率
  • 媒體查詢語法
 // 表達(dá)式根據(jù)條件是否成立返回 true 或 false
@media not|only mediatype and (expressions) {
    CSS-Code;
}

  - not: not是用來排除掉某些特定的設(shè)備的,比如 @media not print(非打印設(shè)備);
  - only: 用來定某種特別的媒體類型。對于支持Media Queries的移動設(shè)備來說,如果存在only關(guān)鍵字,移動設(shè)備的Web瀏覽器會忽略only關(guān)鍵字并直接根據(jù)后面的表達(dá)式應(yīng)用樣式文件。對于不支持Media Queries的設(shè)備但能夠讀取Media Type類型的Web瀏覽器,遇到only關(guān)鍵字時會忽略這個樣式文件;
  - all: 所有設(shè)備,這個應(yīng)該經(jīng)常看到
  • 多媒體類型
  - all: 用于所有多媒體類型設(shè)備
  - print: 用于打印機
  - screen: 用于電腦屏幕,平板,智能手機等
  - speech: 用于屏幕閱讀器
  • 根據(jù)屏幕不同,引入不同的樣式表
  <!-- 屏幕在1000px以上的-->
  <link href="a.css" rel="stylesheet" media="screen and (min-width: 1000px)" />

  <!-- 屏幕是在600px~1000px-->
  <link href="b.css" rel="stylesheet" media="screen and (min-width: 400px) and (max-width: 1000px)" />

  <!-- 屏幕是在小于400px的-->
  <link href="c.css" rel="stylesheet" media="screen and (max-width: 400px)" />
  • 通過媒體查詢,添加不同樣式
  // 屏幕最小寬度是1000px
  @media screen and (min-width: 1000px) {
    div {
      width: 1000px;
      height: 50px;
      margin: 10px auto;
      color: white;
    }
  }

  // 屏幕最小寬度是400px,最大是1000px
@media screen and (min-width: 400px) and (max-width: 1000px){
    div {
      width: 50%;
      height: 50px;
      margin: 10px auto;
      color: white;
    }
  }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容