Sass 基础(三)
擴展/繼承
繼承對于了解css 的同學來說一點都不陌生,先來看一張圖
在Sass 中也具有繼承一說,也就是繼承類中的樣式代碼塊,在Sass中時通過關鍵詞“@extend”來
繼承已經存在的類樣式塊,從而實現代碼的繼承。
//SCSS
.btn{
border:1px solid #ccc;
padding:6px 10px;
font-size:14px;
}
.btn-primarg{
background-color:#f36;
color:#fff;
@extend .btn;
}
.btn-second{
background-color:organge;
color:#fff;
@extend .btn;
}
編譯出來之后:
//css
.btn, .btn-primary, .btn-second {
border:1px solid #ccc;
padding:6px 10px;
font-size:14px;
}
.btn-primary{
background-color:#f36;
color:#fff;
}
.btn-second{
background-color:orange;
color:#fff;
}
在 Sass 中的繼承,可以繼承類樣式塊中所有樣式代碼,而且編譯出來的 CSS 會將選擇器合并在一起,形成組合選擇器:
.btn, .btn-primary, .btn-second {
border: 1px solid #ccc;
padding: 6px 10px;
font-size: 14px;
}
占位符%placeholder
Sass中的占位符%placeholder 功能是一個很強大,很實用的一個功能,可以取代以前的css中的基類造成的
代碼冗余的情形,因為%placeholder 聲明的代碼,如果不被@extend 調用的話,不會產生任何代碼。
%mt5{
margin-top:5px;
}
%pt5{
padding-top:5px;
}
.btn{
@extend %mt5;
@extend %pt5;
}
.block{
@extend %mt5;
span{
@extend %pt5;
}
}
編譯出來的css
//css
.btn, .block{
margin-top:5px;
}
.btn, .block span{
padding-top:5px;
}
通過 @extend 調用的占位符,編譯出來的代碼會將相同的代碼合并在一起。這也是我們希望看到的效果,也讓你的代碼變得更為干凈。
混合
混合宏vs繼承vs占位符
a Sass中的混合宏使用
//SCSS中混合宏使用
@mixin mt($var){
margin-top:$var;
}
.block{
@include mt(5px);
span{
display:block;
@include mt(5px);
}
}
.header{
color:orange;
@include mt(5px);
span{
dispay:block;
@include mt(5px);
}
}
編譯結果:
.block span {
display: block;
}
.header {
color: orange;
}
.header span {
display: block;
}
.block, .block span, .header, .header span {
margin-top: 5px;
}
建議:如果你的代碼塊中涉及到變量,建議使用混合宏來創建相同的代碼塊。
b)Sass中繼承
同樣的,將上面代碼中的混合宏,使用類名來表示,然后通過繼承來調用。
.mt{
margin-top:5px;
}
.block {
@extend .mt;
span{
display:block;
@extend .mt;
}
}
.header{
color:orange;
@extend .mt;
}
編譯結果:
.block span {
display: block;
}
.header {
color: orange;
}
.header span {
display: block;
}
.block, .block span, .header, .header span {
margin-top: 5px;
}
建議:如果你的代碼塊不需要專任何變量參數,而且有一個基類已在文件中存在,那么建議使用Sass的繼承。
c)占位符
最后來看占位符,將上面的代碼中的基類.mt 換成Sass的占位符格式
//SCSS中占位符的使用
%mt{
margin-top:5px;
}
.block{
@extend %mt;
span{
display:block;
@extend %mt;
}
}
.header{
color:orange;
@extend %mt;
span{
display:block;
@extend %mt;
}
}
編譯結果:
.block span {
display: block;
}
.header {
color: orange;
}
.header span {
display: block;
}
編譯出來的 CSS 代碼和使用繼承基本上是相同,只是不會在代碼中生成占位符 mt 的選擇器。那么占位符和繼承的主要區別的,“占位符是獨立定義,
不調用的時候是不會在 CSS 中產生任何代碼;繼承是首先有一個基類存在,不管調用與不調用,基類的樣式都將會出現在編譯出來的 CSS 代碼中?!?/p>
差值#{}
使用css 預處理器語言的一個主要原因是想使用Sass 獲得一個更好的結構體系,比如說你想寫更干凈的,搞笑的和面向對象的
css. Sass 中的差值(Interpolation)就是重要的一部分,讓我們看一下下面的例子。
$properties:(margin ,padding);
@mixin set-value($side,$value){
@each $prop in $properties{
#{$prop}-#{$side}:$value;
}
}
.login-box{
@include set-value(top,14px);
}
代碼編譯成css
.login-box{
margin-top:14px;
padding-top:14px;
}
當你想設置屬性值的時候你可以使用字符串插入進來,另一個使用的用法是構建一個選擇器。
@mixin generate-sizes($class,$small,$medium,$big)
轉載于:https://www.cnblogs.com/nmxs/p/5274806.html
總結
以上是生活随笔為你收集整理的Sass 基础(三)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC++制作DLL具体解释
- 下一篇: 图论相关算法理解和总结