精簡的css命名規(guī)則=-沒有限制才能發(fā)揮出最大的潛能队秩。

CSS選擇器是用于定位文檔中的元素所在以便設(shè)定相應(yīng)的樣式馍资,常見的選擇器包括:基礎(chǔ)選擇器迷帜、組合選擇器色洞、屬性選擇器火诸、偽類選擇器和偽元素等置蜀。
而優(yōu)先級則是CSS樣式在瀏覽器中被解析的先后順序

css選擇器:

什么是選擇器:用于定位文檔中的元素所在以便設(shè)定相應(yīng)的樣式的盯荤,意義是對文檔設(shè)計樣式時進(jìn)行精確地定位

CSS優(yōu)先級(Specificity):是指瀏覽器通過此標(biāo)準(zhǔn)來判斷某一屬性與那一元素

優(yōu)先級的計算

W3C中對優(yōu)先級計算有以下規(guī)則秋秤,首先優(yōu)先級的大小用a,b,c,d四個位數(shù)決定脚翘,優(yōu)先級依次遞減来农,如果元素有內(nèi)聯(lián)樣式沃于,a位為1繁莹,b位為ID選擇器的數(shù)量蒋困,c位為屬性選擇器與類選擇器的數(shù)量,d位為元素選擇器與偽類選擇器的數(shù)量零院,通配選擇器的a位計0


1.CSS命名規(guī)范的意義
這里所說i的命名規(guī)范有兩層含義告抄,一是命名含義與元素相關(guān)打洼,二是命名內(nèi)容要精簡,具體例子如下:

命名含義與元素相關(guān)


精簡的命名規(guī)則

從我對命名規(guī)范的理解炫惩,可以演繹出命名規(guī)范的意義所在:

富有含義的命名規(guī)定對于開發(fā)者來說他嚷,更容易讀懂
精簡的命名規(guī)范能夠提高代碼的整潔度和用戶體驗
精簡的含義不僅僅包括命名的簡潔性筋蓖,還包括瀏覽器對頁面的渲染速度粘咖,即良好的命名規(guī)范可以提高頁面渲染速度
良好的命名規(guī)則會在精確性和復(fù)用性上權(quán)衡

.imageplus-append-lu-img-txt{overflow:hidden;margin:10px 0;font-family:Microsoft YaHei;line-height:normal}.imageplus-append-lu-img-txt .imageplus-append-content .imageplus-append-img-txt-ad-item{float:left;position:relative;height:90px;width:125px;box-sizing:border-box}.imageplus-append-lu-img-txt .imageplus-append-content .imageplus-append-img-txt-ad-item .imageplus-append-img-txt-ad-item-img img{height:100%;width:100%}.imageplus-append-lu-img-txt .imageplus-append-content .imageplus-append-img-txt-ad-item .imageplus-append-img-txt-ad-item-desc{position:absolute;bottom:0;left:0;width:100%;height:18px;line-height:18px;font-size:14px;text-align:center;color:#fff;background-color:#000;background-color:rgba(0,0,0,0.6);text-decoration:none}.imageplus-append-lu-img-txt .imageplus-append-content .imageplus-append-img-txt-ad-item .imageplus-append-img-txt-ad-item-desc span{color:#fff} .imageplus-append-lu-img-txt .imageplus-append-content .imageplus-append-img-txt-ad-item:hover .imageplus-append-img-txt-ad-item-img{border:2px solid #f60;*height:86px;*width:121px}.imageplus-append-close-btn{display:none}.imageplus-baidu-logo{position:absolute;bottom:0;right:0;z-index:9999;background:url(http://ecma.bdimg.com/public03/imageplus/logo.png) no-repeat;background-position:0 -17px;width:16px;height:16px}.imageplus-ad-logo{position:absolute;left:0;bottom:0;overflow:hidden;z-index:12;background:url(http://ecma.bdimg.com/public03/imageplus/logo.png) no-repeat;background-position:0 0;width:34px;height:16px}.imageplus-append{float:none;margin:0;padding:0;border:0;overflow:hidden;position:static;display:block;visibility:visible;text-align:left;background:transparent;-webkit-box-sizing:content-box;box-sizing:content-box;position:relative;text-indent:0;display:inline-block} .imageplus-append div{float:none;margin:0;padding:0;border:0;overflow:hidden;position:static;display:block;visibility:visible;text-align:left;background:transparent;-webkit-box-sizing:content-box;box-sizing:content-box;font-family:Microsoft YaHei;line-height:normal}.imageplus-append a,.imageplus-append img,.imageplus-append span{float:none;margin:0;padding:0;border:0;overflow:visible;position:static;display:inline;visibility:visible;text-align:left;background:transparent;-webkit-box-sizing:content-box;box-sizing:content-box;font-family:Microsoft YaHei;line-height:normal}



3.CSS命名優(yōu)化案例

案例1下面的CSS命名極其冗長忠聚,導(dǎo)致光是選擇器就占用不少存儲空間

使用以下的排版方式會更加美觀和精簡一些两蟀,雖然仍會顯得有些長赂毯,但是在可接受范圍內(nèi)党涕。

案例2<div id="test">
? <ul class="test"></ul>
</div>
現(xiàn)在要給這里的ul標(biāo)簽一個樣式膛堤,比如說padding-left:25px;那么下面四種寫法哪個渲染速度最快肥荔?#test .test{}朝群, ul.test{}姜胖,#test ul{} 以及.test{}。無疑蚜锨,.test{}渲染速度最快亚再,《高性能網(wǎng)站進(jìn)階指南》一書曾提到CSS的渲染方式是“從右往左”渲染的针余,就拿#test ul{}舉例圆雁,先渲染頁面上所有的ul標(biāo)簽帆谍,再去尋找id為test的元素汛蝙,而.text{}則是直接匹配到class="text"所在的元素朴肺。

戈稿、面向?qū)傩缘拿椒?/p>

我們習(xí)慣在CSS命名的時候摻雜語義鞍盗,這樣可以讓代碼更易懂般甲。例如淘寶首頁“免費注冊”按鈕上的class名稱:help-guest-regist

上面的class命名語義就很明顯敷存,獨眼龍看告示——一目了然锚烦,”help-guest-regist”就是”幫助-顧客-注冊”挽牢,很nice摊求,很人性化的命名室叉。作為在單一的首頁上使用茧痕,我是很難挑出什么毛病來的踪旷。

但是令野,從道家“無”的哲學(xué)思想來看徽级,語義其實是對自身的一種束縛餐抢,越是語義強(qiáng)烈的命名越是沒有重用性(尤其是內(nèi)容語義的)低匙。舉個實際點的例子顽冶,例如人人網(wǎng)的右側(cè)邊欄的標(biāo)題

如何命名才能讓CSS發(fā)揮最大的重用性潛力呢强重?答案就是“面向?qū)傩缘拿?/em>”团滥。

比很多同行都用過這樣的命名方式灸姊,只是不夠系統(tǒng)力惯,不夠大膽、徹底哮缺,多淺嘗輒止尝苇,比如像是開心網(wǎng),還有時光網(wǎng)的CSS代碼的前面一部分樣式命名:

