瀏覽器兼容與響應式布局


主流瀏覽器有5種:IEchromefirefoxsafariopera.

 

瀏覽器兼容

„  瀏覽器私有前綴

  1. -moz-            火狐瀏覽器
  2. -webkit-          360、蘋果、獵豹、搜狗、QQ、 Chrome等瀏覽器
  3. -o-               Opera/歐朋瀏覽器
  4. -ms-              IE、百度等瀏覽器

 

„  跨瀏覽器的默認樣式

  1. Normalize.css  是替代 Reset.css,保護有用的瀏覽器默認樣式,修改瀏覽器自身BUG,優化CSS的可用性,它是模塊化的,擁有詳細的文檔。它從IE8開始支持。
<link rel="stylesheet" href="http://cdn.staticfile.org/normalize/3.0.1/normalize.min.css" type="text/css" />
  1. Reset.css   移除瀏覽器的默認樣式,然后再根據需要把樣式再加回來。

 

„  React.js 在瀏覽器中的兼容情況

  1. 從 React v15 開始,React DOM 將不會再支持 IE8 了。而中國還有超過 18% 的人在使用 IE8。使用仍然支持 IE8 的 React v0.14 。
  2. 我們現在使用的版本是 v0.14.6,不支持IE8,支持IE10/11、Egde。火狐、搜狗、360、IE11都有不同程度的兼容問題。

 

„  Css3 在瀏覽器中的兼容問題

  1. Caniuse.com/#home   查詢css3樣式在瀏覽器中的兼容情況
  2. Css3在Ie中支持不友好,需要在html中加載  ie-css3.htc

 

„  常用css內 hack 瀏覽器兼容寫法,這次portal的兼容我使用的是選擇器的前綴法,條件注釋IE10不支持了且條件注釋里的代碼是不僅僅對css有效,其它兼容問題也可以使用條件注釋方法,portal的兼容只有css的樣式有問題

  1. -ms- : @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none){ … }
  2. -webkit-: @media screen and (-webkit-min-device-pixel-ratio:0){ … }
  3. -moz-:@-moz-document url-prefix() { … }

 

„  使用虛擬機 VM VirtualBox

  1. 下載地址:http://soft.huweishen.com/soft/238.html
  2. 安裝教程:http://tech.huweishen.com/gongju/1544.html

 

響應式布局

 

„  響應式布局方法

  1. 百分比布局
  2. bootstrap柵格系統
  3. Flex 伸縮盒布局
  4. 媒體查詢

 

Porttal里面用了媒體查詢,效果不好,因為側邊欄定寬,導致兩欄有交叉,還要再研究。

綜合流式布局和彈性布局及配合媒體查詢 是 響應性布局的最好方式。

 

„  媒體查詢方法:

  1. 屏幕使用screen;設備使用print;手機設備使用device-width
  2. Window.screen  命令包含顯示設備的信息
  3. Screen.height / screen.width 兩個命令,用來了解設備的分辨率

 

„  Head標簽中需要引入:

  1. <meta name=”viewport” content=”width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no” />

具體含義如下:

  1. Width: 控制viewport的大小。如device-width為設備的寬度。
  2. Height: 和width相對應,指定高度。
  3. initial-scale: 初始縮放比例,頁面第一次加載時的縮放比例。
  4. maximum-scale 允許用戶縮放到的最大比例,范圍從0到10.0
  5. minimum-scale: 允許用戶縮放到的最小比例,范圍從0到10.0
  6. user-scalable: 用戶是否可以手動縮放,值可以是: yes,ture  可以縮放;no,false 不可以縮放;

 

„  字體自適應:

  1. 給根元素html,body設置基本字體,單位vw:

html { font-size: calc(112.5% + 4 * (100vw - 600px) / 400); }

  1. 或用JS根據屏幕寬度計算字體大小:

(function (doc, win) { 

     vardocEl=doc.documentElement, 

     resizeEvt='orientationchange'inwindow?'orientationchange':'resize', 

     recalc=function(){  

     varclientWidth=docEl.clientWidth;  

     if(!clientWidth)return;   

     docEl.style.fontSize=20*(clientWidth/320)+'px'; };  

     if(!doc.addEventListener)return

     win.addEventListener(resizeEvt,recalc,false); 

doc.addEventListener('DOMContentLoaded',recalc,false);})(document,window); 

 

 

在以前,如果我們想同一個網站對不同設備(比如PC端,手機端,平板端等等)提供支持,一般性的做法是針對不同的設備額外實現一套頁面,在web端判斷出訪問設備類型時再路由到不同的實現。

這種做法的弊端很明顯,因為額外的實現,所以后續的更新及維護都比較繁瑣且成本越來越高。那么我們有沒有一種方法,就是只有一份實現但是可以根據不同的設備自動做展現上的調整。Media Query為這種思路的實現提供了支持。

@media screen and (min-width: 961px) and (max-width: 1200px) {
    p {
        color: pink;
    }
}

