轉 div+css通用兼容性代碼整理

1、Div+css通用兼容性代碼

你能夠在css開頭加入 *html{padding:0px}

javascript

複製代碼
代碼以下:

<style>
*html{padding:0px}
/* 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 */
</style>




CSS+DIV 兼容性問題
瀏覽器兼容代碼:
瀏覽器


符號
IE6 IE7 IE8 FF
* √ √ × ×
!important × √ × √
_ √ × × ×
\9 × × √ ×
*html √ × × ×
*+html × √ × ×
說明:」√」表明能識別;」 ×」表明不識別


一、案例一(經常使用)
若是各個瀏覽器的高度都不相同,代碼以下:

php

複製代碼
代碼以下:

.warp{
Height:100px; /*IE六、IE七、IE八、FF識別*/
Height:110px\9; /*IE8識別*/
*height:120px!important; /*IE7 識別*/
*height:130px; /*IE六、IE7識別,但上一段代碼中!important的級別比*號的級別高,因此此段代碼只有IE6中才有效*/
}


二、案例二
若是各瀏覽器高度只有IE6和IE7中相同,而FF不一樣,代碼以下:

css

複製代碼
代碼以下:

.warp{
Height:100px; /*IE6 、IE七、 IE八、FF識別*/
*height:120px; /*IE六、IE7識別*/
}


三、案例三
對各瀏覽器單獨寫不一樣代碼,以下:

html

複製代碼
代碼以下:

.warp{ height:200px; } /* IE6 、IE七、 IE八、FF識別*/
.warp{ height:300px\9;} /*IE8識別*/
*html .warp{ hegith:210px; } /*IE6識別*/
*+ html .warp{ height:300px;} /*IE7識別*/


四、案例四
若是各瀏覽器高度相同只有IE6的不一樣,代碼以下:

java

複製代碼
代碼以下:

.warp{
Height:100px; /* IE6 、IE七、 IE八、FF識別*/
_Height:120px; /*IE6識別*/
}


關於css部份技巧,div/IE6/IE7/IE8/FF
1.div的垂直居中問題
vertical-align:middle; 將行距增長到和整個DIV同樣高 line-height:200px; 而後插入文字,就垂直居中了。缺點是要控制內容不要換行
2. margin加倍的問題
設置爲float的div在ie下設置的margin會加倍。這是一個ie6都存在的bug。解決方案是在這個div裏面加上display:inline;
3.浮動ie產生的雙倍距離
#box{ float:left; width:100px; margin:0 0 0 100px; //這種狀況之下IE會產生200px的距離 display:inline; //使浮動忽略}
這裏細說一下block與inline兩個元素:block元素的特色是,老是在新行上開始,高度,寬度,行高,邊距均可以控制(塊元素);Inline元素的特色是,和其餘元素在同一行上,不可控制(內嵌元素);
#box{ display:block; //能夠爲內嵌元素模擬爲塊元素 display:inline; //實現同一行排列的效果 diplay:table;
4 IE與寬度和高度的問題
IE不認得min-這個定義,但實際上它把正常的width和height看成有min的狀況來使。這樣問題就大了,若是隻用寬度和高度,正常的瀏覽器裏這兩個值就不會變,若是隻用min-width和min-height的話,IE下面根本等於沒有設置寬度和高度。
好比要設置背景圖片,這個寬度是比較重要的。要解決這個問題,能夠這樣:
#box{ width: 80px; height: 35px;}html>body #box{ width: auto; height: auto; min-width: 80px; min-height: 35px;}
4 IE與寬度和高度的問題
IE不認得min-這個定義,但實際上它把正常的width和height看成有min的狀況來使。這樣問題就大了,若是隻用寬度和高度,正常的瀏覽器裏這兩個值就不會變,若是隻用min-width和min-height的話,IE下面根本等於沒有設置寬度和高度。
好比要設置背景圖片,這個寬度是比較重要的。要解決這個問題,能夠這樣:
#box{ width: 80px; height: 35px;}html>body #box{ width: auto; height: auto; min-width: 80px; min-height: 35px;}
5.頁面的最小寬度
min-width是個很是方便的CSS命令,它能夠指定元素最小也不能小於某個寬度,這樣就能保證排版一直正確。但IE不認得這個,而它實際上把 width當作最小寬度來使。爲了讓這一命令在IE上也能用,能夠把一個<div> 放到 <body> 標籤下,而後爲div指定一個類,而後CSS這樣設計:
#container{ min-width: 600px; width:expression(document.body.clientWidth < 600? "600px": "auto" );}
第一個min-width是正常的;但第2行的width使用了Javascript,這隻有IE才認得,這也會讓你的HTML文檔不太正規。它實際上經過Javascript的判斷來實現最小寬度。
6.DIV浮動IE文本產生3象素的bug
左邊對象浮動,右邊採用外補丁的左邊距來定位,右邊對象內的文本會離左邊有3px的間距.

css3

複製代碼
代碼以下:

#box{ float:left; width:800px;}
#left{ float:left; width:50%;}
#right{ width:50%;}
*html #left{ margin-right:-3px; //這句是關鍵}
<div id="box">
<div id="left"></div>
<div id="right"></div>
</div>


7.IE捉迷藏的問題
當div應用複雜的時候每一個欄中又有一些連接,DIV等這個時候容易發生捉迷藏的問題。
有些內容顯示不出來,當鼠標選擇這個區域是發現內容確實在頁面。 解決辦法:對#layout使用line-height屬性 或者給#layout使用固定高和寬。頁面結構儘可能簡單。
8.float的div閉合;清除浮動;自適應高度;
①例如:<#div id=」floatA」 ><#div id=」floatB」 ><#div id=」NOTfloatC」 >這裏的NOTfloatC並不但願繼續平移,而是但願往下排。(其中floatA、floatB的屬性已經設置爲float:left;)
這段代碼在IE中毫無問題,問題出在FF。緣由是NOTfloatC並不是float標籤,必須將float標籤閉合。在 <#div class=」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後面作一個統一的背景,譬如:

git

複製代碼
代碼以下:

<div id=」page」>
<div id=」left」></div>
<div id=」center」></div>
<div id=」right」></div>
</div>


好比咱們要將page的背景設置成藍色,以達到全部三欄的背景顏色是藍色的目的,可是咱們會發現隨着left center right的向下拉長,而page竟然保存高度不變,問題來了,緣由在於page不是float屬性,而咱們的page因爲要居中,不能設置成 float,因此咱們應該這樣解決

web

複製代碼
代碼以下:

<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 Clear Floats 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; //將對象做爲塊元素級的表格顯示}
9.高度不適應
高度不適應是當內層對象的高度發生變化時外層高度不能自動進行調節,特別是當內層對象使用margin 或paddign 時。
例:
#box { }
#box p {margin-top: 20px;margin-bottom: 20px; text-align:center; }
<div id="box">
<p>p對象中的內容</p>
</div>
解決技巧:在P對象上下各加2個空的div對象CSS代碼:.1{height:0px;overflow:hidden;}或者爲DIV加上border屬性。
10 .IE6下爲何圖片下有空隙產生
解決這個BUG的技巧也有不少,能夠是改變html的排版,或者設置img 爲display:block 或者設置vertical-align 屬性爲vertical-align:top   bottom  middle  text-bottom 均可以解決.
11.如何對齊文本與文本輸入框
加上 vertical-align:middle;

express

複製代碼
代碼以下:

