六種組織CSS的方式
OOCSS
OOCSS 意為物件導向的CSS。這種方法有兩種主要 觀點:
- 結構與設計分離
- 容器和內容分離
使用這套結構,開發者能得到可以在不同地方使用的一般類。
在這一步,會存在兩點(通常就好和壞):
- 好: 透過重複利用減少程式碼量 (DRY原則)。
- 壞: 組合使用。當你改變一個特定元素的樣式, 你需要改變的很有可能不僅僅是CSS(因為大多是類都是公共的),而且還會新增新的類。
此外,這種OOCSS的方法本身並沒有明確的規則,而是抽象的建議,所以這種方法在生產中的結果會有不同。
實際結果就是,這種OOCSS的思想啟發了其他人建立出屬於他們自己更具體的程式碼結構。
SMACSS
SMACSS意為可擴充套件、模組化(Scalable and Modular Architecture)的CSS。這種方法的主要目的是減少程式碼量,並且使程式碼維護更簡單。
Jonathan Snook將樣式分為了5個部分:
-
Base rules. 這些是主要的網頁元素樣式 - body, input, button, ul, ol等。在這部分, 我們主要使用
HTML標籤和屬性選擇器, 特殊的情況下使用 - 類 (例如, 你有JavaScript的樣式選擇); - Layout rules. 這些是全域性元素的樣式,比如<caption> <footer> <sidebar>的尺寸等。Jonathan建議在這些元素中使用id選擇器,因為這些元素在頁面中不會出現超過一次。然而,這篇文章的作者認為這並不是好的做法。(在樣式檔案中,不管id什麼時候出現,都會在其它的某個地方造成些麻煩).
- Modules rules.在單個頁面中,塊會被多次使用。對於模組的分類,並不建議使用id和標籤選擇器(分別為了重複使用和上下文獨立性)。
- State rules. 在這一部分,規定了模組的不同狀態和網頁基礎,這是唯一可以使用關鍵字!Important 的地方。
- Theme rules. 設計你可能需要更換的樣式。
另外,還建議對屬於某個特定分組的類設定名稱空間,併為JavaScript中使用的類使用單獨的名稱空間。
這種方法使得編寫和維護程式碼都更加容易,並且吸引了很多開發者。
Atomic CSS
使用Atomic CSS,為每一個可重用的屬性建立一個單獨的類。比如 margin-top: 1px;就可以建立一個類 mt-1,width: 200px;可以建立一個w-200。
這種風格允許透過重複宣告來儘可能減少程式碼,並且改變模組樣式也相對容易,for example, when changing a technical task.
然而,這種方法也有很大的缺點:
- 類名都是描述性的屬性名,而不是對元素本身的語義化描述,有時會使得開發複雜化。
- 直接在HTML中顯示設定。
因為這些缺點,這種方法遭到了大量批評。但是,這種方法對於大型專案而言,還是很有效的。
此外Atomic CSS也被用在不同的框架裡來指明矯正元素樣式,還有一些其它方法的展現層。
MCSS
MCSS是多層CSS。這種書寫程式碼的風格建議將樣式分為幾個部分,稱為層(layers)。
-
底層(Zero layer or foundation)。這層程式碼負責重置瀏覽器樣式(比如reset.css 和
normalize.css); - 基礎層(Base layer)包含網站重複使用的元素的樣式:按鈕、文字輸入框等。
- 專案層(Project layer)包含單獨的模組和一個“上下文”——根據客戶端瀏覽器,檢視站點/應用程式的裝置,使用者角色等對元素的修改。
- 修飾層(Cosmetic layer)程式碼是OOCSS的風格,對元素的外觀做一些小的修改。建議只保留影響元素外觀,但不會破壞網站佈局的樣式(比如顏色和不重要的縮排)。
層級之間的互動層次是很重要的:
- 基礎層(base layer)定義中性樣式,不影響其他層。
- 基礎層(base layer)的元素只會影響本層的類。
- 專案層(project layer)的元素能影響基礎層和專案層。
- 修飾層(cosmetic layer)是以描述性OOCSS類(“atomic”類)的形式設計的,並且不會影響其他的CSS程式碼,可選擇性的用於標記當中。
AMCSS
AMCSS就是"Attribute Modules for CSS(css的屬性模組)"。
讓我們看一個例子:
<div class="button button--large button--blue">Button</div>
這樣一個類的鏈並不簡單,所以讓我透過屬性來組織這些值。
結果如下:
<div button="large blue">Button</div>
為了避免命名衝突,新增名稱空間到屬性上是個好主意。然後,我們的按鈕就變成了下面的樣子:
<div am-button="large blue">Button</div>
如果你使用驗證器檢查程式碼,會發現並沒有am-button這個屬性,所以可以在屬性名稱前加上data-。
使用一個鮮為人知,作為class屬性的選擇器"~ =" (IE7+):該選擇器選擇屬性值包含指定單詞的元素,用空格分隔。所以,這種class~="link"的選擇器類似於a.class.button這樣的選擇器。即使專門使用,因為class選擇器也只是該屬性選擇器的特殊情況。
因此,CSS程式碼
.button {...} .button--large {...} .button--blue {...}
轉換為
[am-button] {...} [am-button~="large"] {...} [am-button~="blue"] {...}
如果你覺得這樣的程式碼不常見,也可以使用不那麼激進的AMCSS形式:
<div am-button am-button-large am-button-blue></div>
FUN
FUN表示選擇器的扁平結構(Flat hierarchy of selectors),功能樣式(Utility styles),命名分割元件(Name-spaced components)。
每個字母后面都有特定的原則:
- F, flat hierarchy of selectors: 建議使用類來選擇元素,避免無用的串聯,並且不使用id。
-
U, utility styles: 鼓勵建立atomic風格的服務來解決典型的拼湊任務,比如 w100表示width:
100%;,fr表示float: right; - N, name-spaced components: Ben建議新增名稱空間來指定特殊的模組元素的樣式。這種方法避免了類名的重疊。
一些開發者注意到使用這種原則來書寫和維護程式碼是相當方便的;在某種程度上,作者拿出了最好的成果,並且以一種簡潔的方式展示了這項技術。
這種方法對專案和程式碼結構還有不小要求,它只建立記錄元素的首選形式和標記使用的方法。但是在小專案中,這些規則足夠建立出足夠高質量的程式碼。
總結
正如你所見,這些方法裡並沒有一個完美的。這些方法中沒有一條絕對的規則——你可以從開始使用一套方案來建立你自己的東西, 或者從頭開始建立一條新的方法。
為了幫助大家讓學習變得輕鬆、高效,給大家免費分享一大批資料,幫助大家在成為前端工程師,乃至全棧工程師的路上披荊斬棘。在這裡給大家推薦一個前端全棧學習扣qun:784783012 歡迎大家進群。交流討論,學習交流,共同進步。
當真正開始學習的時候難免不知道從哪入手,導致效率低下影響繼續學習的信心。
但最重要的是不知道哪些技術需要重點掌握,學習時頻繁踩坑,最終浪費大量時間,所以有效資源還是很有必要的。
學習前端,我們是認真的
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69901074/viewspace-2651971/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 前端開發入門到實戰:六種組織CSS的方式前端CSS
- 組織css程式碼CSS
- 跨平臺程式碼三種組織方式詳解
- 程式的定義、組成、組織方式、特徵特徵
- css引入的幾種方式CSS
- 程式碼模型組織方式模型
- 清浮動的六種方式
- 實施微前端的六種方式前端
- JavaScript 中的六種繼承方式JavaScript繼承
- CSS中的多種居中方式CSS
- CSS 顏色混合的N種方式CSS
- JS 繼承的 六 種實現方式JS繼承
- 用BEM命名規範組織CSS程式碼CSS
- css實現水平垂直居中的幾種方式CSS
- Python種匯入模組的三種方式總結Python
- 總結非同步程式設計的六種方式非同步程式設計
- 六種實現負載均衡技術的方式負載
- css和html的四種結合方式介紹CSSHTML
- 前端基礎問題:CSS居中的幾種方式前端CSS
- css除去flex類的幾種對齊方式的思考CSSFlex
- 6種測試組織模式,你看好哪一種? | IDCF模式
- 【基礎】這15種CSS居中的方式,你都用過哪幾種?CSS
- HTML+CSS底部footer兩種固定方式HTMLCSS
- 重構-改善既有程式碼的設計(六)–重新組織函式函式
- css實現盒子模型的各種居中方式CSS模型
- 【基礎】CSS實現多重邊框的5種方式CSS
- CSS實現水平垂直居中的1010種方式(史上最全)CSS
- 在組織中實施六西格瑪需要什麼?
- 組織的紀律
- 【css系列】六種實現元素水平居中方法CSS
- css實現圖片自適應容器的幾種方式CSS
- CSS & SVG 繪製寫作網格線的3種方式CSSSVG
- 提供一個論文的組織(命名)方式,記錄自己的理解收穫
- 組織使用精益六西格瑪方法有哪些好處?
- 為遠端工作人員提供21種組織工具
- Gradle核心思想(六)自定義Gradle外掛的三種方式Gradle
- 企業組織培訓六西格瑪管理方法的實施流程
- 座席組織