這種方式一般適用於一些基礎樣式類,自身能夠被單獨使用,也能夠做爲其餘樣式類的一部分。示例:css
.bordered { border: solid 1px #aeaeae; } input { padding: 5px; margin: 5px; .bordered; } button { padding: 5px 10px; margin: 5px; .bordered; }
這樣,能夠最大可能的複用樣式。less
這種混合方式,相似於函數,自身不能做爲獨立的樣式類使用,只在被調用的地方生效。示例:函數
@primaryCol: #51ca7a; .border-radius (@radius: 5px) { border-radius: @radius; } .bg-color (@bgColor: #fff) { background-color: @bgColor; } .input { .border-radius; .bg-color; } .button { .border-radius(8px); .bg-color; }
並且這種函數式混合方式,還能夠設置默認參數值。這種混合方式特別適合咱們須要個性化定製組件的皮膚,以便提供不一樣的可選方式,知足不一樣的業務場景。字體
提到函數式混合方式,不得不提到 @arguments 變量,相似於 ES5 的 arguments 哦,這樣好多變量時就不須要一一書寫啦。示例:spa
.box-shadow (@x: 0, @y: 0, @blur: 1px, @color: #efefef) { box-shadow: @arguments; } .box { padding: 10px 15px; margin: 20px; .bordered; .box-shadow(4px, 4px, 4px, #bebebe); }
這種方式是對 1.2 方式的一種擴展。1.2 中參數都是變量,而這裏的模式匹配則是將某些變量固定下來,即將變量變爲常量。換就話說,就是隻有當參數是對應的常量才能匹配對應模式。以下:code
@dft: 'dft'; @fill: 'fill'; @dftCol: #fff; @warnCol: #f78253; .button-theme('dft') { .bg-color(@dftCol); color: darken(@dftCol, 60%); } .button-theme('dft', @color) { .bg-color(@dftCol); color: @color; } .button-theme('fill', @bgColor) { .bg-color(@bgColor); color: lighten(@bgColor, 60%); } .button-theme(@_, @color) { border-color: @color; } .input.active { .button-theme(@fill, @primaryCol); } .button.active { .button-theme(@fill, @primaryCol); } .button-default { .button-theme(@dft); } .button-primary { .button-theme(@dft, @primaryCol); &.fill { .button-theme(@fill, @primaryCol); } } .button-warn { .button-theme(@dft, @warnCol); &.fill { .button-theme(@fill, @warnCol); } }
上面咱們定義了四種 .button-theme
模式:圖片
lighten
進行對應設置;所以,.button-default
中,樣式 .button-theme(@dft);
只有一個參數,將只會匹配第一種模式;.button-primary
中,樣式 .button-theme(@dft, @primaryCol);
有兩個參數,將會匹配第二種模式和第四種模式;.button-primary.fill
中,樣式 .button-theme(@fill, @primaryCol);
將會匹配第三種模式和第四種模式。最終渲染結果是:get
.button-default { background-color: #fff; color: #666666; } .button-primary { background-color: #fff; color: #51ca7a; border-color: #51ca7a; } .button-primary.fill { background-color: #51ca7a; color: #ffffff; border-color: #51ca7a; }
下圖爲上述代碼的實例,代碼詳情及效果,請戳這裏 less-mix!input
【未完待續】it