<style type="text/css">
<!--
input {
width:200px;
height:30px;
border:1px solid red;
vertical-align:middle;
}
-->
</style>


12.web標準中定義id與class有什麼區別嗎
一.web標準中是不允許重複ID的,好比 div id="aa" 不允許重複2次,而class 定義的是類,理論上能夠無限重複, 這樣須要屢次引用的定義即可以使用他.
二.屬性的優先級問題
ID 的優先級要高於class,看上面的例子
三.方便JS等客戶端腳本,若是在頁面中要對某個對象進行腳本操做,那麼能夠給他定義一個ID,不然只能利用遍歷頁面元素加上指定特定屬性來找到它,這是相對浪費時間資源,遠遠不如一個ID來得簡單.
13. LI中內容超過長度後以省略號顯示的技巧
此技巧適用與IE與OP瀏覽器

瀏覽器

複製代碼
代碼以下:

<style type="text/css">
<!--
li {
width:200px;
white-space:nowrap;
text-overflow:ellipsis;
-o-text-overflow:ellipsis;
overflow: hidden;
}
-->
</style>


14.爲何web標準中IE沒法設置滾動條顏色了
解決辦法是將body換成html

複製代碼
代碼以下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<meta http-equiv="Content-Type"
content="text/html; charset=gb2312" />
<style type="text/css">
<!--
html {
scrollbar-face-color:#f6f6f6;
scrollbar-highlight-color:#fff;
scrollbar-shadow-color:#eeeeee;
scrollbar-3dlight-color:#eeeeee;
scrollbar-arrow-color:#000;
scrollbar-track-color:#fff;
scrollbar-darkshadow-color:#fff;
}
-->
</style>


15.爲何沒法定義1px左右高度的容器
IE6下這個問題是由於默認的行高形成的,解決的技巧也有不少,例如:overflow:hidden   zoom:0.08   line-height:1px
16.怎麼樣才能讓層顯示在FLASH之上呢

解決的辦法是給FLASH設置透明
<param name="wmode" value="transparent" />
17.怎樣使一個層垂直居中於瀏覽器中
這裏咱們使用百分比絕對定位,與外補丁負值的技巧,負值的大小爲其自身寬度高度除以二

複製代碼
代碼以下:

<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>


1. Div居中問題
div設置 margin-left, margin-right 爲 auto 時已經居中,IE 不行,IE須要設定body居中,首先在父級元素定義text-algin: center;這個的意思就是在父級元素內的內容居中。
2.連接(a標籤)的邊框與背景
a連接加邊框和背景色,需設置 display: block, 同時設置 float: left 保證不換行。參照 menubar, 給 a 和 menubar 設置高度是爲了不底邊顯示錯位, 若不設 height, 能夠在 menubar 中插入一個空格。
3.超連接訪問事後hover樣式就不出現的問題
被點擊訪問過的超連接樣式不在具備hover和active了,不少人應該都遇到過這個問題,解決技巧是改變CSS屬性的排列順序: L-V-H-A
Code:

複製代碼
代碼以下:

<style type="text/css">
<!--
a:link {}
a:visited {}
a:hover {}
a:active {}
-->
</style>


4. 遊標手指cursor

cursor: pointer 能夠同時在 IE FF 中顯示遊標手指狀, hand 僅 IE 能夠
5.UL的padding與margin
ul標籤在FF中默認是有padding值的,而在IE中只有margin默認有值,因此先定義 ul{margin:0;padding:0;}就能解決大部分問題
6. FORM標籤
這個標籤在IE中,將會自動margin一些邊距,而在FF中margin則是0,所以,若是想顯示一致,因此最好在css中指定margin和 padding,針對上面兩個問題,個人css中通常首先都使用這樣的樣式ul,form{margin:0;padding:0;}給定義死了,因此後面就不會爲這個頭疼了.
7. BOX模型解釋不一致問題
在FF和IE中的BOX模型解釋不一致致使相差2px解決技巧:div{margin:30px!important;margin:28px;} 注意這兩個margin的順序必定不能寫反, important這個屬性IE不能識別,但別的瀏覽器能夠識別。因此在IE下其實解釋成這樣: div{maring:30px;margin:28px}重複定義的話按照最後一個來執行,因此不能夠只寫margin:xx px!important;
8.屬性選擇器(這個不能算是兼容,是隱藏css的一個bug)
p[id]{}div[id]{}
這個對於IE6.0和IE6.0如下的版本都隱藏,FF和OPera做用.屬性選擇器和子選擇器仍是有區別的,子選擇器的範圍從形式來講縮小了,屬性選擇器的範圍比較大,如p[id]中,全部p標籤中有id的都是一樣式的.
9.最狠的手段 - !important;
若是實在沒有辦法解決一些細節問題,能夠用這個技巧.FF對於」!important」會自動優先解析,然而IE則會忽略.以下
.tabd1{
background:url(/res/images/up/tab1.gif) no-repeat 0px 0px !important; /*Style for FF*/
background:url(/res/images/up/tab1.gif) no-repeat 1px 0px; /* Style for IE */}
值得注意的是,必定要將xxxx !important 這句放置在另外一句之上,上面已經提過
11.爲何FF下文本沒法撐開容器的高度
標準瀏覽器中固定高度值的容器是不會象IE6裏那樣被撐開的,那我又想固定高度,又想能被撐開須要怎樣設置呢?辦法就是去掉height設置min- height:200px; 這裏爲了照顧不認識min-height的IE6 能夠這樣定義:
{
height:auto!important;
height:200px;
min-height:200px;
}
12.FireFox下如何使連續長字段自動換行
衆所周知IE中直接使用 word-wrap:break-word 就能夠了, FF中咱們使用JS插入
的技巧來解決

複製代碼
代碼以下:

<style type="text/css">
<!--
div {
width:300px;
word-wrap:break-word;
border:1px solid red;
}
-->
</style>
<div id="ff">aaaaaaaaaaaaaaaaaaaaaaaaaaaa</div>
<script type="text/javascript">
function toBreakWord(el, intLen){
var obj=document.getElementById(el);
var strContent=obj.innerHTML;
var strTemp="";
while(strContent.length>intLen)
{
strTemp =strContent.substr(0,intLen) " ";
strContent=strContent.substr(intLen,strContent.length);
}
strTemp =" " strContent;
obj.innerHTML=strTemp;
}
if(document.getElementById && !document.all)
toBreakWord("ff", 37);
</script>


13.爲何IE6下容器的寬度和FF解釋不一樣呢

複製代碼
代碼以下:

<?xml version="1.0" encoding="gb2312"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<style type="text/css">
<!--
div {
cursor:pointer;
width:200px;
height:200px;
border:10px solid red
}
-->
</style>
<div ōnclick="alert(this.offsetWidth)">讓FireFox與IE兼容</div>


問題的差異在於容器的總體寬度有沒有將邊框(border)的寬度算在其內,這裏IE6解釋爲200PX ,而FF則解釋爲220PX,那到底是怎麼致使的問題呢?你們把容器頂部的xml去掉就會發現原來問題出在這,頂部的申明觸發了IE的qurks mode,關於qurks mode、standards mode的相關知識,請參考:http://www.microsoft.com/china/msdn/library/webservices /asp.net/
ASPNETusStan.mspx?mfr=true

IE6,IE7,FF

IE7.0出來了,對CSS的支持又有新問題。瀏覽器多了,網Bpx; /*For IE7 & IE6*/
_height:20px; /*For IE6*/
注意順序。
這樣也屬於CSS HACK,不過沒有上面這樣簡潔。
#example { color: #333; } /* Moz */
* html #example { color: #666; } /* IE6 */
* html #example { color: #999; } /* IE7 */

