Sass為我們提供了一種方便的操作方式:嵌套。在Sass中,共有3種嵌套方式:
選擇器嵌套,是Sass中最常見的嵌套方式,這個類似於HTML元素的嵌套。這種嵌套方式我們在之前的章節接觸過好幾次了,現在再來看一個復雜點的例子。
舉例:
$color1:red;
$color2:green;
$color3:blue;
body
{
color:$color1;
.column
{
color:$color2;
.content-title
{
color:$color3;
}
}
}
編譯出來的CSS代碼如下:
body
{
color: red;
}
body .column
{
color: green;
}
body .column .content-title
{
color: blue;
}
分析:
選擇器嵌套這種方式雖然操作起來很方便,但是卻有一個很大的弊端:嵌套的層級越深,編譯出來的CSS代碼的選擇器層級也越深。這種嵌套方式會導致CSS樣式冗余,並且難以維護。
在CSS中,選擇器的層級越多,浏覽器解析時匹配的次數就越多,因而速度就越慢。因此在定義選擇器的時候,我們要盡量讓選擇器的層級少一些,最好不要超過3層。所以在實際開發中,我們應該盡量注意一下Sass選擇器嵌套中的層級問題,盡量少用選擇器嵌套的方式來書寫Sass。
CSS選擇器的性能比較復雜,具體參考“HTML和CSS進階教程”中“12.6高性能的選擇器”這一節,看完會對選擇器的原理有非常深入的理解。
在Sass中,還為我們提供了一種屬性嵌套的方式。我們都知道,CSS有些屬性的前綴是相同的,例如:
對於這些擁有相同前綴的屬性,我們可以使用屬性嵌套的方式來簡化操作。
舉例:
div
{
width:100px;
height:100px;
font:
{
family:Arial;
size:14px;
weight:bold;
}
}
編譯出來的CSS代碼如下:
div
{
width: 100px;
height: 100px;
font-family: Arial;
font-size: 14px;
font-weight: bold;
}
分析:
對於屬性嵌套,我們要特別注意一點:在需要嵌套的屬性前綴後面一定要加英文冒號“:”,不然編譯出來的就不是我們想要的效果。
在上面例子中,如果我們把font後面的冒號去掉,編譯出來的CSS代碼如下:
div
{
width: 100px;
height: 100px;
}
div font
{
family: Arial;
size: 14px;
weight: bold;
}
這就完全不是我們預期的效果了。剛剛接觸Sass的小伙伴們一定要特別留意這一點。
舉例:
div
{
border:
{
top:1px solid red;
bottom:1px solid green;
}
}
編譯出來的CSS代碼如下:
div
{
border-top: 1px solid red;
border-bottom: 1px solid green;
}
在Sass中,還有一種嵌套方式:偽類嵌套或偽元素嵌套。偽類嵌套(或偽元素嵌套)跟屬性嵌套很像,只不過它是需要借助“&”符號一起配合使用。
對於偽類,我們在“CSS入門教程”中的 “CSS超鏈接偽類”接觸過了。CSS3也增加很多偽類,如:first-child、nth-child()等。
偽元素跟偽類是不一樣的,常見的偽元素只有4個,即::before、::after、::first-letter、::first-line。對於偽元素和偽類的區別,具體請參考“CSS3教程”進階部分(即將上線)。
舉例:偽類嵌套
$color1:red;
$color2:green;
a{
color:$color1;
&:hover
{
color:$color2;
}
}
編譯出來的CSS代碼如下:
a
{
color: red;
}
a:hover
{
color: green;
}
分析:
偽類嵌套都是結合“&”符號來實現的,編譯的時候“&”會替換成相應的選擇器。
舉例:偽元素嵌套
.clearfix
{
*zoom:1;
&:after
{
clear:both;
content:"";
display:block;
height:0;
visibility:hidden;
}
}
編譯出來的CSS代碼如下:
.clearfix{*zoom:1;}
.clearfix::after
{
clear:both;
content:"";
display:block;
height:0;
visibility:hidden;
}
分析:
偽元素嵌套同樣也是結合“&”符號來實現的,編譯的時候“&”會替換成相應的選擇器。上面這個是清除浮動最常用的方法,具體原理可以參考“HTML和CSS進階教程”中“9.5清除浮動”這一節。