Less學習筆記

Less作為 CSS 的一種擴展叨橱,不僅完全兼容 CSS 語法,而且連新增的特性也是使用 CSS 語法断盛,你可以在任何時候回退到 CSS的寫法罗洗。 大家可以通過以下兩個地址,快速的學習Less郑临。

變量

只能定義一次栖博,其本質(zhì)就是“常量”。

  • 變量的定義:

@nice-blue: #5B83AD; @light-blue: @nice-blue + #111; @div-width: 13px;

  • 變量的使用與編譯:

#header { color: @light-blue; width: @div-width; }

編譯為:

#header { color: #6c94be; width: 13px; }

混合(Mixin)

  • 混合允許將一個屬性集合整塊替換到另一個屬性集合中厢洞。如:

.bordered { border-top: dotted 1px black; border-bottom: solid 2px black; }
我們可以將這個css屬性集合仇让,mixin到另一個css屬性集中,如:
#menu a { color: #111; .bordered;//或者寫為.bordered() } .post a { color: red; .bordered;//或者寫為.bordered() }

經(jīng)過編譯后:

#menu a { color: #111; border-top: dotted 1px black;//替換后 border-bottom: solid 2px black;//替換后 } .post a { color: red; border-top: dotted 1px black;//替換后 border-bottom: solid 2px black;//替換后 }

  • 使mixin變量不作為css輸出
    只需要添加一對圓括號就可以了躺翻,這是該mixin將不被輸出在編譯后的css文件中丧叽,如:

.my-mixin { color: black; } .my-other-mixin() { background: white; } .class { .my-mixin; .my-other-mixin; }

編譯后:

.my-mixin { color: black; } // 這里不編譯輸出.my-other-mixin .class { color: black; background: white; }

  • 在mixin中使用選擇器selector
    除了處理屬性外,mixin還可以使用css選擇器公你,如:

.my-hover-mixin() { &:hover { border: 1px solid red; } } button { .my-hover-mixin(); }

編譯后:

button:hover {// 定義的偽類選擇器hover被應用 border: 1px solid red; }

  • 命名空間
    想如果你想混合屬性在一個更復雜的選擇器,可以疊放多個id或類踊淳。如下:

    #outer {
      .inner {
        color: red;
      }
    }
    .c {
      #outer > .inner;
    }
    

那么,#outer和.c就作為一個命名空間了陕靠。對于#outer來說迂尝,.inner就作為它的一個屬性值,訪問的時候可以使用#outer.inner來訪問剪芥,以下這幾種寫法是等價的:
// all do the same thing
#outer > .inner;
#outer > .inner();
#outer.inner;
#outer.inner();
舉例:
#my-library {
.my-mixin() {
color: black;
}
}
// which can be used like this
.class {
#my-library > .my-mixin();
}
編譯為:
.class { color: black; }

  • 關鍵字!important
    在使用混合屬性后面加上!important關鍵字垄开,則混合中的所有屬性都會加上關鍵字!important。例如:

.foo (@bg: #f5f5f5, @color: #900) { background: @bg; color: @color; } .unimportant { .foo(1); } .important { .foo(2) !important; }

編譯后:

.unimportant { background: #f5f5f5; color: #900; } .important { background: #f5f5f5 !important; color: #900 !important; }

帶參數(shù)的Mixin

  • mixin可以通過括號傳遞參數(shù)税肪,也可以帶默認參數(shù):

.border-radius(@radius) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; }

編譯后

帶默認參數(shù):

.border-radius(@radius: 5px) { -webkit-border-radius: @radius; -moz-border-radius: @radius; border-radius: @radius; }
`#header {
.border-radius;//與上圖的效果差不錯溉躲,默認為5px

}`

  • mixin多參數(shù):
    mixin允許帶多個參數(shù),也有類似于Java中函數(shù)重載的特性:

.mixin(@color) { color-1: @color; } .mixin(@color; @padding:2) { color-2: @color; padding-2: @padding; } .mixin(@color; @padding; @margin: 2) { color-3: @color; padding-3: @padding; margin: @margin @margin @margin @margin; } .some .selector div { .mixin(#008000); }

編譯后:

.some .selector div { color-1: #008000; color-2: #008000; padding-2: 2; }

當我們定義相同混合屬性名益兄,參數(shù)不同锻梳,然后.mixin(#008000);調(diào)用,第一和第二混合都能匹配净捅,但是第三個缺少參數(shù)@padding的值疑枯,所以不會引用第三個混合屬性。

  • 指定參數(shù)名傳值

`.mixin(@color: black; @margin: 10px; @padding: 20px) {
color: @color;
margin: @margin;
padding: @padding;
}
.class1 {
.mixin(@margin: 20px; @color: #33acfe);

}
.class2 {
.mixin(#efca44; @padding: 40px);
}`

編譯后:

.class1 { color: #33acfe; margin: 20px; padding: 20px; } .class2 { color: #efca44; margin: 10px; padding: 40px; }

關鍵字@arguments

@arguments有特殊的含義蛔六,類似于JavaScript中的arguments神汹,他包含了傳遞給混合屬性的所有參數(shù)庆捺,如下:

.box-shadow(@x: 0; @y: 0; @blur: 1px; @color: #000) { -webkit-box-shadow: @arguments; -moz-box-shadow: @arguments; box-shadow: @arguments; } .big-block { .box-shadow(2px; 5px); }

編譯后:

.big-block { -webkit-box-shadow: 2px 5px 1px #000; -moz-box-shadow: 2px 5px 1px #000; box-shadow: 2px 5px 1px #000; }

關鍵字@reset

類似于ES6中的剩余參數(shù)...,如下:

.mixin(...) { // matches 0-N arguments .mixin() { // matches exactly 0 arguments .mixin(@a: 1) { // matches 0-1 arguments .mixin(@a: 1; ...) { // matches 0-N arguments .mixin(@a; ...) { // matches 1-N arguments
.mixin(@a; @rest...) { // @rest is bound to arguments after @a // @arguments is bound to all arguments }

  • 模式匹配
    有時候屁魏,你想讓你的mixin可以處理不同的情況滔以,有點類似于switch語句,如下:

.mixin(dark; @color) { color: darken(@color, 10%); } .mixin(light; @color) { color: lighten(@color, 10%); } .mixin(@_; @color) {//通配氓拼,這樣所有的情況都能擁有display:block這個屬性設置 display: block; } //使用該模式匹配 @switch: light; .class { .mixin(@switch; #888); }

編譯后:

.class { color: #a2a2a2; display: block; }

作為函數(shù)使用的Mixin

當我們把混合當做函數(shù)使用時你画,在調(diào)用函數(shù)之后,函數(shù)中的變量是可以使用的桃漾,除非調(diào)用混合屬性的元素自己也定義了同樣的變量坏匪。比如:

.mixin() { @width: 100%; @height: 200px; } .caller { .mixin(); width: @width; height: @height; }

編譯后:

.caller { width: 100%; height: 200px; }

作為表達式使用

.average(@x, @y) { @average: ((@x + @y) / 2); } div { .average(16px, 50px); // "call" the mixin padding: @average; // use its "return" value }

編譯后:

`div {

padding: 33px;
}`

import指令

具體可以參看文檔:http://less.bootcss.com/features/#import-directives-feature

Mixin Gurads

帶條件的mixin,使用關鍵字when來定義不同的條件撬统。具體可以參看文檔:http://less.bootcss.com/features/#mixin-guards-feature

CSS Guards

同理适滓,css也可以使用guards,它標志在選擇器之后恋追,也是使用關鍵字when凭迹,如下:

.my-optional-style() when (@my-option = true) { button { color: white; } } .my-optional-style(); //也可以直接在css樣式上寫guards button when (@my-option = true) { color: white; }

更多可以參看http://less.bootcss.com/features/#css-guards-feature

循環(huán)

在 Less 中,mixin 可以被自己調(diào)用苦囱。當這種遞歸形式的 mixin 與 Guard ExpressionsPattern Matching 一起聯(lián)合使用的話嗅绸,就可以創(chuàng)造出各種迭代/循環(huán)結構。如下就是一個用于生成 CSS 柵格類的遞歸循環(huán)的實例:

.generate-columns(4); .generate-columns(@n, @i: 1) when (@i =< @n) { .column-@{i} { width: (@i * 100% / @n); } .generate-columns(@n, (@i + 1)); }

編譯后:

.column-1 { width: 25%; } .column-2 { width: 50%; } .column-3 { width: 75%; } .column-4 { width: 100%; }

合并

merge 特性能夠聚合多個屬性從而形成一個用逗號分隔的單一屬性撕彤。merge 對于像 background 和 transform 這類屬性非常有用鱼鸠。為了避免意外的合并,merge 需要在每個需要合并的屬性名后面添加一個 + 以作標示羹铅。

.mixin() { box-shadow+: inset 0 0 10px #555; } .myclass { .mixin(); box-shadow+: 0 0 20px black; }

合并后:

.myclass { box-shadow: inset 0 0 10px #555, 0 0 20px black; }

父選擇符

&用于指代父選擇器以及當前規(guī)則的別名蚀狰,如下:

`a {
color: blue;

&:hover {
color: green;
}
}
//規(guī)則的別名
.button {
&-ok {
background-image: url("ok.png");
}
&-cancel {
background-image: url("cancel.png");
}
&-custom {
background-image: url("custom.png");
}
}`

編譯后:

a { color: blue; } a:hover { color: green; } //規(guī)則的別名,這里代表button .button-ok { background-image: url("ok.png"); } .button-cancel { background-image: url("cancel.png"); } .button-custom { background-image: url("custom.png"); }

  • Multiple &
    &可以出現(xiàn)多次职员,比如:

.link { & + & { color: red; } & & { color: green; } && { color: blue; } &, &ish { color: cyan; } }

編譯后:

.link + .link { color: red; } .link .link { color: green; } .link.link { color: blue; } .link, .linkish { color: cyan; }

更多關于&的請參考文檔:http://less.bootcss.com/features/#features-overview-feature-nested-rules

內(nèi)置函數(shù)

關于Less的內(nèi)置函數(shù)造锅,可以參看文檔http://less.bootcss.com/functions/#functions-overview

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市廉邑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌倒谷,老刑警劉巖蛛蒙,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異渤愁,居然都是意外死亡牵祟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進店門抖格,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诺苹,“玉大人咕晋,你說我怎么就攤上這事∈毡迹” “怎么了掌呜?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵,是天一觀的道長坪哄。 經(jīng)常有香客問我质蕉,道長,這世上最難降的妖魔是什么翩肌? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任模暗,我火速辦了婚禮,結果婚禮上念祭,老公的妹妹穿的比我還像新娘兑宇。我一直安慰自己,他們只是感情好粱坤,可當我...
    茶點故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布隶糕。 她就那樣靜靜地躺著,像睡著了一般比规。 火紅的嫁衣襯著肌膚如雪若厚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天蜒什,我揣著相機與錄音测秸,去河邊找鬼。 笑死灾常,一個胖子當著我的面吹牛霎冯,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播钞瀑,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼沈撞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了雕什?” 一聲冷哼從身側響起缠俺,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎贷岸,沒想到半個月后壹士,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡偿警,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年躏救,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡盒使,死狀恐怖崩掘,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情少办,我是刑警寧澤苞慢,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站凡泣,受9級特大地震影響枉疼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜鞋拟,卻給世界環(huán)境...
    茶點故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一骂维、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贺纲,春花似錦航闺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至懈叹,卻和暖如春乖杠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背澄成。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工胧洒, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人墨状。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓卫漫,卻偏偏與公主長得像,于是被迫代替她去往敵國和親肾砂。 傳聞我的和親對象是個殘疾皇子列赎,可洞房花燭夜當晚...
    茶點故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 編譯器 koala 編譯器創(chuàng)建一個 style 文件夾,在其中創(chuàng)建 .less 文件镐确,將文件夾拖入 koala 編...
    _月光臨海閱讀 301評論 0 0
  • 簡介 CSS(層疊樣式表)是一門歷史悠久的標記性語言包吝,同 HTML 一道,被廣泛應用于萬維網(wǎng)(World Wide...
    老夫的天閱讀 1,925評論 1 29
  • 一 在我家樓的對面里,有一個女孩臼氨,一個膽子很小的女孩,女孩子一般都很膽小芭届,這并不奇怪储矩,但是她的膽子就是出乎意料的膽...
    李不通閱讀 1,303評論 4 38
  • [這些是個人關于同理心的總結與思考持隧,僅代表個人觀點即硼,歡迎討論] 如果你連你的用戶都不了解,還怎么去挖掘他們的需求屡拨?...
    阿池范范閱讀 1,211評論 0 4
  • 坐在長夜里 就是坐在書房里 一點螢是一本書 一本書是一個夢 坐在書房里 就是坐在長夜里 坐在長夜里 就是坐在太空里...
    喵喵僧閱讀 398評論 1 5