第二種,是使用IE專用的條件註釋

複製代碼
代碼以下:

<!--其餘瀏覽器 -->
<link rel="stylesheet" type="text/css" href="css.css" />
<!--[if IE 7]>
<!-- 適合於IE7 -->
<link rel="stylesheet" type="text/css" href="ie7.css" />
<![endif]-->
<!--[if lte IE 6]>
<!-- 適合於IE6及一下 -->
<link rel="stylesheet" type="text/css" href="ie.css" />
<![endif]-->


第三種,css filter的辦法,如下爲經典從國外網站翻譯過來的。.

新建一個css樣式以下:

複製代碼
代碼以下:

#item {
width: 200px;
height: 200px;
background: red;
}


新建一個div,並使用前面定義的css的樣式:
<div id="item">some text here</div>

在body表現這裏加入lang屬性,中文爲zh:
<body lang="en">

如今對div元素再定義一個樣式:
*:lang(en) #item{
background:green !important;
}

這樣作是爲了用!important覆蓋原來的css樣式,因爲:lang選擇器ie7.0並不支持,因此對這句話不會有任何做用,因而也達到了 ie6.0下一樣的效果,可是很不幸地的是,safari一樣不支持此屬性,因此須要加入如下css樣式:
#item:empty {
background: green !important
}
:empty選擇器爲css3的規範,儘管safari並不支持此規範,可是仍是會選擇此元素,無論是否此元素存在,如今綠色會如今在除ie各版本之外的瀏覽器上。

在網站設計的時候,應該注意css樣式兼容不一樣瀏覽器問題,特別是對徹底使用DIV CSS設計的網,就應該更注意IE6 IE7 FF對CSS樣式的兼容,否則,你的網亂可能出去不想出現的效果!

全部瀏覽器 通用
height: 100px;

IE6 專用
_height: 100px;

IE6 專用
*height: 100px;

IE7 專用
*+height: 100px;

IE七、FF 共用
height: 100px !important;

1、CSS HACK

1, !important

隨着IE7對!important的支持, !important 方法如今只針對IE6的HACK.(注意寫法.記得該聲明位置須要提早.)

複製代碼
代碼以下:

<style>
#wrapper
{
width: 100px!important; /* IE7+FF */
width: 80px; /* IE6 */
}
</style>



2, IE6/IE7對FireFox

複製代碼
代碼以下:

*+html 與 *html 是IE特有的標籤, firefox 暫不支持.而*+html 又爲 IE7特有標籤.
<style>
#wrapper
{
#wrapper { width: 120px; } /* FireFox */
*html #wrapper { width: 80px;} /* ie6 fixed */
*+html #wrapper { width: 60px;} /* ie7 fixed, 注意順序 */
}
</style>


注意:
*+html 對IE7的HACK 必須保證HTML頂部有以下聲明:

<!DOCTYPE HTML PUBLIC 「-//W3C//DTD HTML 4.01 Transitional//EN」 」http://www.w3.org/TR/html4/loose.dtd」>

2、萬能 float 閉合

關於 clear float 的原理可參見 [How To Clear Floats Without Structural Markup]
將如下代碼加入Global CSS 中,給須要閉合的div加上 class=」clearfix」 便可,屢試不爽.


複製代碼
代碼以下:

<style>
/* 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 */
</style>



3、其餘兼容技巧

1, FF下給 div 設置 padding 後會致使 width 和 height 增長, 但IE不會.(可用!important解決) 如width:115px !important;width:120px;padding:5px;

 必須注意的是, !important; 必定要在前面。
2, 居中問題.
1).垂直居中.將 line-height 設置爲當前 div 相同的高度, 再經過 vertical-align: middle.( 注意內容不要換行.)
2).水平居中. margin: 0 auto;(固然不是萬能)
3, 若需給 a 標籤內內容加上 樣式, 須要設置 display: block;(常見於導航標籤)
4, FF 和 IE 對 BOX 理解的差別致使相差 2px 的還有設爲 float的div在ie下 margin加倍等問題.
5, ul 標籤在 FF 下面默認有 list-style 和 padding . 最好事先聲明, 以免沒必要要的麻煩. (常見於導航標籤和內容列表)
6, 做爲外部 wrapper 的 div 不要定死高度, 最好還加上 overflow: hidden.以達到高度自適應.
7, 關於手形光標. cursor: pointer. 而hand 只適用於 IE.

兼容代碼:兼容最推薦的模式。

複製代碼
代碼以下:

/* FF */
.submitbutton {
float:left;
width: 40px;
height: 57px;
margin-top: 24px;
margin-right: 12px;
}
/* IE6 */
*html .submitbutton {
margin-top: 21px;
}
/* IE7 */
*+html .submitbutton {
margin-top: 21px;
}


什麼是瀏覽器兼容:當咱們使用不一樣的瀏覽器(Firefox IE7 IE6)訪問同一個網站,或者頁面的時候,會出現一些不兼容的問題,有的顯示出來正常,有的顯示出來不正常,咱們在編寫CSS的時候會很惱火,剛修復了這個瀏覽器的問題,結果另一個瀏覽器卻出了新問題。而兼容就是一種辦法,能讓你在一個CSS裏面獨立的寫支持不一樣瀏覽器的樣式。這下就和諧了。呵呵!

最近微軟發佈的IE7瀏覽器的兼容性確實給一些網頁製做人員添加了一個沉重的負擔,雖然IE7已經走向標準化,但仍是有許多和FF不一樣的地方,因此須要用到IE7的兼容。
有一點邏輯思想的人都會知道能夠用IE和FF的兼容結合起來使用,下面介紹三個兼容,例如:(適合新手,呵呵,高手就在這裏路過吧。)

程序代碼

第一個兼容,IE FF 全部瀏覽器 公用(其實也不算是兼容)
height:100px;
第二個兼容 IE6專用
_height:100px;
第三個兼容 IE6 IE7公用
*height:100px;

介紹完了這三個兼容了,下面咱們再來看看如何在一個樣式裏分別給一個屬性定義IE6 IE7 FF專用的兼容,看下面的代碼,順序不能錯哦:


複製代碼
代碼以下:

height:100px;
*height:120px;
_height:150px;


下面我簡單解釋一下各瀏覽器怎樣理解這三個屬性:

在FF下,第二、3個屬性FF不認識,因此它讀的是 height:100px;

在IE7下,第三個屬性IE7不認識,因此它讀第一、2個屬性,又由於第二個屬性覆蓋了第一個屬性,因此IE7最終讀出的是第2個屬性 *height:120px;

在IE6下,三個屬性IE6都認識,因此三個屬性均可以讀取,又由於第三個屬性覆蓋掉前2個屬性,因此IE6最終讀取的是第三個屬性。

1 針對firefox ie6 ie7的css樣式
如今大部分都是用!important來hack,對於ie6和firefox測試能夠正常顯示,
可是ie7對!important能夠正確解釋,會致使頁面沒按要求顯示!找到一個針
對IE7不錯的hack方式就是使用「*+html」,如今用IE7瀏覽一下,應該沒有問題了。
如今寫一個CSS能夠這樣:


複製代碼
代碼以下:

#1 { color: #333; } /* Moz */
* html #1 { color: #666; } /* IE6 */
*+html #1 { color: #999; } /* IE7 */

