用LESS 寫CSS ( Mixin、Extend ) - OXXO.STUDIO
文章推薦指數: 80 %
上一篇介紹了LESS 的基本用法、import 和變數,這一篇要來玩一點比較進階的:mixin 和extend,當我們可以熟練mixin 和extend 的用法,相信對於整個CSS 可以有大幅加速 ...
ARCHIVE
ABOUT
CONTACT
Designthinkingiseverywhere
用LESS寫CSS(Mixin、Extend)
上一篇介紹了LESS的基本用法、import和變數,這一篇要來玩一點比較進階的:mixin和extend,當我們可以熟練mixin和extend的用法,相信對於整個CSS可以有大幅加速的功能。
mixin
有別於SASS的寫法,LESS的mixin長相跟class一模一樣,就是用一個「.」開頭,裡面放入變數重複使用,雖然跟class一樣,但如果是帶有小括號,轉出來的CSS是不會出現的。
LESS
.fn1(@v){
border-width:@v;
}
.box1{
.fn1(10px);
}
CSS
.box1{
border-width:10px;
}
mixin就是混合,不過其實也就是剛剛上面介紹函式的延伸,只要有「()」的基本上都會被判斷為函式,轉出的CSS裡面就不會有它出現,以下面的例子來說,.m2()轉成CSS就消失了,只剩下他裡面的樣式而已。
LESS
.m1{
font-size:20px;
}
.m2(){
font-size:30px;
}
#m1{
.m1;
}
#m2{
.m2();
}
#m3{
.m1!important;
.m2()!important;
}
CSS
.m1{
font-size:20px;
}
#m1{
font-size:20px;
}
#m2{
font-size:30px;
}
#m3{
font-size:20px!important;
font-size:30px!important;
}
mixin的計算
我們可以針對要mixin的變數做加減乘除的計算,不過要記得「前後加空格」(其實跟calc很像),不用在意單位的問題,你的變數如果帶的是px單位,轉出來就會是px為單位。
LESS
.fn2(@v){
border-width:@v-5;
}
.box2{
.fn2(10px);
}
CSS
.box2{
border-width:5px;
}
把mixin當作樣式class使用
剛剛提到長相跟class很像,其實我們在某些情形下可以當作「整包」class來使用,以下面的例子,在#b-mixin.b-mixin-1裡面我們直接寫入#b.b-1,轉出來的CSS就會把#b.b-1的內容整包帶入#b-mixin.b-mixin-1裡頭,因此如果有定義樣式表,或是有要定義重複性高的樣式,就可以用這種方法來實作。
LESS
#b{
.b-1{
margin:20px;
padding:20px;
border:5pxsolid#000;
}
.b-2{
margin:10px;
padding:10px;
border:none;
}
}
#b-mixin.b-mixin-1{
#b.b-1;
}
#b-mixin.b-mixin-2{
#b.b-2;
}
CSS
#b.b-1{
margin:20px;
padding:20px;
border:5pxsolid#000;
}
#b.b-2{
margin:10px;
padding:10px;
border:none;
}
#b-mixin.b-mixin-1{
margin:20px;
padding:20px;
border:5pxsolid#000;
}
#b-mixin.b-mixin-2{
margin:10px;
padding:10px;
border:none;
}
帶有參數的mixin
我們可以在mixin裡面加入參數重複使用,而這些參數我們也可以定義預設值,當帶有預設值的參數遇到自訂的數值,就會以自訂的數值為主,不過如果自訂的數值沒有到參數的數量呢?這時候就可以使用「@arguments」這個特別的參數,「@arguments」就表示在沒有自定義數值的狀態下,自動採用我們的預設值。
這邊其實非常好用,特別是針對許多CSS3帶有前綴字的屬性(像是-webkit-、-moz-之類的),基本上只需要定義一次,後面重複使用即可。
LESS
.mx(@mx1:red;@mx2:green;@mx3:blue){
color:@mx1;
background-color:@mx2;
border-color:@mx3;
}
.mxx{
.mx(@mx1:yellow);
}
.box-shadow(@x:0;@y:0;@blur:1px;@color:#000){
-webkit-box-shadow:@arguments;
-moz-box-shadow:@arguments;
box-shadow:@arguments;
}
.big-block1{
.box-shadow(2px;2px;2px);
}
.big-block2{
.box-shadow(2px;);
}
.average(@x,@y){
@average:((@x+@y)/2);
}
.div-a{
.average(16px,50px);
padding:@average;
}
CSS
.mxx{
color:yellow;
background-color:green;
border-color:blue;
}
.big-block1{
-webkit-box-shadow:2px2px2px#000000;
-moz-box-shadow:2px2px2px#000000;
box-shadow:2px2px2px#000000;
}
.big-block2{
-webkit-box-shadow:2px01px#000000;
-moz-box-shadow:2px01px#000000;
box-shadow:2px01px#000000;
}
.div-a{
padding:33px;
}
+與+_
+與+_也是負責合併使用,有使用+或+_的會和前一個使用的合併在一起,以下面的例子來說,陰影就會合併在同一個樣式裡,不會變成兩個,+轉換出來會有逗號,+_則是沒有逗號,用空白呈現。
LESS
.x1(){
box-shadow+:inset0010px#555;
}
.y1{
.x1();
box-shadow+:0020pxblack;
}
.x2(){
box-shadow+_:inset0010px#555;
}
.y2{
.x2();
box-shadow+_:0020pxblack;
}
CSS
.y1{
box-shadow:inset0010px#555,0020pxblack;
}
.y2{
box-shadow:inset0010px#5550020pxblack;
}
extend
extend顧名思義就是「延伸、延展」,如果我們要重複引用的class裡面又有子元素該怎麼辦呢?這裏就可以使用:extend,它會把重複的樣式獨立出來,如果要進一步跟子元素有關聯,就可以使用all,就會聯同子元素的樣式一起轉換進去。
LESS
.a1:extend(.b){
color:#f00;
}
.a2:extend(.ball){
}
.b{
border:1pxsolid;
font-size:20px;
}
.b.c{
text-align:20px;
}
CSS
.a1{
color:#f00;
}
.b,.a1,.a2{
border:1pxsolid;
font-size:20px;
}
.b.c,.a2.c{
text-align:20px;
}
BackHome
ArticleList
ShareonFacebook
ShareonGoogle+
ShareonTwitter
BacktoTop
有興趣瞧瞧其他新文章嗎?
前一篇文章:
下一篇文章:
您可以閱讀其他相關文章,或瀏覽所有文章
Copyright2019|AllRightsReserved.DesignedbyOXXO.STUDIO
延伸文章資訊
- 1CSS 預處理器SASS、LESS 介紹 - 歐斯瑞
- 2LESS
- 3[JavaScript] [CSS] LESS.js 介紹 - iT 邦幫忙
[JavaScript] [CSS] LESS.js 介紹. divaka. 10 年前‧ 8372 瀏覽. 10. 如果你希望加速你修改CSS 的能力,或是你希望在聽到客戶的新需求後( 例如:...
- 4潮流名舖Less 的獨到選賣品味
針對Saucony Originals,可以簡單地向我們介紹各款式的特色嗎? Saucony Originals 系列推出的經典鞋款相當多,像是前面 ...
- 5Less (层叠样式表) - 维基百科,自由的百科全书
Less(或寫作LESS)是一种由Alexis Sellier设计的动态层叠样式表语言,受Sass所影响,同时也影响了Sass的新语法:SCSS。 Less. LESS Logo.svg. 設計...