爲何會有兼容問題?css
因爲市場上瀏覽器種類衆多,而不一樣瀏覽器其內核亦不盡相同,因此各個瀏覽器對網頁的解析就有必定出入,這也是致使瀏覽器兼容問題出現的主要緣由,咱們的網頁須要在主流瀏覽器上正常運行,就須要作好瀏覽器兼容。html
使用Trident內核的瀏覽器:IE、Maxthon、TT; 使用Gecko內核的瀏覽器:Netcape6及以上版本、FireFox; 使用Presto內核的瀏覽器:Opera7及以上版本; 使用Webkit內核的瀏覽器:Safari、Chrome。
而我如今所說的兼容性問題,主要是說IE與幾個主流瀏覽器如firefox,google等。而對IE瀏覽器來講,IE7又是個跨度,由於以前的版本更新甚慢,bug甚多。從IE8開始,IE瀏覽器漸漸遵循標準,到IE9後因爲你們都一致認爲標準很重要,能夠說在兼容性上比較好了,可是在中國來講,因爲xp的佔有率問題,使用IE7如下的用戶仍然不少,因此咱們不得不考慮低版本瀏覽器的兼容。前端
對瀏覽器兼容問題,通常分,HTML,Javascript兼容,CSS兼容。 其中html相關問題比較容易處理,無非是高版本瀏覽器用了低版本瀏覽器沒法識別的元素,致使其不能解析,因此平時注意一點就是。特別是HTML5增長了許多新標籤,低版本瀏覽器有點影響時代進步啊chrome
問題一:不一樣瀏覽器的標籤默認的外補丁和內補丁不一樣瀏覽器
*{margin:0;padding:0;}
問題二:塊屬性標籤float後,又有橫行的margin狀況下,在ie6顯示margin比設置的大app
問題三:設置較小高度標籤(通常小於10px),在ie6,ie7,遨遊中高度超出本身設置高度ide
問題四:行內屬性標籤,設置display:block後採用float佈局,又有橫行的margin的狀況,ie6間距bug(相似第二種)佈局
問題五:圖片默認有間距google
問題六:標籤最低高度設置min-height不兼容spa
{min-height:200px; height:auto !important; height:200px; overflow:visible;}
問題七:透明度的兼容css設置
方法是:每寫一小段代碼(佈局中的一行或者一塊)咱們都要在不一樣的瀏覽器中看是否兼容,固然熟練到必定的程度就沒這麼麻煩了。建議常常會碰到兼容性問題的新手使用。不少兼容性問題都是由於瀏覽器對標籤的默認屬性解析不一樣形成的,只要咱們稍加設置都能輕鬆地解決這些兼容問題。若是咱們熟悉標籤的默認屬性的話,就能很好的理解爲何會出現兼容問題以及怎麼去解決這些兼容問題。
技巧一:css hack
使用hacker 我能夠把瀏覽器分爲3類:ie6 ;ie7和遨遊;其餘(ie8 chrome ff safari opera等)
1: 好比這樣一個css設置 height:300px;*height:200px;_height:100px; 2: ie6瀏覽器在讀到 height:300px的時候會認爲高時300px;繼續往下讀,他也認識*heihgt, 因此當ie6讀到*height:200px的時候會覆蓋掉前一條的相沖突設置,認爲高度是200px。繼續往下讀,ie6還認識_height,因此他又會覆蓋掉200px高的設置,把高度設置爲100px; 3:ie7和遨遊也是同樣的從高度300px的設置往下讀。當它們讀到*height200px的時候就停下了,由於它們不認識_height。因此它們會把高度解析爲200px; 4:剩下的瀏覽器只認識第一個height:300px;因此他們會把高度解析爲300px。
由於優先級相同且相沖突的屬性設置後一個會覆蓋掉前一個,因此書寫的次序是很重要的。
/* CSS屬性級Hack */ color:red; /* 全部瀏覽器可識別*/ _color:red; /* 僅IE6 識別 */ *color:red; /* IE六、IE7 識別 */ +color:red; /* IE六、IE7 識別 */ *+color:red; /* IE六、IE7 識別 */ [color:red; /* IE六、IE7 識別 */ color:red\9; /* IE六、IE七、IE八、IE9 識別 */ color:red\0; /* IE八、IE9 識別*/ color:red\9\0; /* 僅IE9識別 */ color:red \0; /* 僅IE9識別 */ color:red!important; /* IE6 不識別!important 有危險*/ /* CSS選擇符級Hack */ *html #demo { color:red;} /* 僅IE6 識別 */ *+html #demo { color:red;} /* 僅IE7 識別 */ body:nth-of-type(1) #demo { color:red;} /* IE9+、FF3.5+、Chrome、Safari、Opera 能夠識別 */ head:first-child+body #demo { color:red; } /* IE7+、FF、Chrome、Safari、Opera 能夠識別 */ :root #demo { color:red\9; } : /* 僅IE9識別 */
越少的浮動,就會越少的代碼,會有更靈活的頁面,會有擴展性更強的頁面。這很少說,歸結爲到必定水平了,浮動會用的較少。另外,您也會避免使用浮動+margin的用法。因此,越後來越不易遇到這種bug。
技巧二:padding,marign,height,width
注意是技巧,不是方法: 寫好標準頭 http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd」> http://www.w3.org/1999/xhtml」> 儘可能用padding,慎用margin,height儘可能補上100%,父級height有定值子級height不用100%,子級全爲浮動時底部補個空clear:both的div寬儘可能用margin,慎用padding,width算準實際要的減去padding
技巧三:顯示類(display:block,inline)
display:block,inline兩個元素 display:block; //能夠爲內嵌元素模擬爲塊元素 display:inline; //實現同一行排列的的效果 display:table; //for FF,模擬table的效果
display:block塊元素,元素的特色是: 老是在新行上開始;高度,行高以及頂和底邊距均可控制;寬度缺省是它的容器的100%,除非設定一個寬度
display:inline就是將元素顯示爲行內元素,元素的特色是:和其餘元素都在一行上;高,行高及頂和底邊距不可改變;寬度就是它的文字或圖片的寬度,不可改變。span,a,label,input,img,strong和em是 inline 元素的例子
技巧四:怎樣使一個div層居中於瀏覽器中?
1)
<style type="text/css"> <!-- div { position:absolute; top:50%; left:50%; margin:-100px 0 0 -100px; width:200px; height:200px; border:1px solid red; } --> </style>
2)div裏的內容,IE默認爲居中,而FF默認爲左對齊,能夠嘗試增長代碼margin: 0 auto;
技巧五:float的div閉合;清除浮動;自適應高度
① 例如:<div id="floatA"><div id="floatB"><div id="NOTfloatC">
<divclass="floatB"><div class="NOTfloatC">
之間加上<div class="clear">
這個div必定要注意位置,並且必須與兩個具備float屬性的div同級,之間不能存在嵌套關係,不然會產生異常。而且將clear這種樣式定義爲爲以下便可:.clear{clear:both;}②做爲外部 wrapper 的 div 不要定死高度,爲了讓高度能自適應,要在wrapper裏面加上overflow:hidden; 當包含float的box的時候,高度自適應在IE下無效,這時候應該觸發IE的layout私有屬性(萬惡的IE啊!)用zoom:1;能夠作到,這樣就達到了兼容。
例如某一個wrapper以下定義:
.colwrapper{overflow:hidden; zoom:1; margin:5px auto;}
③對於排版,咱們用得最多的css描述可能就是float:left.有的時候咱們須要在n欄的float div後面作一個統一的背景,譬如:
<div id=」page」> <div id=」left」></div> <div id=」center」></div> <div id=」right」></div> </div>
好比咱們要將page的背景設置成藍色,以達到全部三欄的背景顏色是藍色的目的,可是咱們會發現隨着left centerright的向下拉長,而page竟然保存高度不變,問題來了,緣由在於page不是float屬性,而咱們的page因爲要居中,不能設置成float,因此咱們應該這樣解決:
<div id=」page」> <div id=」bg」 style=」float:left;width:100%」> <div id=」left」></div> <div id=」center」></div> <div id=」right」></div> </div> </div>
再嵌入一個float left而寬度是100%的DIV解決之。
④萬能float 閉合(很是重要!)
關於 clear float 的原理可參見 [How To ClearFloats Without Structural Markup],將如下代碼加入Global CSS 中,給須要閉合的div加上class=」clearfix」便可,屢試不爽。
/* Clear Fix */ .clearfix:after { content:"."; display:block; height:0; clear:both;visibility:hidden; } .clearfix { display:inline-block; } /* Hide from IE Mac */ .clearfix {display:block;} /* End hide from IE Mac */ /* end of clearfix */
或者這樣設置:.hackbox{display:table; //將對象做爲塊元素級的表格顯示}
技巧六:div嵌套時 y軸上 padding和 marign的問題