原文鏈接:https://bbs.huaweicloud.com/blogs/53c0c3509b7a11e89fc57ca23e93a89f 我坦白我是標題黨,SB只是 的簡寫。 一. SASS/SCSS ,也稱為 ,是CSS預編譯語言的一種,常見的預編譯語言還包括 ,`Stylus 變數定義 函 ...
原文鏈接:https://bbs.huaweicloud.com/blogs/53c0c3509b7a11e89fc57ca23e93a89f
我坦白我是標題黨,SB只是
SCSS-Bourbon
的簡寫。
一. SASS/SCSS
SASS
,也稱為SCSS
,是CSS預編譯語言的一種,常見的預編譯語言還包括LESS
,Stylus
,除了語法風格之外它們之間沒有什麼太大的區別,從一種語言遷移到另一種語言只需要花半天通讀一下文檔就可以了。預編譯語言為CSS提供了變數定義
,函數定義
,層級嵌套
等等一系列擴展功能,使開發者更容易編寫和管理項目中的CSS代碼。筆者使用的是SCSS/SASS
,因為相關工具庫更全面一些,儘管名稱偶爾會帶來一些瑕疵(建議使用SCSS
)。LESS
在和Sublime
集成時有一些小問題,可能是版本問題,stylus
是新興起的,開發生態並不完善。
二. SCSS-Bourbon Family
由於SCSS
最初使用Ruby on Rails
編寫的,所以github
上提供的安裝方式幾乎都是通過gem install
安裝的,但實際上在npm
倉庫里也可以找到對應的項目。另一方面,SCSS
輔助工具庫中的工具都是以_
開頭的,也就是說定義mixin
的代碼並不會被編譯到產出的CSS
文件中,可以放心使用。
【Bourbon】是筆者非常喜歡的工具包,首先它很符合漸進式開發
的思想,每個插件只實現一個特定的功能,同時,它的所有插件都是自己開發的(ThoughtBot
在收購後維護著整個Bourbon工具鏈),這又保證了工具的質量。
bourbon——函數庫
♒ 通過npm install -g bourbon
安裝.
bourbon
已經更新至5.1.0
版本,官方文檔對許多mixin
並沒有提供說明,建議使用前通讀一下library
目錄里每一個獨立的文件,其中的註釋部分標明瞭該函數的用法。例如實用triangle( )
函數來生成一個類,使其偽類包含一個指定尺寸和方向的三角形,又或者是使用tint( )
或shade( )
方法讓顏色按照半分比變亮或變暗,當然你也可以自行去擴展bourbon
的基礎功能。
SCSS代碼為:
@import "bourbon";
.triangle-down {
&::after{
content:'';
@include triangle("down", 2rem, 1rem, #b25c9c);
}
}
編譯後的代碼:
.triangle-down::after {
content: '';
border-style: solid;
height: 0;
width: 0;
border-color: #b25c9c transparent transparent;
border-width: 1rem 1rem 0;
}
純CSS
是可以諸如六邊形等很多形狀的,你完全可以在網上學習它們的實現方法,然後將其編寫為擴展的mixin
加入到自己的常用工具箱中。
Bitters——腳手架
♒ 通過npm install -g bourbon-bitters
安裝
Bitters
是Bourbon工具家族裡的腳手架,它將你的基礎樣式分拆為*_bass* , *_buttons* , *_forms* , *_layout* , *_lists* , *_media* , *_tables* , *_typography* , *_variables* 等幾個不同的文件並提供一些初始樣式,開發中可以將與基礎模塊相關的樣式擴展寫在這些文件中,這樣的做法可以在一定程度上降低項目的維護難度。
當然你也可以直接引入normolize.css
來對項目進行樣式的重置。
Neat——網格工具
♒ 通過npm install -g bourbon-neat
安裝.
我們使用的第三方UI框架中,幾乎都使用經典的12列佈局,但總有些產品經理會提出希望將某一列的寬度擴展到1.5倍這種需求,或者有些場景下你希望對整個網頁的佈局進行更精細的控制,這個時候輕量級的網格工具Neat
就派上用場了,輕量,強大,易用,輕鬆實現網格劃分,網格嵌套,響應式佈局等複雜的功能。具體的使用文檔可以訪問其官方網站Neat官方網址查看文檔。
使用示例:
下麵簡單的幾行代碼編譯為CSS後,就可以實現將頁面分為間距為20px的10列,左側邊欄占2列,右側內容區占8列;然後又將右側內容區分為間距為10px的6列,每個表格項占1列。
@import "neat";
/*定義網格*/
$sidebar-layout:(
columns: 10,
gutter: 20px
);
$list-layout: (
columns: 6,
gutter: 10px
);
/*使用網格*/
.sidebar-layout{
@include grid-container;
}
.sidebar-layout__sidebar{
@include grid-column(2,$sidebar-layout);
}
.sidebar-layout__content{
@include grid-column(8,$sidebar-layout);
}
.list-layout{
@include grid-container;
@include grid-collapse($list-layout);
}
.list-item{
@include grid-column(1, $list-layout);
}
Coolor——自動化配色工具
♒ 訪問http://coolor.co
Coolor.co其實並不是Bourbon
家族的成員,但你應該會喜歡它,這是一個免費的網站(移動端是收費的),在你指定一個主題色後,它會為你返回一組漂亮的包含5個顏色的配色方案,如果不滿意直接一鍵切換就可以了,從此冒充設計師看誰還敢攔著你~
三. CSS Evolution
隨著前端構建工具的興起,CSS
的開發也進入了一個全新的階段,自動化構建工具(例如webpack
)帶來了新的開發方式,SASS
和BEM
的年代,還只能通過限制命名規則的方式來避免CSS衝突和相互覆蓋。
CSS Modules
藉助構建工具實現了真正的模塊化,webpack4
中在css-loader配置項中就可以直接啟用CSS模塊化功能,使用起來非常方便。其原理就是通過構建工具將文件中的類名直接替換為Hash來實現。
Styled Components
,實際上就是炒的火熱的CSS-In-Js的一種實現。新事物總是褒貶不一的,有人說它是大勢所趨,也有人說它很難用,筆者的建議是:繼續觀望。Styled Components
概念的興起很有可能是React
團隊的炒作行為,JSX
已經將HTML
和JS
代碼放在一起編寫,使用起來感覺還不錯,如果又加上CSS-In-JS
, 那麼相當於使用JSX
同時編寫HTML+CSS+JS,你說這種鼓吹沒有私心誰信?以前使用<script>
和<style>
標簽把代碼都寫在<html>
中,你們叫囂著"結構,樣式,行為三者分離",現在大伙把代碼分離了,你們又忽悠著大家把結構樣式行為混在一起寫到JSX
里去,細思極恐。
上圖只是形象地描述了CSS
技術的進化方向,並不代表後出現的就一定更好。如果在你的項目組裡通過命名規則約定就可以避免衝突,那真的沒必要為了炫技或者趕潮流就去把代碼全部改成CSS Modules
或者 Styled Components
的方式。
工具是為了讓工作變得更輕鬆,而不是變得更複雜。