上面代碼的含義是指,當展現頁面的寬度大於960px且小於1200px時,將p標簽的字體顏色設置為粉色。

 

自適應(響應式)網頁設計

我們可以使用CSS3的Media Query做一些自適應的網頁設計。比如,

<head>
    <link rel="stylesheet" media="screen and (max-width: 480px)" href="tiny.css" />
    <link rel="stylesheet" media="screen and (min-width: 481px) and (max-width: 600px)" href="small.css" />
    <link rel="stylesheet" media="screen and (min-width: 601px) and (max-width: 960px)" href="middle.css" />
    <link rel="stylesheet" media="screen and (min-width: 961px)" href="pc.css" />
</head>

減少css文件的解析,將所有的媒體查詢代碼寫在同一個css文件中

<head>
    <link rel="stylesheet" href="style.css" />
</head>

/*以下為css*/ @media screen and (max-width: 480px) { /* your css code */ } @media screen and (min-width: 481px) and (max-width: 600px) { /* your css code */ } /* more css code */

 

以下是功能性示例網站:

  1. 不同的屏幕大小將導致頁面的側欄發生變化: http://hicksdesign.co.uk/
  2. 不同的屏幕大小將導致頁面導航欄和圖片行數發生變化:http://alistapart.com/d/responsive-web-design/ex/ex-site-FINAL.html
  3. 不同的屏幕大小將導致頁面圖片的分列不同:http://colly.com/
  4. 七牛后台官網,使用flex布局,不同屏幕變化,整體布局自適應:  https://portal.qiniu.com/signin

 

所謂的自適應布局遠遠沒有這么簡單,並不是靠着在不同屏幕大小上對頁面布局做一些調整就可以了。

它還將面臨下面的幾個問題,

  • 不同屏幕尺寸下,圖片(視頻)等資源的展示如何處理
  • 在較小的屏幕尺寸下,往往需要對一些元素進行隱藏,這勢必會造成流量(帶寬資源)的浪費
  • 即使一套頁面可以自適應好幾種設備了,此時一旦有更新,需要同時維護各個設備相關的css代碼並且要做好協調

關於Media Query瀏覽器的兼容性,除了IE8及其以下的瀏覽器不支持,其他的主流瀏覽器基本上都支持

 

一些PC端的媒體查詢斷點,斷點,斷點,重要的事情說三遍

百度分辨率使用情況查詢,可以查詢網民地域分布,瀏覽器市場等,主要是可以查詢哪種分辨率使用人數最多:http://tongji.baidu.com/data/screen

/* 無論pc和手機都會顯示響應式,不滿足要求 (736px為iPhone6 plus橫屏渲染寬度,但在pc上瀏覽器縮小到736px時也有效)*/
@media screen and (max-width: 736px) { }

 /*pc上也會顯示給手機做的響應式,不滿足要求 (添加設備寬)*/
@media screen and (max-width: 736px) and (max-device-width: 1920px) { }

 /* pc chrome瀏覽器拖動寬高為400*800時(max-width: 414px) and (orientation:portrait)有效,不符合要求; 再拖動寬高為600*500時,screen and (max-width: 736px) and (orientation:landscape)有效,不符合要求。 */
@media screen and (max-width: 414px) and (orientation:portrait), screen and (max-width: 736px) and (orientation:landscape) { }

/* 加上更加嚴格的橫豎屏狀態 portrait豎屏 —— landscape橫屏 */
@media screen and (max-width: 414px) and (max-device-width: 1080px) and (orientation:portrait),
       screen and (max-width: 736px) and (max-device-width: 1920px) and (orientation:landscape) { }

/* 最后一版,bug出現 MacBook pro(1280 * 800 2倍屏上*/
@media screen and (max-width: 736px) and (max-device-width: 736px),
screen and (max-width: 736px) and (-webkit-min-device-pixel-ratio: 2.0)  { }

 

斷點的另一種理解:特定的瀏覽器寬度下,頁面元素出現效果不佳時添加斷點。

問題1:屏幕變寬,頁面中可能會出現過多空白區域。應當調節元素寬度或者設置其他方式自動來補充頁面留白.

問題2:寫死高度可能使內容超出模塊范圍,出現截取或者錯版的問題。

問題3:浮動容易導致錯版。

問題5:按鈕、圖片使用一致的對齊方式。

知名互聯網公司 移動端字體大小

類型 基准字體 字體區間
國外官網類 18~16px 大字體 ≈30px 標題字體 22px~18px正文字體 18~14px底部最小字體 14~12px
網購類 14~12px 標題 16px正文 14~12px底部最小字體 12px
國內媒體類 16px 標題 22px~18px正文 18~16px附加信息 12px底部最小字體 12px

 

 

 

 

行高為 1.3、1.35、1.45、1.5

 

參考鏈接:

http://www.w3ctech.com/topic/874

http://blog.gejiawen.com/2015/05/18/css3-media-query-and-responsive-design/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM