DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> WEB網站前端 >> WEB前端代碼 >> 『編寫高質量代碼Web前端開發修煉手冊』讀書筆記--高質量的CSS
『編寫高質量代碼Web前端開發修煉手冊』讀書筆記--高質量的CSS
編輯:WEB前端代碼     

1、怪異模式和DTD

標准模式:浏覽器根據規范表現頁面

怪異模式:模擬老浏覽器行為防止老站點無法工作(為了兼容老式浏覽器的代碼),如果漏寫DTD(Document Type Definition文檔定義類型)聲明,firefox會按照標准模式來解析網頁,但在IE中就會觸發怪異模式。

兩種模式的差異比較大,比較典型的是IE對盒模型的解析;在標准模式中,網頁元素的寬度是由padding、border、width三者的寬度相加決定的,而在怪異模式中,width本身就包括了padding和border的寬度

 

2、如何組織CSS?

按功能劃分:font.css color.css layout.css 等

按區塊劃分:head.css foot.css sidebar.css main.css等

作者建議:base.css + common.css +page.css

base層提供CSS reset功能(覆蓋浏覽器默認樣式)和通用原子類(文字、定位、長寬、邊距),具有高度可移植性

common層是網站級的,不同的網站有不同的common層,同一個網站只有一個common層;網站中高度重要的模塊,稱之為組件

page層位於最高層,提供頁面級的樣式

 

3、模塊化CSS

拆分模塊的技巧:

①模塊與模塊之間盡量不要包含相同的部分,如果有相同部分,應將他們提取出來,拆分成一個獨立的模塊

②模塊應該在保證數量盡可能少的原則下,做到盡可能簡單,以提高重用性

 

CSS命名規則

①推薦使用英語

②駝峰命名法 用於區別不同的單詞,劃線用於表明從屬關系

③如何避免多人合作時命名沖突?可以使用姓名首字母縮寫做為標識符,比如zzl-timeList-lastItem

 

多用組合,少用繼承 

 

如何處理上下margin?

margin是個有點特殊的樣式,相鄰的margin-left和margin-right是不會重合的,但相鄰的margin-top和margin-booton會產生重合;

所以最好統一使用margin-top或者margin-bottom,不要混合使用

總結:如果不確定模塊的上下margin特別穩定,最好不要講它寫到模塊的類裡,而是使用類的組合,單獨為上下margin掛用於邊距的原子類(例如:mt10、mb20),

模塊最好不要混動margin-top或者margin-booton,統一使用margin-top或margin-bootom

 

4、低權重原則--避免濫用子選擇器

CSS的選擇符是有權重的,當不同選擇符的樣式設置有沖突時,會采用權重高的選擇符設置的樣式。權重規則:HTML標簽權重是1,class權重是10,id的權重是100,

例如:p的權重是1,『div em』的權重是1+1=2,『strong.demo』的權重是1+10=11,『#test.red』的權重是100+10=110

如果CSS權重符相同,那麼樣式會遵循就近原則(選擇符定義的先後順序,而不是class名的先後順序,<span class="test test2">和<span class="test2 test">是一樣的),哪個選擇符最後定義,就采用哪個選擇符的樣式

使用子選擇器,會增加CSS選擇符的權重,CSS選擇符的權重越高,樣式越不容易被覆蓋,越容易對其他選擇符產生影響。

為了保證樣式容易被覆蓋,提高可維護性,CSS選擇符需要保證權重盡可能低

 

5、CSS sprite

最大好處是減輕服務器的壓力,對於流量不大的網站來說,CSS sprite帶來的好處並不明顯;所以是否使用CSS sprite主要取決於網站流量

將網站的背景圖 合到一張大圖片上。對於流量大的網站來說,改技術很有價值

①能合並的只能是用於背景的圖片,對於<img src=""/>設置的圖片,是不能合並到CSS sprite大圖中的,會影響頁面可讀性

②對於橫向和縱向都平鋪的圖片,也不能使用CSS sprite;如果是橫向平鋪的,只能講所有橫向平鋪的圖片合並成一張大圖,只能豎直排列

 

6、CSS的常見問題

6.1 編碼風格 

多行式

.test{

width:100px;

height:50px;

color:#ccc;

}

一行式

.test{width:100px;height:50px;color:#ccc}

隨著前端調試工具的日益強大,一行式編碼風格成為了主流。

 

6.2 id和class

①同一個網頁,相同的id只能出現一次,不可重復;class可以出現多次

②id的CSS選擇符權重為100,而class的選擇符權重為10

③原生JS 提供getElementById()方法,支持通過id對應到相關的HTMLElement,但原生JS不支持通過class得到HTMLElement

所以一般情況下,建議盡量使用class,少用id

 

6.3 CSS hack

①IE條件注釋法

 針對不同IE版本分別導入樣式
 
 <!--[ if IE 6]>
 <link type="text/CSS" href="ie6.css" rel="stylesheet">
 <![endif]-->
 
 <!--[ if IE 7]>
 <link type="text/CSS" href="ie7.css" rel="stylesheet">
 <![endif]-->
 
 <!--[ if IE 8]>
 <link type="text/CSS" href="ie8.css" rel="stylesheet">
 <![endif]-->

雖然向後兼容性是最好的,缺點也很明顯:將同一CSS選擇符樣式 分散到了三個文件中去控制,增加了開發和維護成本

 

②選擇符前綴法

原理是在CSS選擇符前加一些只有特定浏覽器才能識別的前綴,從而讓某些樣式只能在特定浏覽器生效。例如 "*html"前綴只對IE6生效,『*+html』前綴只對IE7生效

 選擇前綴法不能用於內聯樣式表;在向後兼容性存在一點風險
 
 <style type="text/CSS">
 .test{width:80px;}
 *html .test{width:60px}
 *+html .test{width:70px}
 </style>

 

③樣式屬性前綴法

在樣式的屬性名前加前綴,只在特定浏覽器下生效。例如『_』只在IE6下生效,『*』在IE 6和IE 7下生效

 相比選擇符前綴法聚合程度更高,代碼更精簡,可維護性很強,但在向後兼容上存在風險;
 可以用在內聯樣式上
 
 <style type="text/CSS">
 .test{width:80px;*width:70px;_width:60px}
 </style>

 

6.4解決超鏈接訪問後hover樣式不出現的問題

關於a標簽的四種狀態排序問題,有個love hate原則,即l(link)ov(visited)e h(hover)a(activate)te

 

6.5 hasLayout

hasLayout是IE浏覽器專有的一個屬性,用於CSS的解析引擎。有些時候IE下一些復雜的CSS設置解析起來會出現bug,原因可能與hasLayout沒有被自動觸發有關,我們可以手動觸發來解決bug

zoom是最常用、最安全、成本最小的觸發hasLayout的方式;在『zoom:1』無效的情況下,可以通過設置『position:relative』來觸發hasLayout

 

6.6塊級元素 和 行內元素的區別

常見的塊級元素有div、p、form、ul、ol、li等,塊級元素會獨占一行,默認情況下,其寬度自動填滿其父元素寬度;塊級元素可以設置width、height屬性;塊級元素可以設置margin、padding屬性

常見的行內元素有span、strong、em等;行內元素不會獨占一行,相鄰的行內元素會排列在同一行裡,知道一行排不下,才會換行;行內元素設置width、height屬性無效;行內元素設置有問題,具體是:水平方向的padding-left/right,marigin-left/right都會產生邊距效果,但豎直方向的padding-top/bottom,margin-top/bottom卻不會產生邊距效果

塊級元素和行內元素的CSS相關屬性是display,其中塊級元素對應於display:bolck;行內元素對應於display:inline

 

6.7 display:inline-block和hasLayout

 

6.8 relative、absolute、float

 

6.9 居中

6.9.1、水平居中

①文本、圖片等行內元素的水平居中

text-align:center

②確定寬度的塊級元素的水平居中

通過設置margin-left:auto和margin-right:auto來實現

③不確定寬度的塊級元素的水平居中

方法1:table標簽結合margin-left:auto和margin-right:auto來實現

方法2:改變塊級元素的display為inline類型,然後使用text-align:center來實現

方法3:給父元素設置float,然後父元素設置postion:relative和left:50%;子元素設置postion:relative和left:-50%來實現水平居中

 

6.9.2、垂直居中

①父元素高度不確定的文本、圖片、塊級元素的豎直居中

給父容器設置相同的上下邊距來實現

②父元素高度確定的單行文本的豎直居中

通過給父元素設置line-height和height的屬性為同一個值來實現

③父元素高度確定的多行文本、圖片、塊級元素的豎直居中

方法1:table(td的vertical-align默認是middle)

方法2:對支持display:table-cell的IE8 和 FireFox用display:table-cell和vertical-align:middle來實現居中;對不支持display:table-cell的IE6和IE7,設置positon來實現

 

6.9.10 網格布局

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved