例子舉了這么多,你可看得出,僅僅因?yàn)椤爸怀霈F(xiàn)一次的元素”這個(gè)理由,就決定給它用id而不是class,這是絕對(duì)行不通的。因?yàn)槟銕缀鹾茈y判斷某個(gè)元素是不是一定只出現(xiàn)一次。但是,這樣的分析會(huì)得出一個(gè)可怕的結(jié)論:所有的樣式都應(yīng)該用class。
對(duì)此,我其實(shí)并不懷疑。事實(shí)上,以我的看法,95%以上的樣式,都應(yīng)該通過class而不是id來(lái)設(shè)置。或者說(shuō),除非是一些很細(xì)微很特殊的位置,可以使用id來(lái)設(shè)置樣式,其他的樣式都應(yīng)該用class來(lái)設(shè)置。這個(gè)結(jié)論似乎和WaSP的圣經(jīng)書《網(wǎng)頁(yè)重構(gòu)》里講的矛盾,因?yàn)樗先思沂菍iT批評(píng)了所謂的classitis(class麻疹,見該書148頁(yè))。但是很抱歉,鐵證如山的事實(shí)底下,我不得不否定他那句“熱愛id”(見該書150頁(yè))。
當(dāng)然,我很希望我是錯(cuò)的,畢竟背叛經(jīng)典是一件很讓人不舒服的事情。所以歡迎大家來(lái)討論,指出我的錯(cuò)誤。更重要的是,對(duì)于我舉出的哪些尷尬的例子給出一個(gè)更好的解決方案。
總結(jié):盡量用class而不是id來(lái)控制樣式的理由:
- 可維護(hù)性。你不能保證你用id的元素只在頁(yè)面中出現(xiàn)一次,即使在網(wǎng)頁(yè)設(shè)計(jì)初稿中確實(shí)是只有一次。
- id可能被Ajax程序員使用。如果頁(yè)面要用ajax的話,某些元素的id值應(yīng)該由Ajax程序員而不是頁(yè)面設(shè)計(jì)師來(lái)決定,至少應(yīng)該是雙方共同商定。那么,你怎么能放心你的id值既用來(lái)設(shè)置CSS樣式,又用來(lái)供JS調(diào)用呢?
- 同一個(gè)元素可以定義多個(gè)class,卻只能有一個(gè)id。你明白我的意思了吧?
- id的優(yōu)先級(jí)高于class。所以如果對(duì)于某個(gè)特定的元素,我們想賦予特定的樣式,可以給它加id。但是反過來(lái),如果我們一開始就是用id,你去加class是沒有效果的啦。
最后,關(guān)于Zeldman老先生講的classitis。我的理解是不要為了某個(gè)特定的樣式置頂一個(gè)特定的class。盡量創(chuàng)造一些能夠重復(fù)使用的class。而id由于不能重復(fù),反而才容易造成iditis呢。到時(shí)候我們的網(wǎng)站會(huì)出現(xiàn)search-box-top, search-box-bottom,甚至search-box-under-the-header-but-above-the-main-menu,哈哈。更可怕的是,它們的屬性定義其實(shí)都一模一樣。
經(jīng)典論壇討論: http://bbs.blueidea.com/thread-2772480-1-1.html
本文鏈接:http://www.95time.cn/tech/web/2007/4858.asp
出處:藍(lán)色理想
責(zé)任編輯:moby
上一頁(yè) 如何正確的使用 id 和 class [1] 下一頁(yè)
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|