.imageplus-append-lu-img-txt{overflow:hidden;margin:10px 0;font-family:Microsoft YaHei;line-height:normal}.imageplus-append-lu-img-txt .imageplus-append-content .imageplus-append-img-txt-ad-item{float:left;position:relative;height:90px;width:125px;box-sizing:border-box}.imageplus-append-lu-img-txt .imageplus-append-content .imageplus-append-img-txt-ad-item .imageplus-append-img-txt-ad-item-img img{height:100%;width:100%}.imageplus-append-lu-img-txt .imageplus-append-content .imageplus-append-img-txt-ad-item .imageplus-append-img-txt-ad-item-desc{position:absolute;bottom:0;left:0;width:100%;height:18px;line-height:18px;font-size:14px;text-align:center;color:#fff;background-color:#000;background-color:rgba(0,0,0,0.6);text-decoration:none}.imageplus-append-lu-img-txt .imageplus-append-content .imageplus-append-img-txt-ad-item .imageplus-append-img-txt-ad-item-desc span{color:#fff} .imageplus-append-lu-img-txt .imageplus-append-content .imageplus-append-img-txt-ad-item:hover .imageplus-append-img-txt-ad-item-img{border:2px solid #f60;*height:86px;*width:121px}.imageplus-append-close-btn{display:none}.imageplus-baidu-logo{position:absolute;bottom:0;right:0;z-index:9999;background:url(http://ecma.bdimg.com/public03/imageplus/logo.png) no-repeat;background-position:0 -17px;width:16px;height:16px}.imageplus-ad-logo{position:absolute;left:0;bottom:0;overflow:hidden;z-index:12;background:url(http://ecma.bdimg.com/public03/imageplus/logo.png) no-repeat;background-position:0 0;width:34px;height:16px}.imageplus-append{float:none;margin:0;padding:0;border:0;overflow:hidden;position:static;display:block;visibility:visible;text-align:left;background:transparent;-webkit-box-sizing:content-box;box-sizing:content-box;position:relative;text-indent:0;display:inline-block} .imageplus-append div{float:none;margin:0;padding:0;border:0;overflow:hidden;position:static;display:block;visibility:visible;text-align:left;background:transparent;-webkit-box-sizing:content-box;box-sizing:content-box;font-family:Microsoft YaHei;line-height:normal}.imageplus-append a,.imageplus-append img,.imageplus-append span{float:none;margin:0;padding:0;border:0;overflow:visible;position:static;display:inline;visibility:visible;text-align:left;background:transparent;-webkit-box-sizing:content-box;box-sizing:content-box;font-family:Microsoft YaHei;line-height:normal}



就拿上面人人網(wǎng)的標(biāo)題樣式舉例非竿,人人網(wǎng)的做法是:

.side-item-header{padding:0 0 8px; text-align:right;}

要是我红柱,我會對其進(jìn)行分離蓖乘。在實際項目時,text-align:right;這個屬性早就在CSS通用樣式庫里面了铁蹈,而padding:0 0 8px;則會以padding-bottom:8px;的形式放在網(wǎng)站通用樣式庫里了(詳細(xì)請參見我的“我是如何對網(wǎng)站CSS進(jìn)行架構(gòu)的”一文)握牧。最后,CSS命名與樣式會如下:

.tr{text-align:right;} .pb8{padding-bottom:8px;}

四览徒、精簡高效CSS命名之“三無原則”

此“三無原則”就是:無ID习蓬,無層級躲叼,無標(biāo)簽

CSS命名就應(yīng)該最簡單企巢、最直接,直搗黃龍或听。沒有HTML標(biāo)簽誉裆,沒有層級缸濒,這些通通滾蛋庇配,不要讨永。為什么不要卿闹,有三大原因:
1. 限制重用
我們會使用層級(#test .test)萝快,會使用標(biāo)簽(ul.test)揪漩,可能是習(xí)慣(沒多想),或是為了避免沖突冰更。但是,我跟你說舟铜,從今以后奠衔,這種寫法讓他見鬼去吧(如果不是為了改變CSS優(yōu)先級的話)。正如開篇論述的哲學(xué)觀點痊夭,你限制越多她我,越抑制了CSS的重用性膝宁。例如#test .test{}這種寫法员淫,里面的CSS重用性多大,完全限死在了id為test的元素下拴事,哪有重用性可言刃宵;又如ul.test牲证,我勒個去关面,這個ul標(biāo)簽十有八九就是裝飾用的等太,往這兒一放缩抡,同樣CSS樣式的div標(biāo)簽可以用嗎?哭爹喊娘压真,眼淚汪汪也不管用啊榴都。所以嘴高,相信我拴驮,層級啊,標(biāo)簽啊什么的宽气,通通見鬼去吧萄涯。要知道涝影,層級啊争占,標(biāo)簽啊作用是什么,是用來提高CSS優(yōu)先級伯襟,把那個字母長的讓人發(fā)毛的”!important”干掉的姆怪。

2. CSS文件大小
這瓜子雖小片效,吃多了也是可以填飽肚子的。所以召调,你的CSS名稱不要像老太太的裹腳布一樣唠叛,搞得又臭又長册舞,如下圖所示的人人網(wǎng)那個冗長的CSS命名吧:

你看名稱的字節(jié)數(shù)已經(jīng)比屬性還大了调鲸,要是這些名稱都在15字符以內(nèi)藐石,乖乖于微,這個CSS文件可以小個1~2K絕對沒有問題的。你看下圖這樣子的命名株依,這樣子的CSS排版是不是更舒服恋腕,更簡潔吗坚。

3. 降低了渲染效率
來個例子考考大家(以后我面試別人可能就會考這題)商源,HTML如下:

<div id="test">
    <ul class="test"></ul>
</div>

現(xiàn)在要給這里的ul標(biāo)簽一個樣式,比如說padding-left:25px;那么下面四種寫法哪個渲染速度最快谋减?
#test .test{}牡彻, ul.test{},#test ul{} 以及.test{}出爹。

如果單純的ul與.test PK庄吼,我還真拿不定誰的渲染速度更快些。但是严就,一旦牽扯到層級與標(biāo)簽总寻,我100%確定,.test這種最直接的命名方式渲染效率是最高的梢为。要知道渐行,CSS渲染元素和使用JavaScript獲取頁面元素那是完全不一樣的。如果是使用JavaScript獲取DOM元素,則#test ul{}速度是最快的,先id獲取站蝠,再tag獲取,這些可都是JavaScript內(nèi)置的方法。但是肥隆,CSS的渲染方式則是屬于外太空系的了句各,《高性能網(wǎng)站進(jìn)階指南》一書曾提到CSS的渲染方式是“從右往左”渲染的,就拿#test ul{}舉例件蚕,先渲染頁面上所有的ul標(biāo)簽妄痪,再去尋找id為test的元素僧著,所以站故,出現(xiàn)#test div{}這種寫法的人都是傻×的岂津,頁面先渲染id為test的元素?非也粱甫!先渲染頁面上所有的div宗挥,再去尋找其老爸有沒有id為test的元素瞒大。由于這種渲染差異最大就200~300毫秒(補(bǔ)充:這里的差異不是說單純一個樣式的差異拙泽,而是這些寫法泛濫的頁面的全部渲染德绿,其渲染差異數(shù)據(jù)可以參見“翻譯-不同CSS技術(shù)及其CSS性能”一文)会油,我們?nèi)艘话闶歉杏X不到的稻薇。所以案狠,長久以來,也都不以為然。但是,我是絕對容不下這種寫法的,還有,要是讓我看到類似于ul#test{}這樣子的命名,不好意思,面試肯定過不了浅碾。

所以埂陆,CSS命名购裙,只要出現(xiàn)了層級薇芝,出現(xiàn)了標(biāo)簽阅爽,就是一次額外的渲染,層級越多赫粥,渲染的開銷也就越大晦溪,這就是為什么一些前輩的文章會建議要盡量避免過深的層級修噪。這也是為什么要“無層級”裤园,“無標(biāo)簽”万俗。

對于原則第一條“無ID”论矾,其實與性能沒有多大關(guān)系钻注,只是一般ID都與JavaScript有奸情,如果再牽扯到CSS樣式液荸,如此復(fù)雜的三角關(guān)系捺弦,日后不好處理啊。

五咨油、“三無原則”遺留之樣式?jīng)_突問題

正如上面講的唁奢,層級千所,標(biāo)簽可以避免樣式?jīng)_突,雖然“面向?qū)傩缘拿辈淮嬖跊_突問題适瓦,但是,頁面上很多樣式是無法分離使用“面向?qū)傩缘拿钡墓迷藭r朵逝,一不能有


