【翻譯】CSS指南(1)——可持續(xù)CSS

前言:這篇翻譯節(jié)選自兩篇關(guān)于CSS書寫規(guī)范和技巧的博文。CSS,或者其他語言的書寫格式,各人都有各人的習(xí)慣,但是如果牽扯到可持續(xù)性,牽扯到你的代碼未來可能被他人所重寫、所重用,那么書寫時采用一定的可讀、可調(diào)用標(biāo)準(zhǔn)也就是十分有必要的。下面節(jié)選的都是自己認(rèn)為比較重要、或者平時容易忽視的點(diǎn),希望能幫到大家。

原文:

《Enduring CSS: writing style sheets for rapidly changing, long-lived projects》

1.支持技術(shù)和工具

不管你用Sass、LESS、Stylus、Myth哪種預(yù)處理工具來編寫樣式表,這些都不重要。重要的是,無論編寫者的風(fēng)格如何,預(yù)處理工具應(yīng)該能便捷、快速地處理成其他元語言。

好的預(yù)處理工具滿足以下要求就足夠了:

* 變量名用不同的顏色標(biāo)示出來,以防人為輸入錯誤;而常量數(shù)字最好用度量的方式來指定
* 可自定義代碼段風(fēng)格,便于控制同一分支或者模板的代碼中
* 支持基本數(shù)學(xué)運(yùn)算,不要依賴于“magic number”(魔法數(shù),沒有來源、無法判斷含義的數(shù))
* 可控制代碼顯示顏色,使界面明晰

2.CSS書寫風(fēng)格

很多人都認(rèn)為要寫盡可能不重復(fù)(“DRY”)、高度抽象的樣式,CSS文件要精簡到最小。我卻不這么想,相反,很多情況下,我并不會死守那些大眾化規(guī)范。我寫代碼的首要目標(biāo),是使代碼保持長期的穩(wěn)定性,以適應(yīng)快速發(fā)展的web應(yīng)用的需求。

以下是我自己的“FUN”法則(Flat hierachy selectors 選擇器淺繼承 / Utility styles 采用實(shí)用樣式 / Name-spaced components 元素分隔命名),僅供參考:

* 選擇器淺繼承:除了特殊情況,一般只用類選擇器,盡量不使用ID選擇器;如非必要,不要嵌套選擇器。
* 采用實(shí)用樣式:使用單一效用風(fēng)格,如類名`w100`表示 `width:100%` ,`Tbl`表示`display:table;table-layout:fixed` 等等,它們的樣式不因所應(yīng)用的元素而改變。
* 元素分隔命名:一般每2-3個字母為一部分,中間用“-”隔開。如設(shè)置購物車(shoppingcart)類元素,則使用 `.sc-` 為類名前綴,如果是新版的購物車,那就用 `.sc2-` 作為前綴,以此類推。而元素內(nèi)部的不同部件,則在“-”后加部件名即可,如購物車的`wrapper`則可使用 `.sc-wrapper` ,移除按鈕則使用 `.sc-RemoveItem` ,等等。

我不擔(dān)心CSS代碼膨脹嗎?

當(dāng)然擔(dān)心。不過,仔細(xì)想想,為了使代碼盡可能簡化,使用1對1、難以修改、難以重用的代碼,面對快速發(fā)展的項(xiàng)目時時刻刻可能存在的修改要求下,你可能需要重新復(fù)制多種相同的樣式賦予給新的元素,這樣一來不僅沒有節(jié)省空間,反而增加了許多重復(fù)的樣式。而且,在對原版本進(jìn)行刪改時,你無法把原有元素對應(yīng)的樣式清除干凈,即使在文本編輯器里使用ctrl+F遍歷所有的CSS/JS文件,也不見得能把原有樣式完全清理。

如果像我一樣使用元素分割的方法來命名,那就可以很放心、很輕松地清除掉你不需要的樣式。比如更換購物車的樣式版本,只需要在CSS/JS里把全部 `.sc-` 前綴的樣式去掉,在HTML中把標(biāo)簽里的`class=“sc-”` 替換為 `class=“sc2-”` 即可。

3.項(xiàng)目文件管理

一般我把不同的文件放置在不同的文件里,不僅按照它的文件類型分目錄,還會根據(jù)它所控制的視覺元素來命名分組:

`html/
- shopping-cart-template.html
- callouts-template.html
- products-template.html
js/
- shopping-cart-template.js
- callouts-template.js
- products-template.js
css/
- shopping-cart-template.css
- callouts-template.css
- products-template.css`

這樣一來,我們可以通過`include`在css中來調(diào)用其他的css文件。假如,我們需要制作一個站點(diǎn)的首頁,那么它的css中只需要這樣調(diào)用:

首頁css(大小20KB)

`@include "core";
@include "_components/nav";
@include "_components/home-offer";`

而它其中一個子頁面,則可以這樣調(diào)用:

offers頁css(大小45KB)

`@include "core";
@include "_components/forms";
@include "_components/login";
@include "_components/callouts";`

還有個小技巧,如果你需要調(diào)用某一頁面文件夾里所有的樣式文件或者其他元素,你只需要通過調(diào)用通配符即可:

`@include "_components/login/**";`

?4.命名規(guī)則

說道CSS命名,并沒有一套必須遵守的原則,適合自己的就是最好的。目前為止最通用的標(biāo)準(zhǔn)是經(jīng)典BEM句法,有興趣的讀者們可以自行點(diǎn)擊查看。

我自己的命名規(guī)則是:

[命名空間]-[元件名]_[變量名]-[可附加尾部]

那么,真實(shí)項(xiàng)目中的類名就大概是這樣:`sc-Wrapper`、`sc-InnerItem_Odd`

不要過于抽象

對于邏輯型的編譯文件,并不是越簡潔越好。例如Sass中的傳參過程,寫得詳細(xì)點(diǎn),標(biāo)注參數(shù)的意思,能更方便以后的理解。

`/* ===================================================
Table modifiers ===================================================
*/
$widths: 5 10 20 30 40 50 60 70 80 90 100;
%Tbl-base { ? ?

? ? ? ?display: table; ? ?
? ? ? ?float: left;? ?
? ? ? ?vertical-align: middle;
}
@each $width in $widths {? ?
? ? ? ?.tbl#{$width} {? ? ? ?
? ? ? ?@extend %Tbl-base;? ? ? ?
? ? ? ?width: $width * 1%;? ?
? ? ? ?}
}`

不要依賴編譯器

現(xiàn)在,越來越多的CSS文件都是通過sass等類似工具整合編譯的。不要過分依賴編譯器,有時候它會加入一些你并不需要的代碼,所以,編譯過后的css文件最好自己再瀏覽一遍。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,733評論 25 709
  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 14,090評論 1 92
  • 本文主要是起筆記的作用,內(nèi)容來自慕課網(wǎng). 認(rèn)識CSS樣式 CSS全稱為“層疊樣式表 (Cascading Styl...
    0o凍僵的企鵝o0閱讀 2,748評論 0 30
  • Don't act like a baby, do you grow up? You're adult, be m...
    小墨022T閱讀 863評論 0 0
  • 朋友圈傳著國慶小長假期間,開封菊展將來芒山的好消息,作為花癡的我,便多了份惦念,30號下午,放學(xué)后天色已暗,還飄著...
    松竹友閱讀 696評論 6 1

友情鏈接更多精彩內(nèi)容