那麼在firefox下字體顏色顯示爲#333,IE6下字體顏色顯示爲#666,IE7下字體顏色顯示爲#999。 2 css佈局中的居中問題 主要的樣式定義以下: body {TEXT-ALIGN: center;} #center { MARGIN-RIGHT: auto; MARGIN-LEFT: auto; } 說明: 首先在父級元素定義TEXT-ALIGN: center;這個的意思就是在父級元素內的內容居中;對於IE這樣設定就已經能夠了。 但在mozilla中不能居中。解決辦法就是在子元素定義時候設定時再加上「MARGIN-RIGHT: auto;MARGIN-LEFT: auto; 」 須要說明的是,若是你想用這個方法使整個頁面要居中,建議不要套在一個DIV裏,你能夠依次拆出多個div, 只要在每一個拆出的div裏定義MARGIN-RIGHT: auto;MARGIN-LEFT: auto; 就能夠了。 3 盒模型不一樣解釋 #box{ width:600px; //for ie6.0- w\idth:500px; //for ff+ie6.0} #box{ width:600px!important //for ff width:600px; //for ff+ie6.0 width /**/:500px; //for ie6.0-} 4 浮動ie產生的雙倍距離 #box{ float:left; width:100px; margin:0 0 0 100px; //這種狀況之下IE會產生200px的距離 display:inline; //使浮動忽略} 這裏細說一下block,inline兩個元素,Block元素的特色是:老是在新行上開始,高度,寬度,行高,邊距均可以控制(塊元素);Inline元素的特色是:和其餘元素在同一行上,…不可控制(內嵌元素); #box{ display:block; //能夠爲內嵌元素模擬爲塊元素 display:inline; //實現同一行排列的的效果 diplay:table; IE不認得min-這個定義,但實際上它把正常的width和height看成有min的狀況來使。這樣問題就大了,若是隻用寬度和高度, 正常的瀏覽器裏這兩個值就不會變,若是隻用min-width和min-height的話,IE下面根本等於沒有設置寬度和高度。 好比要設置背景圖片,這個寬度是比較重要的。要解決這個問題,能夠這樣: #box{ width: 80px; height: 35px;}html>body #box{ width: auto; height: auto; min-width: 80px; min-height: 35px;} 6 頁面的最小寬度 min-width是個很是方便的CSS命令,它能夠指定元素最小也不能小於某個寬度,這樣就能保證排版一直正確。但IE不認得這個, 而它實際上把width當作最小寬度來使。爲了讓這一命令在IE上也能用,能夠把一個<div> 放到 <body> 標籤下,而後爲div指定一個類: 而後CSS這樣設計: #container{ min-width: 600px; width:expression(document.body.clientWidth < 600? 「600px」: 「auto」 );} 第一個min-width是正常的;但第2行的width使用了Javascript,這隻有IE才認得,這也會讓你的HTML文檔不太正規。它實際上經過Javascript的判斷來實現最小寬度。 7 清除浮動 .hackbox{ display:table; //將對象做爲塊元素級的表格顯示}或者.hackbox{ clear:both;} 或者加入:after(僞對象),設置在對象後發生的內容,一般和content配合使用,IE不支持此僞對象,非Ie 瀏覽器支持, 所 以並不影響到IE/WIN瀏覽器。這種的最麻煩的……#box:after{ content: 「.」; display: block; height: 0; clear: both; visibility: hidden;} 8 DIV浮動IE文本產生3象素的bug 左邊對象浮動,右邊採用外補丁的左邊距來定位,右邊對象內的文本會離左邊有3px的間距. #box{ float:left; width:800px;}#left{ float:left; width:50%;}#right{ width:50%;}*html #left{ margin-right:-3px; //這句是關鍵} HTML代碼<div id=」box」> <div id=」left」></div> <div id=」right」></div></div> 9 屬性選擇器(這個不能算是兼容,是隱藏css的一個bug) p[id]{}div[id]{} 這個對於IE6.0和IE6.0如下的版本都隱藏,FF和OPera做用 屬性選擇器和子選擇器仍是有區別的,子選擇器的範圍從形式來講縮小了,屬性選擇器的範圍比較大,如p[id]中,全部p標籤中有id的都是一樣式的. 10 IE捉迷藏的問題 當div應用複雜的時候每一個欄中又有一些連接,DIV等這個時候容易發生捉迷藏的問題。 有些內容顯示不出來,當鼠標選擇這個區域是發現內容確實在頁面。 解決辦法:對#layout使用line-height屬性或者給#layout使用固定高和寬。頁面結構儘可能簡單。 11 高度不適應 高度不適應是當內層對象的高度發生變化時外層高度不能自動進行調節,特別是當內層對象使用 margin 或paddign 時。例: <div id=」box」> <p>p對象中的內容</p> </div> CSS: #box { } #box p {margin-top: 20px;margin-bottom: 20px; text-align:center; } 解決方法:在P對象上下各加2個空的div對象CSS代碼:.1{height:0px;overflow:hidden;}或者爲DIV加上border屬性。 屏蔽IE瀏覽器(也就是IE下不顯示) *:lang(zh) select {font:12px !important;} /*FF,OP可見*/ select:empty {font:12px !important;} /*safari可見*/ 這裏select是選擇符,根據狀況更換。第二句是MAC上safari瀏覽器獨有的。 僅IE7識別 *+html {…} 當面臨須要只針對IE7作樣式的時候就能夠採用這個兼容。 IE6及IE6如下識別 * html {…} 這個地方要特別注意不少地主都寫了是IE6的兼容其實IE5.x一樣能夠識別這個兼容。其它瀏覽器不識別。 html/**/ >body select {……} 這句與上一句的做用相同。 僅IE6不識別 select { display /*IE6不識別*/:none;} 這裏主要是經過CSS註釋分開一個屬性與值,流釋在冒號前。 僅IE6與IE5不識別 select/**/ { display /*IE6,IE5不識別*/:none;} 這裏與上面一句不一樣的是在選擇符與花括號之間多了一個CSS註釋。 僅IE5不識別 select/*IE5不識別*/ { display:none;} 這一句是在上一句中去掉了屬性區的註釋。只有IE5不識別 盒模型解決方法 selct {width:IE5.x寬度; voice-family :""}""; voice-family:inherit; width:正確寬度;} 盒模型的清除方法不是經過!important來處理的。這點要明確。 清除浮動 select:after {content:"."; display:block; height:0; clear:both; visibility:hidden;} 在Firefox中,當子級都爲浮動時,那麼父級的高度就沒法徹底的包住整個子級,那麼這時用這個清除浮動的兼容來對父級作一次定義,那麼就能夠解決這個問題。 截字省略號 select { -o-text-overflow:ellipsis; text-overflow:ellipsis; white-space:nowrapoverflow:hidden; } 這個是在越出長度後會自行的截掉多出部分的文字,並以省略號結尾,很好的一個技術。只是目前Firefox並不支持。 只有Opera識別 @media all and (min-width: 0px){ select {……} } 針對Opera瀏覽器作單獨的設定。 以上都是寫CSS中的一些兼容,建議遵循正確的標籤嵌套(div ul li 嵌套結構關係),這樣能夠減小你使用兼容的頻率,不要進入理解誤區,並非一個頁面就須要不少的兼容來保持多瀏覽器兼容),不少狀況下也許一個兼容都不用也可讓瀏覽器工做得很是好,這些都是用來解決局部的兼容性問題,若是但願把兼容性的內容也分離出來,不妨試一下下面的幾種過濾器。這些過濾器有的是寫在CSS中經過過濾器導入特別的樣式,也有的是寫在HTML中的經過條件來連接或是導入須要的補丁樣式。 IE5.x的過濾器,只有IE5.x可見 @media tty { i{content:"";/*" "*/}} @import ’ie5win.css’; /*";} }/* */ IE5/MAC的過濾器,通常用不着 /**//*/ @import "ie5mac.css"; /**/ 下面是IE的條件註釋,我的以爲用條件註釋調用相應 兼容是比較完美的多瀏覽器兼容的解決辦法。把須要兼容的地方單獨放到一個文件裏面,當瀏覽器版本符合的時候就能夠調用那個被兼容的樣式,這樣不只使用起來很是方便,並且對於製做這個CSS自己來說,能夠更嚴格的觀察到是否有必要使用兼容,不少狀況下,當我本人寫CSS若是把所有代碼包括兼容都寫到一個CSS文件的時候的時候會很隨意,想怎麼兼容就怎麼兼容,而你獨立出來寫的時候,你就會不自覺的考慮是否有必要兼容,是先兼容 CSS?仍是先把主CSS裏面的東西調整到儘量的不須要兼容?當你僅用不多的兼容就讓不少瀏覽器很乖很聽話的時候,你是否是頗有成就感呢?你知道怎麼選擇了吧~~呵呵 IE的if條件兼容 本身能夠靈活使用參看這篇IE條件註釋 Only IE 全部的IE可識別 只有IE5.0能夠識別 Only IE 5.0+ IE5.0包換IE5.5均可以識別 僅IE6可識別 Only IE 7/- IE6以及IE6如下的IE5.x均可識別 Only IE 7/- 僅IE7可識別 Css 當中有許多的東西不按照某些規律來的話,會讓你很心煩,雖然你能夠經過不少的兼容,不少的!important 來控制它,可是你會發現久而久之你會很不甘心,看看許多優秀的網站,他們的CSS讓IE6,Ie7,Firefox,甚至Safari,Opera運行起來天衣無縫是否是很羨慕?而他們看似複雜的模版下面使用的兼容少得可憐。其實你要知道IE 和 Firefox 並不不是那麼的不和諧,咱們找到必定的方法,是徹底可讓他們和諧共處的。不要你認爲發現了兼容的辦法,你就掌握了一切,咱們並非兼容的奴隸。 div ul li 的嵌套順序 今天只講一個規則。就是<div><ul><li>的三角關係。個人經驗就是<div>在最外面,裏面是<ul>,而後再是<li>,固然<li>裏面又能夠嵌套<div>什麼的,可是並不建議你嵌套不少東西。當你符合這樣的規則的時候,那些倒黴的,不聽話的間隙就不會在裏面出現了,當你僅僅是<div>裏面放<li>,而不用<ul>的時候,你會發現你的間隙十分難控制,通常狀況下,IE6和IE7會憑空多一些間距。但不少狀況你來到下一行,間隙就沒了,可是前面的內容又空了很大一塊,出現這種狀況雖然你能夠改變IE的Margin,而後調整Firefox下面的Padding,以便使得二者顯示起來得效果很類似,可是你得CSS將變得臭長無比,你不得很少考慮更多可能出現這種問題補救措施,雖然你知道千篇一概來兼容它們,可是你會煩得要命。 具體嵌套寫法 遵循上面得嵌套方式,<div><ul><li></li></ul></div> 而後在CSS 裏面告訴 ul {Margin:0px;Padding:0px;list-style:none;},其中list-style:none是不讓<li>標記的最前方顯示圓點或者數字等目錄類型的標記,由於IE和Firefox顯示出來默認效果有些不同。所以這樣不須要作任何手腳,你的IE六、和IE七、Firefox顯示出來的東西(外距,間距,高度,寬度)就幾乎沒什麼區別了,也許細心的你會在某一個時刻發現:兩個象素的差異,但那已經很完美了,不須要你經過調整大片的CSS來控制它們的顯示了,你願意,你能夠僅僅兼容一兩個地方,並且一般這種兼容能夠適應各類地方,不須要你重複在不一樣的地方調試不一樣的兼容方式–減輕你的煩。你能夠ul.class1, ul.class2, ul.class3 {xxx:xxxx}的方式方便的整理出你要兼容的地方,而統一兼容。嘗試一下吧,不再要亂嵌套了,雖然在Div+CSS的方式下你幾乎能夠想怎麼嵌套就怎麼嵌套,可是按照上面的規律你將輕鬆不少,從而事半功倍! 6、CSS兼容要點分析IE vs FF CSS 兼容要點: DOCTYPE 影響 CSS 處理 FF: div 設置 margin-left, margin-right 爲 auto 時已經居中, IE 不行 FF: body 設置 text-align 時, div 須要設置 margin: auto(主要是 margin-left,margin-right) 方可居中 FF: 設置 padding 後, div 會增長 height 和 width, 但 IE 不會, 故須要用 !important 多設一個 height 和 width FF: 支持 !important, IE 則忽略, 可用 !important 爲 FF 特別設置樣式 div 的垂直居中問題: vertical-align:middle; 將行距增長到和整個DIV同樣高 line-height:200px; 而後插入文字,就垂直居中了。缺點是要控制內容不要換行 cursor: pointer 能夠同時在 IE FF 中顯示遊標手指狀, hand 僅 IE 能夠 FF: 連接加邊框和背景色,需設置 display: block, 同時設置 float: left 保證不換行。參照 menubar, 給 a 和 menubar 設置高度是爲了不底邊顯示錯位, 若不設 height, 能夠在 menubar 中插入一個空格XHTML+CSS兼容性解決方案小集 使用XHTML+CSS構架好處很多,但也確實存在一些問題,不管是由於使用不熟練仍是思路不清晰,我就先把一些我遇到的問題寫在下面,省的你們四處找^^ 一、在mozilla firefox和IE中的BOX模型解釋不一致致使相差2px解決方法: div{margin:30px!important;margin:28px;} 注意這兩個margin的順序必定不能寫反,據阿捷的說法!important這個屬性IE不能識別,但別的瀏覽器能夠識別。因此在IE下其實解釋成這樣: div{maring:30px;margin:28px} 重複定義的話按照最後一個來執行,因此不能夠只寫margin:XXpx!important; 二、IE5 和IE6的BOX解釋不一致IE5下div{width:300px;margin:0 10px 0 10px;}div的寬度會被解釋爲300px-10px(右填充)-10px(左填充)最終div的寬度爲280px,而在IE6和其餘瀏覽器上寬度則是以300px+10px(右填充)+10px(左填充)=320px來計算的。這時咱們能夠作以下修改 div{width:300px!important;width /**/:340px;margin:0 10px 0 10px} ,關於這個/**/是什麼我也不太明白,只知道IE5和firefox都支持但IE6不支持,若是有人理解的話,請告訴我一聲,謝了!:) 三、ul標籤在Mozilla中默認是有padding值的,而在IE中只有margin有值因此先定義 ul{margin:0;padding:0;} 就能解決大部分問題。 四、關於腳本,在xhtml1.1中不支持language屬性,只須要把代碼改成 < type=」text/java」> 就能夠了 7、10個你未必知道的CSS技巧 一、CSS字體屬性簡寫規則 通常用CSS設定字體屬性是這樣作的: 如下爲引用的內容:font-weight:bold;font-style:italic;font-varient:small-caps; font-size:1em; line-height:1.5em; font-family:verdana,sans-serif; 但也能夠把它們所有寫到一行上去: font: bold italic small-caps 1em/1.5em verdana,sans-serif; 真不錯!只有一點要提醒的:這種簡寫方法只有在同時指定font-size和font-family屬性時才起做用。並且,若是你沒有設定font-weight, font-style, 以及 font-varient ,他們會使用缺省值,這點要記上。 二、同時使用兩個類 通常只能給一個元素設定一個類(Class),但這並不意味着不能用兩個。事實上,你能夠這樣: <p class=」text side」>…</p> 同時給P元素兩個類,中間用空格格開,這樣全部text和side兩個類的屬性都會加到P元素上來。若是它們兩個類中的屬性有衝突的話,後設置的起做用,即在CSS文件中放在後面的類的屬性起做用。 補充:對於一個ID,不能這樣寫<p id=」text side」>…</p>也不能這樣寫 三、CSS border的缺省值 一般能夠設定邊界的顏色,寬度和風格,如: border: 3px solid #000 這位把邊界顯示成3像素寬,黑色,實線。但實際上這裏只須要指定風格便可。 若是隻指定了風格,其餘屬性就會使用缺省值。通常地,Border的寬度缺省是medium,通常等於3到4個像素;缺省的顏色是其中文字的顏色。若是這個值正好合適的話,就不用設那麼多了。 四、CSS用於文檔打印 許多網站上都有一個針對打印的版本,但實際上這並不須要,由於能夠用CSS來設定打印風格。 也就是說,能夠爲頁面指定兩個CSS文件,一個用於屏幕顯示,一個用於打印: <link type=」text/css」 rel=」stylesheet」 href=」/blog/stylesheet.css」 media=」screen」 /> <link type=」text/css」 rel=」stylesheet」 href=」printstyle.css」 media=」print」 /> 第1行就是顯示,第2行是打印,注意其中的media屬性。 但應該在打印CSS中寫什麼東西呢?你能夠按設計普通CSS的方法來設定它。設計的同時就能夠把這個CSS設成顯示CSS來檢查它的效果。也許你會使用 display: none 這個命令來關掉一些裝飾圖片,再關掉一些導航按鈕。要想了解更多,能夠看「打印差別」這一篇。 五、圖片替換技巧 通常都建議用標準的HTML來顯示文字,而不要使用圖片,這樣不但快,也更具可讀性。但若是你想用一些特殊字體時,就只能用圖片了。 好比你想整個賣東西的圖標,你就用了這個圖片: <h1><img src=」/blog/widget-image.gif」 alt=」Buy widgets」 /></h1> 這固然能夠,但對搜索引擎來講,和正常文字相比,它們對alt裏面的替換文字幾乎沒有興趣這是由於許多設計者在這裏放許多關鍵詞來騙搜索引擎。因此方法應該是這樣的: <h1>Buy widgets</h1> 但這樣就沒有特殊字體了。要想達到一樣效果,能夠這樣設計CSS: h1 { background: url(/blog/widget-image.gif) no-repeat; height: image height text-indent: -2000px } 注意把image height換成真的圖片的高度。這裏,圖片會看成背景顯示出來,而真正的文字因爲設定了-2000像素這個縮進,它們會出如今屏幕左邊2000點的地方,就看不見了。但這對於關閉圖片的人來講,可能所有看不到了,這點要注意。 六、CSS box模型的另外一種調整技巧 這個Box模型的調整主要是針對IE6以前的IE瀏覽器的,它們把邊界寬度和空白都算在元素寬度上。好比: #box { width: 100px; border: 5px; padding: 20px } 這樣調用它: <div id=」box」>…</div> 這時盒子的全寬應該是150點,這在除IE6以前的IE瀏覽器以外的全部瀏覽器上都是正確的。但在IE5這樣的瀏覽器上,它的全寬還是100點。能夠用之前人發明的Box調整方法來處理這種差別。 但用CSS也能夠達到一樣的目的,讓它們顯示效果一致。 #box { width: 150px } #box div { border: 5px; padding: 20px } 這樣調用: <div id=」box」><div>…</div></div> 這樣,無論什麼瀏覽器,寬度都是150點了。 七、塊元素居中對齊 若是想作個固定寬度的網頁而且想讓網頁水平居中的話,一般是這樣: #content { width: 700px; margin: 0 auto } 你會使用 <div id=」content」> 來圍上全部元素。這很簡單,但不夠好,IE6以前版本會顯示不出這種效果。改CSS以下: body { text-align: center } #content { text-align: left; width: 700px; margin: 0 auto } 這會把網頁內容都居中,因此在Content中又加入了 text-align: left 。 八、用CSS來處理垂直對齊 垂直對齊用表格能夠很方便地實現,設定表格單元 vertical-align: middle 就能夠了。但對CSS來講這沒用。若是你想設定一個導航條是2em高,而想讓導航文字垂直居中的話,設定這個屬性是沒用的。 CSS方法是什麼呢?對了,把這些文字的行高設爲 2em:line-height: 2em ,這就能夠了。 九、CSS在容器內定位 CSS的一個好處是能夠把一個元素任意定位,在一個容器內也能夠。好比對這個容器: #container { position: relative } 這樣容器內全部的元素都會相對定位,能夠這樣用: <div id=」container」><div id=」navigation」>…</div></div> 若是想定位到距左30點,距上5點,能夠這樣: #navigation { position: absolute; left: 30px; top: 5px } 固然,你還能夠這樣: margin: 5px 0 0 30px 注意4個數字的順序是:上、右、下、左。固然,有時候定位的方法而不是邊距的方法更好些。 十、直通到屏幕底部的背景色 在垂直方向是進行控制是CSS所不能的。若是你想讓導航欄和內容欄同樣直通到頁面底部,用表格是很方便的,但若是隻用這樣的CSS: #navigation { background: blue; width: 150px } 較短的導航條是不會直通到底部的,半路內容結束時它就結束了。該怎麼辦呢? 不幸的是,只能採用欺騙的手段了,給這較短的一欄加上個背景圖,寬度和欄寬同樣,並讓它的顏色和設定的背景色同樣。 body { background: url(/blog/blue-image.gif) 0 0 repeat-y } 此時不能用em作單位,由於那樣的話,一旦讀者改變了字體大小,這個花招就會露餡,只能使用px。 接觸DIV+CSS架構已經快兩年了,我的以爲css入門不難,但要學精並不是一朝一夕的,如今大部分網絡公司都比較主張用div+css來佈局,這就面臨着一個比較難的問題——瀏覽器的兼容性。 下面整理了一下相關的兼容問題,但願你們再在其基礎上補充! 全部瀏覽器 通用 (市面上主要用到的IE6 IE7 FF) height: 100px; IE6 專用 _height: 100px; IE6 專用 *height: 100px; IE7 專用 *+height: 100px; IE七、FF 共用 height: 100px !important; 1、CSS 兼容 如下兩種方法幾乎能解決現今全部兼容. 1, !important (不是很推薦,用下面的一種感受最安全) 隨着IE7對!important的支持, !important 方法如今只針對IE6的兼容.(注意寫法.記得該聲明位置須要提早.) 代碼: <style> #wrapper { width: 100px!important; /* IE7+FF */ width: 80px; /* IE6 */ } </style> 2, IE6/IE77對FireFox <from 針對firefox ie6 ie7的css樣式> *+html 與 *html 是IE特有的標籤, firefox 暫不支持.而*+html 又爲 IE7特有標籤. 代碼: <style> #wrapper { width: 120px; } /* FireFox */ *html #wrapper { width: 80px;} /* ie6 fixed */ *+html #wrapper { width: 60px;} /* ie7 fixed, 注意順序 */ </style> 注意: *+html 對IE7的兼容 必須保證HTML頂部有以下聲明: 代碼: <!DOCTYPE HTML PUBLIC 「-//W3C//DTD HTML 4.01 Transitional//EN」 」http://www.w3.org/TR/html4/loose.dtd「> 2、萬能 float 閉合(很是重要!) 能夠用這個解決多個div對齊時的間距不對, 關於 clear float 的原理可參見 [How To Clear Floats Without Structural Markup] 將如下代碼加入Global CSS 中,給須要閉合的div加上 class=」clearfix」 便可,屢試不爽. 代碼: <style> /* 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 */ </style> 3、其餘兼容技巧(至關有用) 1, FF下給 div 設置 padding 後會致使 width 和 height 增長, 但IE不會.(可用!important解決) 2, 居中問題. 1).垂直居中.將 line-height 設置爲當前 div 相同的高度, 再經過 vetical-align: middle.( 注意內容不要換行.) 2).水平居中. margin: 0 auto;(固然不是萬能) 3, 若需給 a 標籤內內容加上 樣式, 須要設置 display: block;(常見於導航標籤) 4, FF 和 IE 對 BOX 理解的差別致使相差 2px 的還有設爲 float的div在ie下 margin加倍等問題. 5, ul 標籤在 FF 下面默認有 list-style 和 padding . 最好事先聲明, 以免沒必要要的麻煩. (常見於導航標籤和內容列表) 6, 做爲外部 wrapper 的 div 不要定死高度, 最好還加上 overflow: hidden.以達到高度自適應. 7, 關於手形光標. cursor: pointer. 而hand 只適用於 IE.貼上代碼: 八、IE6 的雙倍邊距 BUG <style type=」text/css」> body {margin:0} div { float:left; margin-left:10px; ; height:200px; border:1px solid red } </style> 浮動後原本外邊距10px, 但IE 解釋爲20px, 解決辦法是加上 display:inline 九、爲何FF 下文本沒法撐開容器的高度?   標準瀏覽器中固定高度值的容器是不會象IE6 裏那樣被撐開的, 那我又想固定高度,又想能被撐開須要怎樣設置呢?辦法就是去掉height 設 置min-height:200px; 這裏爲了照顧不認識min-height 的IE6 能夠這樣定義: div { height:auto!important; height:200px; min-height:200px; } 兼容代碼:兼容最推薦的模式。 /* FF */ .submitbutton { float:left; width: 40px; height: 57px; margin-top: 24px; margin-right: 12px; } /* IE6 */ *html .submitbutton { margin-top: 21px; } /* IE7 */ *+html .submitbutton { margin-top: 21px; } 什麼是瀏覽器兼容:當咱們使用不一樣的瀏覽器(Firefox IE7 IE6)訪問同一個網站,或者頁面的時候,會出現一些不兼容的問題,有的顯示出來正常,有的顯示出來不正常,咱們在編寫CSS的時候會很惱火,剛修復了這個瀏覽器的問題,結果另一個瀏覽器卻出了新問題。而兼容就是一種辦法,能讓你在一個CSS裏面獨立的寫支持不一樣瀏覽器的樣式。這下就和諧了。呵呵! 程序代碼 第一個兼容,IE FF 全部瀏覽器 公用(其實也不算是兼容) height:100px; 第二個兼容 IE6專用 _height:100px; 第三個兼容 IE6 IE7公用 *height:100px; height:100px; *height:120px; _height:150px; 在FF下,第二、3個屬性FF不認識,因此它讀的是 height:100px; 在IE7下,第三個屬性IE7不認識,因此它讀第一、2個屬性,又由於第二個屬性覆蓋了第一個屬性,因此IE7最終讀出的是第2個屬性 *height:120px; 在IE6下,三個屬性IE6都認識,因此三個屬性均可以讀取,又由於第三個屬性覆蓋掉前2個屬性,因此IE6最終讀取的是第三個屬性。 1 針對firefox ie6 ie7的css樣式 如今大部分都是用!important來兼容,對於ie6和firefox測試能夠正常顯示,可是ie7對!important能夠正確解釋,會致使頁面沒按要求顯示!找到一個針對IE7不錯的兼容方式就是使用「*+html」,如今用IE7瀏覽一下,應該沒有問題了如今寫一個CSS能夠這樣: #1 { color: #333; } /* Moz */ * html #1 { color: #666; } /* IE6 */ *+html #1 { color: #999; } /* IE*/ 那麼在firefox下字體顏色顯示爲#333,IE6下字體顏色顯示爲#666,IE7下字體顏色顯示爲#999。 2 css佈局中的居中問題 主要的樣式定義以下: body {TEXT-ALIGN: center;} #center { MARGIN-RIGHT: auto; MARGIN-LEFT: auto; } 說明: 首先在父級元素定義TEXT-ALIGN: center;這個的意思就是在父級元素內的內容居中;對於IE這樣設定就已經能夠了。 但在mozilla中不能居中。解決辦法就是在子元素定義時候設定時再加上「MARGIN-RIGHT: auto;MARGIN-LEFT: auto; 」 須要說明的是,若是你想用這個方法使整個頁面要居中,建議不要套在一個DIV裏,你能夠依次拆出多個div,只要在每一個拆出的div裏定義MARGIN-RIGHT: auto;MARGIN-LEFT: auto; 就能夠了。 3 盒模型不一樣解釋. #box{ width:600px; //for ie6.0- width:500px; //for ff+ie6.0 } #box{ width:600px!important //for ff width:600px; //for ff+ie6.0 width /**/:500px; //for ie6.0- } 4 浮動ie產生的雙倍距離 #box{ float:left; width:100px; margin:0 0 0 100px; //這種狀況之下IE會產生200px的距離 display:inline; //使浮動忽略} 這裏細說一下block,inline兩個元素,Block元素的特色是:老是在新行上開始,高度,寬度,行高,邊距均可以控制(塊元素);Inline元素的特色是:和其餘元素在同一行上,…不可控制(內嵌元素); #box{ display:block; //能夠爲內嵌元素模擬爲塊元素 display:inline; //實現同一行排列的的效果 diplay:table; 5 IE與寬度和高度的問題 IE 不認得min-這個定義,但實際上它把正常的width和height看成有min的狀況來使。這樣問題就大了,若是隻用寬度和高度,正常的瀏覽器裏這兩個值就不會變,若是隻用min-width和min-height的話,IE下面根本等於沒有設置寬度和高度。好比要設置背景圖片,這個寬度是比較重要的。要解決這個問題,能夠這樣: #box{ width: 80px; height: 35px;}html&gt;body #box{ width: auto; height: auto; min-width: 80px; min-height: 35px;} 6 頁面的最小寬度 min- width是個很是方便的CSS命令,它能夠指定元素最小也不能小於某個寬度,這樣就能保證排版一直正確。但IE不認得這個,而它實際上把 width當作最小寬度來使。爲了讓這一命令在IE上也能用,能夠把一個<div> 放到 <body> 標籤下,而後爲div指定一個類: 而後CSS這樣設計: #container{ min-width: 600px; width:e-xpression(document.body.clientWidth < 600? 「600px」: 「auto」 ); } 第一個min-width是正常的;但第2行的width使用了Javascript,這隻有IE才認得,這也會讓你的HTML文檔不太正規。它實際上經過Javascript的判斷來實現最小寬度。 7 清除浮動 .兼容box{ display:table; //將對象做爲塊元素級的表格顯示 } 或者 .兼容box{ clear:both; } 或者加入:after(僞對象),設置在對象後發生的內容,一般和content配合使用,IE不支持此僞對象,非Ie 瀏覽器支持,因此並不影響到IE/WIN瀏覽器。這種的最麻煩的 ……#box:after{ content: 「.」; display: block; height: 0; clear: both; visibility: hidden; } 8 DIV浮動IE文本產生3象素的bug 左邊對象浮動,右邊採用外補丁的左邊距來定位,右邊對象內的文本會離左邊有3px的間距. #box{ float:left; width:800px;} #left{ float:left; width:50%;} #right{ width:50%; } *html #left{ margin-right:-3px; //這句是關鍵 } HTML代碼 &lt;DIV id=box> <DIV id=left></DIV> <DIV id=right></DIV> </DIV> 9 屬性選擇器(這個不能算是兼容,是隱藏css的一個bug) p[id]{}div[id]{} p[id]{}div[id]{} 這個對於IE6.0和IE6.0如下的版本都隱藏,FF和OPera做用 屬性選擇器和子選擇器仍是有區別的,子選擇器的範圍從形式來講縮小了,屬性選擇器的範圍比較大,如p[id]中,全部p標籤中有id的都是一樣式的. 10 IE捉迷藏的問題 當div應用複雜的時候每一個欄中又有一些連接,DIV等這個時候容易發生捉迷藏的問題。 有些內容顯示不出來,當鼠標選擇這個區域是發現內容確實在頁面。 解決辦法:對#layout使用line-height屬性或者給#layout使用固定高和寬。頁面結構儘可能簡單。 11 高度不適應 高度不適應是當內層對象的高度發生變化時外層高度不能自動進行調節,特別是當內層對象使用 margin 或paddign 時。例: <div id=」box」> <p>p對象中的內容</p> </div> CSS: #box {background-color:#eee; } #box p {margin-top: 20px;margin-bottom: 20px; text-align:center; } 解決方法:在P對象上下各加2個空的div對象CSS代碼:.1{height:0px;overflow:hidden;}或者爲DIV加上border屬性。 屏蔽IE瀏覽器(也就是IE下不顯示) *:lang(zh) select {font:12px !important;} /*FF,OP可見*/ select:empty {font:12px !important;} /*safari可見*/ 這裏select是選擇符,根據狀況更換。第二句是MAC上safari瀏覽器獨有的。 僅IE7識別 *+html {…} 當面臨須要只針對IE7作樣式的時候就能夠採用這個兼容。 IE6及IE6如下識別 * html {…} 這個地方要特別注意不少地主都寫了是IE6的兼容其實IE5.x一樣能夠識別這個兼容。其它瀏覽器不識別。 html/**/ &gt;body select {……} 這句與上一句的做用相同。 僅IE6不識別 select { display /*IE6不識別*/:none;} 這裏主要是經過CSS註釋分開一個屬性與值,流釋在冒號前。 僅IE6與IE5不識別 select/**/ { display /*IE6,IE5不識別*/:none;} 這裏與上面一句不一樣的是在選擇符與花括號之間多了一個CSS註釋。 僅IE5不識別 select/*IE5不識別*/ { display:none;} 這一句是在上一句中去掉了屬性區的註釋。只有IE5不識別 盒模型解決方法 selct {width:IE5.x寬度; voice-family :」"}」"; voice-family:inherit; width:正確寬度;} 盒模型的清除方法不是經過!important來處理的。這點要明確。 清除浮動 select:after {content:」.」; display:block; height:0; clear:both; visibility:hidden;} 在Firefox中,當子級都爲浮動時,那麼父級的高度就沒法徹底的包住整個子級,那麼這時用這個清除浮動的兼容來對父級作一次定義,那麼就能夠解決這個問題。 截字省略號 select { -o-text-overflow:ellipsis; text-overflow:ellipsis; white-space:nowrapoverflow:hidden; } 這個是在越出長度後會自行的截掉多出部分的文字,並以省略號結尾,很好的一個技術。只是目前Firefox並不支持。 只有Opera識別 @media all and (min-width: 0px){ select {……} } 針對Opera瀏覽器作單獨的設定。 以上都是寫CSS中的一些兼容,建議遵循正確的標籤嵌套(div ul li 嵌套結構關係),這樣能夠減小你使用兼容的頻率,不要進入理解誤區,並非一個頁面就須要不少的兼容來保持多瀏覽器兼容),不少狀況下也許一個兼容都不用也可讓瀏覽器工做得很是好,這些都是用來解決局部的兼容性問題,若是但願把兼容性的內容也分離出來,不妨試一下下面的幾種過濾器。這些過濾器有的是寫在 CSS中經過過濾器導入特別的樣式,也有的是寫在HTML中的經過條件來連接或是導入須要的補丁樣式。 IE5.x的過濾器,只有IE5.x可見 @media tty { i{content:」";/*」 「*/}} @import ’ie5win.css’; /*」;} }/* */ IE5/MAC的過濾器,通常用不着 /**//*/ @import 「ie5mac.css」; /**/ IE的if條件兼容 本身能夠靈活使用參看這篇IE條件註釋 Only IE 全部的IE可識別 只有IE5.0能夠識別 Only IE 5.0+ IE5.0包換IE5.5均可以識別 僅IE6可識別 Only IE 7/- IE6以及IE6如下的IE5.x均可識別 Only IE 7/- 僅IE7可識別 Css 當中有許多的東西不不按照某些規律來的話,會讓你很心煩,雖然你能夠經過不少的兼容,不少的!important 來控制它,可是你會發現久而久之你會很不甘心,看看許多優秀的網站,他們的CSS讓IE6,Ie7,Firefox,甚至Safari,Opera運行起來天衣無縫是否是很羨慕?而他們看似複雜的模版下面使用的兼容 少得可憐。其實你要知道IE 和 Firefox 並不不是那麼的不和諧,咱們找到必定的方法,是徹底可讓他們和諧共處的。不要你認爲發現了兼容的辦法,你就掌握了一切,咱們並非兼容的奴隸。 div ul li 的嵌套順序 具體嵌套寫法 遵循上面得嵌套方式,<div><ul><li></li></ul>< /div> 而後在CSS 裏面告訴 ul {Margin:0px;Padding:0px;list-style:none;},其中list-style:none是不讓<li> 標記的最前方顯示圓點或者數字等目錄類型的標記,由於IE和Firefox顯示出來默認效果有些不同。所以這樣不須要作任何手腳,你的IE六、和 IE七、Firefox顯示出來的東西(外距,間距,高度,寬度)就幾乎沒什麼區別了,也許細心的你會在某一個時刻發現1、兩個象素的差異,但那已經很完美了,不須要你經過調整大片的CSS來控制它們的顯示了,你願意,你能夠僅僅兼容一兩個地方,並且一般這種兼容能夠適應各類地方,不須要你重複在不一樣的地方調試不一樣的兼容方式–減輕你的煩。你能夠ul.class1, ul.class2, ul.class3 {xxx:xxxx}的方式方便的整理出你要兼容的地方,而統一兼容。嘗試一下吧,不再要亂嵌套了,雖然在Div+CSS的方式下你幾乎能夠想怎麼嵌套就怎麼嵌套,可是按照上面的規律你將輕鬆不少,從而事半功倍! 

相關文章
相關標籤/搜索