上一篇:less變量
上篇主要講述了less的變量的基本使用,本篇我們來講解下less的一個常用規則,那就是嵌套了(老套娃了),這個使你在使用css的時候能夠用起來非常方便和爽(爽就對了)
那么什么是嵌套呢,我們首先看一個例子:
<header class="page-header"> <h1 class="title"></h1> <nav class="page-nav"></nav> </header> <style> .page-header { background-color:#666666; color:#000; } .page-header .title{ color:#0f0f0f; } .page-header .page-nav:hover{ background-color:#ffffff; } </style>
我們在編寫如上一個html時,我們需要對其進行css的樣式設置,因此,一般都會按照上邊進行設置,但是我們應該都能發現到h1和nav標簽都是header標簽的子標簽,但作為一名合格的碼農,偷懶是必修課(嘻嘻),因此,嵌套本人用的最爽的原因便是可以減少敲代碼,但並不會影響到上邊css的易讀性。
.page-header {
background-color:#666666;
color:#000;
.title {
color:#0f0f0f;
}
.page-nav:hover{
background-color:#ffffff;
}
}
上邊便是嵌套的寫法,是不是看着更簡潔了(嘻嘻)
看了上邊代碼相信聰明的你一定秒懂並會使用了吧,那我們接下來進階一下,
在page-nav類中,若我們定義了一個或者多個偽類並為其設置了樣式,是不是要這么寫呢:
.page-header { background-color:#666666; color:#000; .title { color:#0f0f0f; }
.page-nav {
font-size:14px;
} .page-nav:hover{ background-color:#ffffff; }
.page-nav:visited {
color:#0000ff;
}
}
還是說:可以用嵌套嘛,在里面套着就行了
.page-header { background-color:#666666; color:#000; .title { color:#0f0f0f; } .page-nav { font-size:14px;
:hover{ background-color:#ffffff; }
:visited { color:#0000ff; } } }
好了,公布結果,第一種沒有錯,能正常跑起來,但是不夠偷懶,不得精髓啊,第二種,偷懶的不錯,可惜並不能編譯成功
因為less在編譯的時候,會解析成.page-nav :hover(這里中間是有空格的,不要看漏了),偽類hover變成nav的子級類了,實際上如果你認真看上邊成功編譯的例子,你都會發現到,他在嵌套編譯后出現的都是以父級子級進行轉換,所以對於偽類這種中間沒有帶空格的怎么辦呢?這個就需要引入一個父選擇器(&)沒錯就是這個符號,他代表的是父級的類
他的用法呢,也很簡單,先上例子
.page-nav { font-size:14px; &:hover{ background-color:#ffffff; } &:visited { color:#0000ff; } }
是的,直接在偽類前邊添加&就可以了,記得中間是沒有空格的哦,這樣子我們就能夠正常的表示偽類了,都是歸功於父選擇器符號(&),他在上邊的例子中就是代表着.page-nav這個父類的名稱
通過上邊是不是知道了父選擇器符號了,那么聰明如你肯定知道他不止這么簡單了,如果他能夠表示父類,那么他還可以怎么玩呢?
老慣例,先上幾個例子:
.button { &-ok { background-image: url("ok.png"); } &-cancel { background-image: url("cancel.png"); } &-custom { background-image: url("custom.png"); } } //編譯后 .button-ok { background-image: url("ok.png"); } .button-cancel { background-image: url("cancel.png"); } .button-custom { background-image: url("custom.png"); }
上邊這個例子是不是發現打開了新世界了,&就是表示父類名稱,那么在里面使用其他字符串來,那么是不是可以表示多個類了,嘻嘻
.grand { .parent { & > & { color: red; } & & { color: green; } && { color: blue; } &, &ish { color: cyan; } } } //編譯后 .grand .parent > .grand .parent { color: red; } .grand .parent .grand .parent { color: green; } .grand .parent.grand .parent { color: blue; } .grand .parent, .grand .parentish { color: cyan; }
css選擇器學過的小伙伴肯定清楚,有各種各樣的並集選擇器,交集選擇器啊等等,那么他們跟&的配合就很簡單明了了,因為看到這里,你肯定已經發現了,實際上&真就僅僅表示父類的名稱,你只是把他用&表示而已,這樣子是不是很清楚了?
那么看到這里,你是不是基本已經了解了呢?答案是否的,哈哈
我們來看一個例子:
.header { .menu { border-radius: 5px; .no-borderradius & { background-image: url('images/button-background.png'); } } }
對於上述這種老套娃的,編譯后的結果是這樣的
.header .menu { border-radius: 5px; } .no-borderradius .header .menu { background-image: url('images/button-background.png'); }
是不是發現了什么?他在里面將&替換成.header .menu,所以在編寫多層嵌套時,這點是需要注意的
最后我們來看最后一個例子,我只粘貼less不粘貼css,如果你真的懂了,相信你一定可以寫出來
p, a, ul, li { border-top: 2px dotted #366; & + & { border-top: 0; } }
最后本篇主要是學習至官方文檔的,就是筆記而已(整理下方便日后查閱,對了,最后的答案也在官方文檔里,哈哈)。