常用CSS書寫技巧

來源:互聯網
上載者:User

/*******************************************************************************/
      不同的瀏覽器,比如Internet Explorer 6,Internet Explorer 7,Mozilla Firefox等,對CSS的解析認識不一樣,因此會導致產生的頁面效果不一樣,得不到我們所需要的頁面效果。這個時候我們就需要針對不同的瀏覽器去寫不同的CSS,讓它能夠同時相容不同的瀏覽器,能在不同的瀏覽器中也能得到我們想要的頁面效果。這個針對不同的瀏覽器寫不同的CSS code的過程,就叫CSS hack,也叫寫CSS hack。
      由於不同的瀏覽器對CSS的支援及解析結果不一樣,還由於CSS中的優先順序的關係。我們就可以根據這個來針對不同的瀏覽器來寫不同的CSS。
      比如 IE6能識別底線"_"和星號" * ",IE7能識別星號" * ",但不能識別底線"_",而firefox兩個都不能認識。等等
書寫順序,一般是將識別能力強的瀏覽器的CSS寫在後面。下面列舉常用的CSS hack方法

1:!important
!important作用是提高指定樣式規則的應用優先權。
IE7以及所有標準瀏覽器能識別!important
區別IE6與IE7與其他瀏覽器
.browserTest
{
    border:20px solid #60A179 !important;
    border:20px solid #00F;
}
在Mozilla中或者IE7瀏覽時候,能夠理解!important的優先順序,因此顯示#60A179的顏色:
在IE6中瀏覽時候,不能夠理解!important的優先順序,因此顯示#00F的顏色:

2:*
IE都能識別*;標準瀏覽器(如Firefox)不能識別*
區別IE6與Firefox
.browserTest
{
    border:20px solid #60A179;
    *border:20px solid #00F;
}
區別IE7與Firefox
.browserTest
{
   border:20px solid #60A179;
   *border:20px solid #00F;
}
區別IE7,IE6與Firefox
.browserTest
{
   border:20px solid #60A179;
   *border:20px solid #00F !important;
   *border:20px solid ###;
}

3:_
IE6支援底線,IE7和firefox均不支援底線
區別IE7,IE6與Firefox
.browserTest
{
   border:20px solid #60A179;
   *border:20px solid #00F;
   _border:20px solid ###;
}
/*不管是什麼方法,書寫的順序都是firefox的寫在前面,IE7的寫在中間,IE6的寫在最後面*/

4:*+html 與 *html
*+html 與 *html 是IE特有的標籤, firefox 暫不支援.而*+html 又為 IE7特有標籤
.browserTest { width: 120px; }      /* FireFox fixed */
*html .browserTest { width: 80px;}  /* ie6 fixed */
*+html .browserTest { width: 60px;} /* ie7 fixed */
注意:
*+html 對IE7的HACK 必須保證HTML頂部有如下聲明:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
/*****************************************************************************/

/*****************************************************************************/
以下是一些常用的CSS相容技巧
1)Firefox下給div設定padding後會導致width和height 增加, 但IE不會.(可用!important解決)

2)垂直置中,將 line-height設定為當前div相同的高度, 再通過vertical-align: middle;( 注意內容不要換行)

3)水平置中,margin:0 auto;(當然不是萬能)

4)若需給a標籤內內容加上樣式, 需要設定 display: block;(常見於導航標籤)

5)浮動IE產生的雙倍距離
在IE下,當一個div設定了float後,然後給他設定margin,就會出現加倍的margin,解決的辦法是給div設定display:inline。
<div id=”float”></div>
相應的css為
#float
{
   float:left;
   margin:5px;/*IE下理解為10px*/
   display:inline;/*IE下再理解為5px*/
}
Block元素的特點是:總是在新行上開始,高度,寬度,行高,邊距都可以控制(塊元素);Inline元素的特點是:和其他元素在同一行上,...不可控制(內嵌元素);

6)IE和FF對盒模型的解釋區別
#browserTest{ width: 650px !important;width: 648px;padding-left:2px;background:#fff; } 
browserTest顯示的寬度是650px;
IE Box的總寬度是:width+padding+border+margin寬度總和;
FF Box的總寬度就是:width的寬度,padding+border+margin的寬度在含在width內。
如果有BOX{WIDTH:"300"; PADDING:"5PX";}
則BOX在IE的寬度應該為:310
而在FF的寬度則是300
所以在BOX有填充的情況下應該這樣使用
BOX{WIDTH:"300" !IMPORTANT; WIDTH:"290";}

7)ul標籤在FF下面預設有list-style和padding, 最好事先聲明, 以避免不必要的麻煩;(常見於導航標籤和內容列表)

8)作為外部wrapper的div不要定死高度, 最好還加上 overflow: hidden;以達到高度自適應;

9)頁面的最小寬度
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的判斷來實現最小寬度。

10:萬能float閉合
將以下代碼加入Global CSS 中,給需要閉合的div加上
<style>
/* Clear Fix */
.clearfix:after
{
   content:".";
   display:block;
   height:0;
   clear:both;
   visibility:hidden;
}
*html .clearfix{
   height:1%;
}
*+html .clearfix{
   height:1%;
}
.clearfix
{
   display:inline-block;
}
/* Hide from IE Mac */
.clearfix {display:block;}
/* End hide from IE Mac */
/* end of clearfix */
</style>
/**********************************************/
<div id="wrap">
   <div class="column_left">
     <h1>Float left</h1>
   </div>
   <div class="column_right">
     <h1>Float right</h1>
   </div>
</div>
#wrap{ border:6px #ccc solid; overflow:auto; _height:1%;}
.column_left{ float:left; width:20%; padding:10px;}
.column_right{ float:right; width:75%; padding:10px; border-left:6px #eee solid;} 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.