級,二不能有標(biāo)簽为朋,如果避免沖突呢融涣?

http://www.zhangxinxu.com/wordpress/2010/09/%E7%B2%BE%E7%AE%80%E9%AB%98%E6%95%88%E7%9A%84css%E5%91%BD%E5%90%8D%E5%87%86%E5%88%99%E6%96%B9%E6%B3%95/首先科雳,規(guī)范。項目組所有人的命名方法,習(xí)慣都要統(tǒng)一悲龟。其次轻腺,也是實際的做法煤蚌,同一內(nèi)容,使用同一前綴止毕。就如上面的那張圖片所示,所有class同一使用od前綴扁凛,這樣忍疾,就絕不會與其他頁面的CSS產(chǎn)生沖突了。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谨朝,一起剝皮案震驚了整個濱河市膝昆,隨后出現(xiàn)的幾起案子丸边,更是在濱河造成了極大的恐慌,老刑警劉巖荚孵,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妹窖,死亡現(xiàn)場離奇詭異,居然都是意外死亡收叶,警方通過查閱死者的電腦和手機(jī)骄呼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來判没,“玉大人蜓萄,你說我怎么就攤上這事〕畏澹” “怎么了嫉沽?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長俏竞。 經(jīng)常有香客問我绸硕,道長,這世上最難降的妖魔是什么魂毁? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任玻佩,我火速辦了婚禮,結(jié)果婚禮上席楚,老公的妹妹穿的比我還像新娘咬崔。我一直安慰自己,他們只是感情好烦秩,可當(dāng)我...
    茶點故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布垮斯。 她就那樣靜靜地躺著,像睡著了一般只祠。 火紅的嫁衣襯著肌膚如雪兜蠕。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天铆农,我揣著相機(jī)與錄音,去河邊找鬼狡耻。 笑死墩剖,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的夷狰。 我是一名探鬼主播岭皂,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼沼头!你這毒婦竟也來了爷绘?” 一聲冷哼從身側(cè)響起书劝,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎土至,沒想到半個月后购对,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡陶因,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年骡苞,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片楷扬。...
    茶點故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡解幽,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出烘苹,到底是詐尸還是另有隱情躲株,我是刑警寧澤,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布镣衡,位于F島的核電站霜定,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏捆探。R本人自食惡果不足惜然爆,卻給世界環(huán)境...
    茶點故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望黍图。 院中可真熱鬧曾雕,春花似錦、人聲如沸助被。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽揩环。三九已至搔弄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間丰滑,已是汗流浹背顾犹。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留褒墨,地道東北人炫刷。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像郁妈,于是被迫代替她去往敵國和親浑玛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案噩咪? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,754評論 1 92
  • teren君在之前的寫過《CSS選擇器與優(yōu)先級淺析》的技博顾彰,讓筆者或是看官初步了解的CSS選擇器的分類和優(yōu)先級的規(guī)...
    犯迷糊的小羊閱讀 904評論 0 3
  • 轉(zhuǎn)載請聲明 原文鏈接地址 關(guān)注公眾號獲取更多資訊 第一部分 HTML 第一章 職業(yè)規(guī)劃和前景 職業(yè)方向規(guī)劃定位...
    程序員poetry閱讀 16,555評論 32 459
  • ?前端面試題匯總 一极阅、HTML和CSS 21 你做的頁面在哪些流覽器測試過?這些瀏覽器的內(nèi)核分別是什么? ...
    Simon_s閱讀 2,220評論 0 8
  • 觀《死亡詩社》 伴隨著風(fēng)笛《蘇格蘭勇士》涨享,一群學(xué)生入駐教會學(xué)校筋搏,這個教會學(xué)校更像是我們所知的高考工廠,嚴(yán)格灰伟,刻板拆又,...
    Recycler閱讀 570評論 0 0