Stylus的@extend指令受SASS實(shí)現(xiàn)的啟發(fā),基本一致,除了些輕微差異。此功能大大簡化了繼承其他語義規(guī)則集的語義規(guī)則集的維護(hù)。
盡管你可以使用混寫實(shí)現(xiàn)類似效果,但會導(dǎo)致重復(fù)的CSS. 典型的模式式定義如下的幾個類名,然后歸結(jié)到一個元素中,例如"warning message".
該技術(shù)實(shí)現(xiàn)是沒什么問題,但是維護(hù)就比較麻煩了。
message,
.warning {
padding: 10px;
border: 1px solid #eee;
}
.warning {
color: #E2E21E;
}
使用__@extend__得到同樣的輸出,只要把對應(yīng)的選擇器傳給@extend即可。然后.warning選擇器就會繼承已經(jīng)存在的.message規(guī)則。
.message {
padding: 10px;
border: 1px solid #eee;
}
.warning {
@extend .message;
color: #E2E21E;
}
這兒是個更復(fù)雜的例子,演示了__@extend__如何級聯(lián)。
red = #E33E1E
yellow = #E2E21E
.message
padding: 10px
font: 14px Helvetica
border: 1px solid #eee
.warning
@extends .message
border-color: yellow
background: yellow + 70%
.error
@extends .message
border-color: red
background: red + 70%
.fatal
@extends .error
font-weight: bold
color: red
生成CSS如下:
.message,
.warning,
.error,
.fatal {
padding: 10px;
font: 14px Helvetica;
border: 1px solid #eee;
}
.warning {
border-color: #e2e21e;
background: #f6f6bc;
}
.error,
.fatal {
border-color: #e33e1e;
background: #f7c5bc;
}
.fatal {
font-weight: bold;
color: #e33e1e;
}
目前Stylus與SASS不同之處在于SASS不允許__@extend__嵌套選擇器。
form
button
padding: 10px
a.button
@extend form button
Syntax error: Can't extend form button: can't extend nested selectors
// 解析錯誤: 無法繼承自 button: 不能繼承嵌套選擇器
on line 6 of standard input
Use --trace for backtrace.
Stylus中,只要選擇器匹配,就可以生效:
form
input[type=text]
padding: 5px
border: 1px solid #eee
color: #ddd
textarea
@extends form input[type=text]
padding: 10px
生成:
form input[type=text],
form textarea {
padding: 5px;
border: 1px solid #eee;
color: #ddd;
}
textarea {
padding: 10px;
}
更多建議: