匹配模式之批量制作三角形

之前寫了怎么使用純css制作一個(gè)三角形,但是如果要一次性寫很多的三角形,而且三角形的朝向不一樣,再用傳統(tǒng)的寫法肯定很麻煩了,而且代碼也看起來比較相似,怎么避免做大量的無用功呢,這里我們可以試試less語法中的匹配模式,通過我們傳入的參數(shù),比如三角形的朝向(是top、bottom、left 還是right),三角形的寬度以及三角形的顏色是什么顏色,就可以了批量制作大量的三角形了,具體代碼如下:


這里就定義一個(gè).trangle三角形的類的樣式:

下面來定義三角形的方向,這里需要注意的是,因?yàn)槲沂鞘褂玫腷order屬性制作三角的,所以給它添加顏色都是往它相反的放向添加,比如設(shè)置三角形朝上的話,就的讓它的下邊框顯示帶顏色,這樣它就是朝上的了,同樣朝下就要設(shè)上,左設(shè)右,右設(shè)左,翻過來蓋就行了;

朝上的三角形:

.triangle(top, @width: 5px, @color:red) {
    border-width: @width;
    border-color: transparent transparent @color transparent;
    border-style: dashed dashed solid doshed;
}

朝右的三角形:

.triangle(right, @width: 5px, @color:red) {
    border-width: @width;
    border-color: transparent transparent transparent @color;
    border-style: dashed dashed doshed solid;
   
}

朝下的三角形:

.triangle(bottom, @width: 5px, @color:red) {
    border-width: @width;
    border-color: @color transparent transparent transparent;
    border-style: solid dashed dashed doshed;
}

朝左的三角形:

.triangle(left, @width: 5px, @color:red) {
    border-width: @width;
    border-color: transparent  @color transparent transparent;
    border-style: dashed solid dashed  doshed;
}

舉個(gè)調(diào)用的栗子吧:

  • 匹配上面的類,制作一個(gè)朝左、 10px 、 綠色的三角,如下:
    .triangle_left_demo {
        width: 0;
        height: 0;
        overflow: hidden;
        .triangle(left, 10px, green);
    }

當(dāng)然上一篇也寫了制作三角形,還要加上一個(gè)屬性來解決IE6下的最小高度,以及設(shè)置它的寬高為零,這些我們沒必要每寫一個(gè)實(shí)例就給他加上上面這些屬性,less中的匹配也幫我們解決的這個(gè)問題

// 不管你匹配到哪個(gè),它都會(huì)默認(rèn)帶上下面的代碼
.triangle(@_, @width: 5px, @color: red) {
    width: 0;
    height: 0;
    overflow: hidden;
}

這樣我們在實(shí)例化一個(gè)三角形的時(shí)候就不用在加上那些相同的代碼;

注意:

  • @_是固定寫法,它的意思就是不管你匹配到哪個(gè),top也好,left也罷,它都會(huì)默認(rèn)帶上它本身共有的樣式,這個(gè)共有樣式是自己定義的,比如上面的width: 0; height: 0; overflow: hidden;;
  • 如果后面你還定義了其他參數(shù),一定要都帶上,不然會(huì)報(bào)錯(cuò);
    • 就比如上面,@_后面你需要將你定義的參數(shù) @_, @width: 5px, @color: red都帶上;

實(shí)例1: 制作一個(gè)朝上,15px,藍(lán)色的三角

.triangle_top_demo {
    .triangle(top, 15px, blue);
}

編譯結(jié)果:

.triangle_top_demo {
    width: 0;
    height: 0;
    overflow: hidden;
    border-width: 15px;
    border-color: transparent transparent blue transparent;
    border-style: dashed dashed solid dashed;
}

匹配模式,相當(dāng)于less中的混入加if判斷,如果匹配不到的話,就輸出共有的樣式,沒有要匹配對(duì)應(yīng)的樣式

舉個(gè)栗子:

.triangle_test {
    .triangle(up);
}

輸出如下:匹配不到up,只輸出.triangle的公用樣式

.triangle_test {
     width: 0;
    height: 0;
    overflow: hidden;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容