對(duì)CSS類及id的規(guī)范化命名
- 發(fā)布于:2019-08-16
- 共 266 人圍觀
在閱讀了由Andy Clarke(of Stuff and Nonsense and All That Malarkey)以及Eric Meyer所撰寫的關(guān)于CSS類以及id命名規(guī)范的系列文章之后,我開始思考在自己的Web站點(diǎn)設(shè)計(jì)過程中對(duì)類以及ids的命名方式。
直觀命名
當(dāng)在設(shè)計(jì)Web頁面以及需要對(duì)一個(gè)div進(jìn)行標(biāo)識(shí)的時(shí)候,最自然的想法就是使用可以描述元素所在頁面位置的詞匯來對(duì)其命名。這種方法使得類以及id的名稱如下面所示:
top-panel
horizontal-nav
left-side
center-column
right-col
這些是CSS以及XHTML類和id的有效命名方式。這些詞匯簡單并且能夠使人顧名思義,因此滿足了標(biāo)識(shí)頁面元素以及相應(yīng)的CSS樣式的需要。
但問題是這樣的名稱同頁面內(nèi)容的特定表達(dá)方式相關(guān)聯(lián)。這些命名參考了某種特定頁面布局中的頁面元素位置,因此在這樣的布局之外使用就會(huì)顯得不合適甚至造成理解混亂。同時(shí),這些命名沒有涉及文檔內(nèi)容的結(jié)構(gòu)。因此,下面給出了對(duì)CSS類以及ID命名更好的方法。
結(jié)構(gòu)化命名
結(jié)構(gòu)化的標(biāo)記意味著表達(dá)方式/位置信息同內(nèi)容的完全分離——這其中包括出現(xiàn)在標(biāo)記(markup)中的類和id名稱。
有標(biāo)記的相關(guān)信息都是用來描述文檔的結(jié)構(gòu)而不是外觀。這樣的特點(diǎn)使得我們可以通過簡單的改變CSS的方式來對(duì)不同外觀格式下的內(nèi)容(content)以及標(biāo)記(markup)進(jìn)行重用。當(dāng)你理解這種方式時(shí),很容易就可以發(fā)現(xiàn)采用頁面位置來為類以及id命名的方式在處理如音頻(audio)等外觀格式上顯得非常不合適。因此,應(yīng)當(dāng)根據(jù)在文檔中的使用目的而非出現(xiàn)位置來對(duì)類以及id進(jìn)行結(jié)構(gòu)化命名。
可以按照如下所示的結(jié)構(gòu)化方式來對(duì)類以及id名稱命名:
branding
main-nav
subnav
main-content
sidebar
這些名字同直觀命名方式一樣非常易懂,但他們描述了頁面元素的作用而非位置。這使得代碼更加符合使用純粹的結(jié)構(gòu)化標(biāo)記(structural markup)的初衷,即開發(fā)人員可以在不改變標(biāo)記的情況下對(duì)各種各樣媒體下的顯示格式進(jìn)行處理。
即使你不打算在其他的媒體上對(duì)Web頁面進(jìn)行格式修改,使用結(jié)構(gòu)化命名方式還可以幫助你在日后的站點(diǎn)升級(jí)或重新設(shè)計(jì)中更為輕松。例如,結(jié)構(gòu)化命名避免了當(dāng)一個(gè)div同id right-column移動(dòng)到頁面左邊后所帶來的混亂。對(duì)div sidebar的采用這樣的命名方式就顯得更加適當(dāng),因?yàn)闊o論它出現(xiàn)在頁面的哪一邊,這個(gè)名字仍然對(duì)開發(fā)人員來說直觀易懂。
慣例
Andy Clarke分析了40份由推崇標(biāo)準(zhǔn)化Web設(shè)計(jì)理念的開發(fā)人員所設(shè)計(jì)的Web站點(diǎn)的源代碼。盡管類以及id名稱很不統(tǒng)一,但是還是發(fā)現(xiàn)了一些頻繁出現(xiàn)的常用名稱。這里給出了最常用類/id名稱的示例列表:
header
content
nav
sidebar
footer
如果要查看完整的列表,可以看看最常見命名慣例表
這些常見的類以及id名稱是否標(biāo)志著一種標(biāo)準(zhǔn)的誕生或是普遍接受慣例的形成呢?盡管這是我所希望的,但我并不這么認(rèn)為。我的確希望能夠看見一整套對(duì)于我們每天都可以看到的常用頁面元素的命名標(biāo)準(zhǔn)。同時(shí),使用標(biāo)準(zhǔn)化的命名方式可以使得尋找頁面元素以及對(duì)Web站點(diǎn)升級(jí)帶來方便,尤其當(dāng)需要在由不同開發(fā)人員在不同時(shí)間所開發(fā)站點(diǎn)中換來換去工作的時(shí)候。
review:
大的布局div可以以外觀的方式命名(如header,footer),其他的我覺得還是應(yīng)該以描述所含內(nèi)容的標(biāo)準(zhǔn)來命名(如menu,news)
在布局上不要出現(xiàn)left, right等有關(guān)位置的詞語為好……支持Shark,根據(jù)其內(nèi)容來命名是最科學(xué)的。
一開始我覺得后半句不合適,我覺得標(biāo)記應(yīng)該和內(nèi)容和顯示完全分開
回過頭來又想想,sharkui的話也有一定道理
比如同樣結(jié)構(gòu)的列表(分別在不同頁面)
<ul>
<li>今天你吃了嗎</li>
<li>今天你吃了嗎</li>
<li>今天你吃了嗎</li>
<li>今天你吃了嗎</li>
<li>今天你吃了嗎</li>
</ul>
一個(gè)是新聞news,一個(gè)是技術(shù)文檔tech
我們?cè)撊绾谓o這個(gè)列表命名呢?
是分別為id=“news”和id="tech"
還是class="articleList"呢?
如果是前者,假如這兩個(gè)列表完全是一樣的,我要定義兩種完全一樣的CSS是不是很浪費(fèi)?兩種還好,如果還有很多這樣的列表呢?
如果是后者,那這兩個(gè)的樣式就只能定義成一樣的了,如果我需要兩者有些區(qū)別,如顏色,那我地重新寫一段CSS并且修改布局中的代碼
解決方案很簡單啊,id和class都用上:
<ul id="news" class="articleList"></ul>
<ul id="tech" class="articleList"></ul>
CSS有很多類似OOP中的概念,class在這里可以理解為“繼承”,id則可理解為“重載”。CSS的C不就是這個(gè)意思么?^_^
轉(zhuǎn)載請(qǐng)說明出處:六百號(hào)技術(shù) - SEO優(yōu)化,網(wǎng)頁設(shè)計(jì),網(wǎng)絡(luò)編程,軟件技巧,網(wǎng)絡(luò)知識(shí),系統(tǒng)技術(shù) ? 對(duì)CSS類及id的規(guī)范化命名
標(biāo)簽: