摘要:這個方法論在內容和容器之間有著明顯的區分。這是通過把命名為表示其角色的類名。通過使用這種扁平的命名方式避免了多后代的選擇器。
原文鏈接:A Look at Some CSS methodologies
CSS在大型,復雜,快速迭代的系統中難以管理的程度是出了名的。
其中一個原因是CSS缺少內置的作用域管理機制。在CSS中,所有的一切都是全局的,這意味著任何你所做的改變都有可能層疊或者改變完全沒有相關的那部分UI。
擴展的CSS語言,也稱作CSS預處理器,比如說Sass,Less和Stylus,通過增加一些新的特性讓寫CSS代碼變得更簡單一點。但是就算有這些擴展性的CSS語言,在我看來,也并沒有解決可擴展性問題。
在CSS沒有自己的作用域機制之前,我們不得不設計出自己的一套系統來防止HTML文檔的特定區域不被收到影響。
下面是關于CSS方法論的介紹可能讓我們找到一些答案。
在這篇文章中,我們來看看這些CSS方法論:
面向對象的CSS(Object-Oriented CSS(OOCSS))
塊,元素,修飾符(Block,Element,Modifier(BEM))
可擴展性和模塊化性CSS架構(Scalable and Modular Architecture for CSS(SMACSS))
SUIT CSS
系統化CSS(Systematic CSS)
CSS方法論是正式的,文檔化寫CSS的方法系統,它能夠讓我們以一系列小的,獨立的方式來開發,維護和擴展前端代碼。而不是作為一大塊整體的不可分割的代碼。
采用一種CSS方法論,甚至是你自己創建的一種,無論項目的大小和復雜度都會讓CSS變得更好設計并且更好地在設計項目中迭代。
相關:大型網站的CSS開發
每一種CSS方法論都提供了一系列略微不同的解決CSS可擴展性/可維護性的方法。一個CSS方法論通常會定義一些指南:
CSS和HTML最佳實踐
Class和ID命名規范
CSS樣式規則的排序和組合
代碼格式
世界上并沒有“最佳”的CSS方法論。不同的方法適應于不同的個人/項目組/項目。
我們希望的是,通過了解目前已經存在的CSS方法論可以幫助我們找到一種適應我們需求的方法?;蛘咚苍S能激發你的創造力,讓你創建一個你自己專屬的CSS方法論。
面向對象的CSS(OOCSS)Nicole Sullivan的面向對象的CSS,或者簡單來說OOCSS,在2009年發布。
這實際上是第一個大范圍采用的CSS方法論。甚至到現在也有很大的影響力。
OOCSS鼓勵結構和表面的分離。這個方法論在內容和容器之間有著明顯的區分。
在OOCSS中,樣式規則只由CSS類選擇器來寫。
OOCSS例子比如你的button元素的樣式可能有兩個CSS類來設置,比如下面這兩個
.button -- 提供button的基本結構
.grey-btn -- 提供顏色和其他視覺樣式
CSS
.button{ box-sizing:border-box; height:50px; width:100%; } .grey-btn{ background:#EEE; border:1px solid #DDD; box-shadow:rgba(0,0,0,0.5) 1px 1px 3px; color:#555; }
HTML
反例
/* 后代選擇器在OOCSS中是 */ .wrapper .blog-post .button{ ... }
通過這種方式,HTML元素的樣式表現就不會依賴于其所在的特定DOM結構上,也就不會受到位置的影響。
OOCSS方法論這樣做的最大好處就是它能夠讓作者最大的利用CSS層疊的樣式的好處,而不是把它鎖在高度具體的選擇器中。
相關:CSS特性是怎么工作的?
作者鼓勵我們無論何時都去復用已有的樣式而不是創建新的樣式。我們也被鼓勵通過新的類來擴展樣式而不是修改或者覆蓋已有的CSS樣式。
反例HTML
CSS
/* 反例 */ .to-do{ color:#FFF; background-color:#000; } .to-do li:first-child{ color:#FF0000; }
OOCSS例子
為了讓我們的CSS更具模塊化和靈活度,并且防止出現后代選擇器,我們用下面的方式來復寫上面的反例:
HTML
CSS
/* OOCSS */ .to-do { color: #FFF; background-color: #000; } .first-to-do-item { color: #FF0000; }
OOCSS的弱點是你很可能會使用很多很多的類,到最后你都無法維護或管理啦。
并且,在我看來,讓OOCSS產生靈感的面向對象編程的思想在CSS中并不契合。
但是,這并不是說OOCSS的原則是無效的。相反,OOCSS是把大型CSS開發帶來理性的常用的CSS方法論.
塊,元素,修飾符塊,元素,修飾符--更常被叫做BEM--是一個由被稱為俄羅斯的谷歌的Yandex開發組開發的一套CSS體系。
在BEM背后的思想是區分實現不同角色的CSS類。這是通過把CSS命名為表示其角色的類名。
BEM剛好可以作為OOCSS的補充,因為OOCSS并沒有施加任何的命名規范。
在BEM的方法論中,一個塊是一個獨立的模塊好的UI組件。一個塊可以由多個HTML元素組成,甚至有幾個塊組合而成。比如說導航菜單和搜索表單就是一個塊的例子。
一個元素就是塊的一個組件。一個元素一般用來完成一個目的。比如說,你有一個導航菜單塊,那導航菜單的鏈接就是元素,它可以使一個列表項(li元素)或者鏈接(a元素).
一個修飾符是用來改變塊或者元素默認樣式的CSS類。
喜愛案就是BEM類命名的語法:
.block
.block--modifier
.block__element
.block__element--modifier
反例考慮下面的例子,標記代表的是一個登錄表單:
HTML
BEM范例下面是使用BEM命名規則來為上面的標記命名:
HTML
這個.loginform類是一個塊。
這個.loginform塊由三個元素組成:
元素 | 作用 |
---|---|
loginform__username | 代表用戶名 |
loginform__password | 代表密碼 |
loginform__btn | 用戶點擊提交表單 |
這三個修飾符分別是:
修飾符 | 描述 |
---|---|
.loginform__username--errror | 錯誤時的樣式 |
.loginform__btn--inactive | 未激活樣式 |
.loginform--errors | 包含錯誤的樣式 |
這種BEM的命名規則幫助CSS的作者遵循OOCSS的原則。通過使用這種扁平的命名方式避免了多后代的選擇器。
反例所以我們不會用下面這種樣式命名規則。。。
CSS
.loginform .username .error{ ... }BEM范例
。。。你只需要一個類選擇器:
CSS
.loginform__username--error{ ... }
BEM是一個非常魯棒的命名規范。
它成功地區分了類的不同關注點。并且通過類名我們可以很簡單的看到標記之間的關系。
一些關于BEM的主觀批評如下:
類名會變的很長很難看
命名規范對于沒有經驗的開發者來說不是那么的好理解
作為個人來講,我倒不認為這是特別強烈的批評。但是如果有一個能夠和BEM一樣魯棒的命名規范同時能夠更簡潔和好理解那就更好啦。
待續。。。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/111182.html
摘要:這個方法論在內容和容器之間有著明顯的區分。這是通過把命名為表示其角色的類名。通過使用這種扁平的命名方式避免了多后代的選擇器。 原文鏈接:A Look at Some CSS methodologies CSS在大型,復雜,快速迭代的系統中難以管理的程度是出了名的。 其中一個原因是CSS缺少內置的作用域管理機制。在CSS中,所有的一切都是全局的,這意味著任何你所做的改變都有可能層疊或者改...
摘要:要快,但是我們的服務也必須萬無一失,后續我會分享百度移動端首頁的前端架構設計那么這樣的優化,是如何做到的呢,又如何兼顧穩定性,架構性,與速度呢別急,讓我們把這些優化一一道來。百度移動端首頁的很多就是這樣緩存在客戶端的。 歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面(不僅僅是代碼):https://segmentfault.com/blog/fronte...
摘要:前端日報精選譯用搭建探索生命周期中的匿名遞歸瀏覽器端機器智能框架深入理解筆記和屬性中文上海線下活動前端工程化架構實踐滬江技術沙龍掘金周二放送追加視頻知乎專欄第期聊一聊前端自動化測試上雙關語來自前端的小段子,你看得懂嗎眾成翻 2017-08-10 前端日報 精選 [譯] 用 Node.js 搭建 API Gateway探索 Service Worker 「生命周期」JavaScript ...
摘要:歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面不僅僅是代碼從說起要想了解,得從一個新的規則說起。因為用戶沒有安裝的話,我們強制要求顯示也沒有辦法。國內有阿里巴巴的平臺,可以選自己喜歡的圖標導出。 歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面(不僅僅是代碼):https://segmentfault.com/blog/fr...
摘要:歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面不僅僅是代碼從說起要想了解,得從一個新的規則說起。因為用戶沒有安裝的話,我們強制要求顯示也沒有辦法。國內有阿里巴巴的平臺,可以選自己喜歡的圖標導出。 歡迎大家收看聊一聊系列,這一套系列文章,可以幫助前端工程師們了解前端的方方面面(不僅僅是代碼):https://segmentfault.com/blog/fr...
閱讀 1888·2021-11-17 09:33
閱讀 6479·2021-10-12 10:20
閱讀 2303·2021-09-22 15:50
閱讀 1790·2021-09-22 15:10
閱讀 620·2021-09-10 10:51
閱讀 626·2021-09-10 10:50
閱讀 3038·2021-08-11 11:19
閱讀 1782·2019-08-30 15:55