介紹
stylus,是 CSS 的預處理框架。
CSS 預處理,預先處理 CSS。那 stylus 怎樣預先處理?stylus 給 CSS 添加了可編程的特性,也就是說,在 stylus 中可以使用變量、函數、判斷、循環一系列 CSS 沒有的東西來編寫樣式文件,執行這一套操作之后,這個文件可編譯成 CSS 文件。
安裝
安裝 Stylus 很簡單,前提是你已經安裝了 Node.js。 到 Node.js 官網下載適合你的操作系統的安裝包安裝即可。還要檢查一下 npm 是否也一並安裝了。
然后,在命令行中執行如下指令:
$ npm install stylus -g
安裝之后,運行 stylus -h
可查看幫助。
運行 stylus example.styl
可將 demo.styl 文件編譯成 example.css 文件。
基本使用
一段簡單的 stylus 代碼:
$background-color = lightblue
add (a, b = a)
a = unit(a, px)
b = unit(b, px)
a + b
.list-item
.text-box
span
background-color: $background-color
margin: add(10)
padding: add(10, 5)
&:hover
background-color: powderblue
編譯后生成的 CSS 代碼:
.list-item span, .text-box span { background-color: #add8e6; margin: 20px; padding: 15px } .list-item:hover, .text-box:hover { background-color: #b0e0e6; }
由此我們看到了 stylus 代碼以及由它編譯而成的 CSS 代碼
變量
$background-color = lightblue
上面的代碼聲明了變量 $background-color
,並為其賦值 lightblue
。
聲明之后,就可以使用這個變量了:
span
background-color: $background-color
編譯成 CSS 就是:
span{ background-color: lightblue; }
函數
add (a, b = a)
a = unit(a, px)
b = unit(b, px)
a + b
add
,
add
接受兩個參數
a
和
b
,其中
b
的默認值是
a
。
add
中調用了 stylus 的內置函數
unit
,此處,
unit
函數為
a
和
b
賦予了單位
px
。
最后將
a
和
b
相加,並返回結果,沒有
return
,但是返回了結果。
return
是可以省略的。
span
margin: add(10)
padding: add(10, 5)
編譯成 CSS 就是:
span { margin: 20px; padding: 15px; }
選擇器
.list-item
.text-box
span
background-color: $background-color
margin: add(10)
padding: add(10, 5)
&:hover
background-color: powderblue
這一段沒有了 CSS 的花括號,沒有了 CSS 的分號,卻多了一些奇奇怪怪的縮進,還有那個 &
是什么?還 &:hover
???
符號,這里提到的花括號和分號在stylus中是可以省略的,不僅如此,冒號也是可以省略的,color: powderblue
你可以寫成 color powderblue
。
縮進,先提出兩個有縮進關系的選擇器,上面代碼片段第二行的 .text-box
和第三行的 span
,其實很容易理解,寫到 CSS 里面是這樣的:
.text-box span{ ... }
即 span
是 .text-box
的子選擇器,stylus 中以縮進表示這種關系,更加清晰明了,好看。
還有 &
,這是個新鮮東西。它是父級的引用,還是來看代碼。
stylus這樣寫:
.list-item
.text-box
&:hover
background-color: powderblue
編譯成 CSS 是這樣:
.list-item:hover, .text-box:hover { background-color: #b0e0e6; }
&
父級引用的角色了。
同時,我們也不難看出,
.list-item
和
.text-box
這兩個同一級的選擇器在 stylus 中是可以換行寫的,只要保證縮進相同,它們就屬於同一級的選擇器。當然,沿用 CSS 的方式,將同一級的選擇器用逗號分隔開在 stylus 中也是可以的。
來源:https://www.jianshu.com/p/5fb15984f22d