1. 選擇器擴(kuò)展
1. BEM 命名法(CSS 命名)
BEM 全稱為 Block Element Modifier
比如要給一個模塊取名字,步驟如下:
1. 先確定模塊的名字豁陆,如 user-card
2. 這一模塊的子代或后代元素都圍繞這個名字來命名甥啄,用兩個下劃線連接。如模塊里面的頭像用 .user-card__picture
熙掺,名字用 .user-card__name
材泄,簡介用 .user-card__description
悠鞍。
3. 當(dāng)某個元素發(fā)生狀態(tài)的變化,如 hover 或 click 時樣式改變参滴,命名時用兩個中劃線連接强岸。如 .user-card--active
,.user-card__picture--active
砾赔。
雖然 BEM 命名法邏輯清晰蝌箍,且各模塊名字之間不會相互影響,但名字比較冗長暴心,實際開發(fā)中我們可以根據(jù)這個思想改的簡潔一些妓盲,例如將 .user-card__picture--active
改寫成 .userCard-picture .active
(class="userCard-picture active"
)。
2. 嵌套選擇器
<div class="userCard active">
<div class="userCard-name"></div>
</div>
.userCard{
width: 100px;
.userCard-name{
color: block;
}
}
// 編譯后的 CSS
.userCard{
width: 100px; }
.userCard-name{
color: block; }
3. & 符號
.userCard{
width: 100px;
&.active{
background: orange;
}
&-name{
color: block;
}
}
4. 嵌套屬性
.userCard{
width: 100px;
font: {
size: 20px;
weight: bold;
family: 'Courier New',Courier,monospace;
}
}
2. 注釋
CSS 只能 /*單行注釋*/
专普,SCSS 可以支持 // 單行注釋
了
如果多行注釋的第一個字母是 !
悯衬,那么注釋總是會被保留到輸出的 CSS 中。
3. 變量
變量可以在多個選擇器里引用同一個數(shù)值檀夹,方便批量修改筋粗。
.userCard{
width: 100px;
&-name{
$width: 120px;
width: $width;
height: $width;
}
}
變量是有作用域的。
可以使用 !global
強(qiáng)行變?yōu)槿肿兞浚ú煌扑]使用)
如果定義一個變量名為 $main-width
炸渡,也可以使用 $main_width
訪問它娜亿。
4. 運(yùn)算
- SCSS 支持?jǐn)?shù)字的加減乘除(除法特殊),取模運(yùn)算(判斷奇偶)
div{
width: 100px + 100px + 100px; // 加
width: 100px * 100; // 乘
width: (100px/2); // 除
width: $width/2; // 除
width: 100px/2-0; // 除
width: 101px % 2; // 取模運(yùn)算偶摔,值為1暇唾,奇數(shù)
width: 100px % 2; // 取模運(yùn)算,值為0辰斋,偶數(shù)
}
將 /
解析為除法的三種情況:
- 如果該值策州,或值的任何部分,存儲在一個變量中或通過函數(shù)返回宫仗。
- 如果該值是由括號括起來的够挂,除非這些括號是在一個列表(list)外部,并且值是括號內(nèi)部藕夫。
- 如果該值被用作另一個算術(shù)表達(dá)式的一部分孽糖。
- 顏色相關(guān)運(yùn)算
div{
$red: #FF0000;
color: $red + #888888;
}
// 運(yùn)算之后的值為:
div{
color: #FF8888;
}
- 除此之外枯冈,SCSS 還提供了很多操作顏色的函數(shù),可以對顏色進(jìn)行任何操作办悟,如:
div{
$red: #FF0000;
background: fade-out($red, 0.5); // 更改透明度
color: change-color($color:$red, $green:255); // 更改顏色
}
- 字符串插值
SCSS 支持在代碼里插入字符串或變量(#{}
)尘奏,如在某個元素的開頭和結(jié)尾各加一個符號,并插入變量:
div{
$red: #FF0000;
&::before{
content: '* #{$red}';
}
&::after{
content: '?';
}
}
- CSS 語法也支持運(yùn)算:
div{
width: calc(200px / 2);
}