less學習---less的嵌套規則


上一篇: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;
  }
}

 

最后本篇主要是學習至官方文檔的,就是筆記而已(整理下方便日后查閱,對了,最后的答案也在官方文檔里,哈哈)。

附上官方文檔:http://lesscss.cn/features/#extend-feature


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM