less

1.less的定義
less是一個CSS預處理器,可以爲網站啓用可自定義,可管理和可重用的樣式表。 做爲 CSS 的一種形式的擴展,它並沒有減少 CSS 的功能,而是在現有的 CSS 語法上,爲CSS加入程序式語言的特性,以便可以通過Web瀏覽器讀取。
它提供諸如變量,函數, mixins 和操作等功能,可以構建動態CSS。

2.特徵
更清晰和更可讀的代碼可以以有組織的方式編寫。
我們可以定義樣式,它可以在整個代碼中重複使用。
less是基於JavaScript的,是超集的CSS。
less是一個敏捷工具,可以排除代碼冗餘的問題。
優點:
less輕鬆地生成可在瀏覽器中工作的CSS。
less使您能夠使用嵌套編寫更乾淨,組織良好的代碼。
less通過使用變量可以更快地實現維護。
less使您能夠通過在規則集中引用它們來輕鬆地重用整個類。
less提供使用操作,使得編碼更快並節省時間。
缺點:
由於模塊之間的緊密耦合,應當採取更多的努力來重用和/或測試依賴模塊。
與舊的預處理器(如Sass)相比,LESS具有較少的框架,Sass由框架 Compass , Gravity和 Susy 組成。
3.less的使用
(1)安裝:
使用Node包管理工具npm全局安裝:

$ npm install -g less

(2)編譯
使用以下命令將 style.less 文件編譯爲 style.css :

lessc style.less style.css

4.語法
(1)嵌套規則
以嵌套的方式編寫層疊樣式,允許將一個類的屬性用於另一個類,並且包含類名作爲其屬性。

例如:

less.html

1 2 3 4 5 6 7 8 9 style.less

.nav{
width:100%;
height:50px;
border-bottom:1px solid #ccc;

span{
    float: left;
    color:#ccc;
    font-size: 12px;
}

ul{
    text-align: center;
    list-style:none;
    font-size:17px;

    li{
        float: left;
        width:22%;
        line-height:36px;
            a{
                text-decoration: none;
                color:#000;

                &:hover{ color:#FBA800; }
            }
    }
}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
轉換後的css->style.css:

.nav{
width:100%;
height:50px;
border-bottom:1px solid #ccc;
}
.nav span{
float: left;
color:#ccc;
font-size: 12px;
}
.nav ul{
text-align: center;
list-style:none;
font-size:17px;
}
.nav ul li{
float: left;
width:22%;
line-height:36px;
}
.nav ul li a{
text-decoration: none;
color:#000;
}
.nav ul li a:hover{
color:#FBA800;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
其中&用於寫串聯選擇器,而不是寫後代選擇器,對僞類比較有用,如:hover和:focus等。

串聯選擇器:作用在同一個標籤上 .
後代選擇器:作用在不同標籤上 .

例如:
less:

#navclass {
&.nav {
background:#fff;
}
.logoclass{
color:#ccc;
}
}
1
2
3
4
5
6
7
8
相當於:

#navclass.nav{ /此處沒有空格/
background:#fff;
}
#navclass .logoclass{ /此處有空格/
color:#ccc;
}
1
2
3
4
5
6
(2)變量
可以將屬性的值賦值給一個變量,變量爲完全的 “常量” ,所以只能定義一次。less定義變量用@開頭。

例如:
less:

@nice-blue: #5B83AD;
@light-blue: @nice-blue + #111;
li{
float: left;
width:22%;
line-height:36px;
a{
text-decoration: none;
color:@nice-blue;

        &:hover{ color:@light-blue; }
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
轉換後css:

li a{
text-decoration: none;
color:#5B83AD;
}
li a:hover{
color:#6c94be;
}
1
2
3
4
5
6
7
當然,這裏還可以定義別的變量,如果樣式表中有大量相同的樣式,都能將其定義爲一個變量,這樣將來對該樣式更改時,只需更改變量的值即可。

(3)混合
混合類似於編程語言中的函數。 Mixins是一組CSS屬性,允許您將一個類的屬性用於另一個類,並且包含類名作爲其屬性。 在less中,可以使用class或id選擇器以與CSS樣式相同的方式聲明mixin。 它可以存儲多個值,並且可以在必要時在代碼中重複使用。

例如:
less:

.xiangtong {
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
.menu a {
color: #111;
.bordered;
}
.post a {
color: red;
.bordered;
}
1
2
3
4
5
6
7
8
9
10
11
12
相當於css:

.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;
}
1
2
3
4
5
6
7
8
9
10
(4)帶參數混合
可以像函數一樣定義一個帶參數的屬性集合,

例如:
less:

.border-radius (@radius) {
border-radius: @radius;
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
}
img {
.border-radius(4px);
}
.button {
.border-radius(6px);
}
1
2
3
4
5
6
7
8
9
10
11
還可以給參數設置默認值

.border-radius (@radius: 5px) {
border-radius: @radius;
-moz-border-radius: @radius;
-webkit-border-radius: @radius;
}
img {
.border-radius;
}
1
2
3
4
5
6
7
8
或者可以定義不帶參數屬性集合,用於隱藏這個屬性集合,不讓它暴露到CSS中去

.wrap () {
text-wrap: wrap;
white-space: pre-wrap;
white-space: -moz-pre-wrap;
word-wrap: break-word;
}

pre { .wrap }
1
2
3
4
5
6
7
8
使用@arguments,其包含了所有傳遞進來的參數,不必單獨處理每一個參數

.box-shadow (@x: 0, @y: 0, @blur: 1px, @color: #000) {
box-shadow: @arguments;
-moz-box-shadow: @arguments;
-webkit-box-shadow: @arguments;
}
.box-shadow(2px, 5px);
1
2
3
4
5
6
(5)模式匹配
根據傳入的參數來改變混合的默認呈現

例如:

//讓.mixin根據不同的@switch值而表現各異
.mixin (dark, @color) {
color: darken(@color, 10%);
}
.mixin (light, @color) {
color: lighten(@color, 10%);
}
.mixin (@_, @color) {
display: block;
}

//運行
@switch: light;

.class {
.mixin(@switch, #888);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
也可以匹配多個參數

.mixin (@a) {
color: @a;
}
.mixin (@a, @b) {
color: fade(@a, @b);
}
1
2
3
4
5
6
(6)表達式
根據表達式進行匹配,而非根據值和參數匹配

例如:

.mixin (@a) when (lightness(@a) >= 50%) {
background-color: black;
}
.mixin (@a) when (lightness(@a) < 50%) {
background-color: white;
}
.mixin (@a) {
color: @a;
}

//運行
.class1 { .mixin(#ddd) }
.class2 { .mixin(#555) }
1
2
3
4
5
6
7
8
9
10
11
12
13
其就相當於css的:

.class1 {
background-color: black;
color: #ddd;
}
.class2 {
background-color: white;
color: #555;
}
1
2
3
4
5
6
7
8
導引中可用的全部比較運算有: > >= = =< <。此外,關鍵字true只表示布爾真值,除去關鍵字true以外的值都被視示布爾假

.truth (@a) when (@a) { … }
.truth (@a) when (@a = true) { … }
1
2
導引序列使用逗號‘,’分割,當所有條件都符合時,纔會被視爲匹配成功

.mixin (@a) when (@a > 10), (@a < -10) { … }
1
導引可以無參數,也可以對參數進行比較運算

@media: mobile;

.mixin (@a) when (@media = mobile) { … }
.mixin (@a) when (@media = desktop) { … }

.max (@a, @b) when (@a > @b) { width: @a }
.max (@a, @b) when (@a < @b) { width: @b }
1
2
3
4
5
6
7
(7)運算
任何數字、顏色或者變量都可以參與運算,less運算能夠分辨出顏色和單位

例如:
less:

@b: 5%;
@f: @b * 2;
@o: @b + @f;
@var: 1px + 5; //less會輸出6px

color:{ #888 / 4};
background-color:{ @b-color + #111};
height: {100% / 2 + @f};
width: (@var + 5) * 2;
border: (@width * 2) solid black;
1
2
3
4
5
6
7
8
9
10
(8)Color 函數
less提供了一系列的顏色運算函數. 顏色會先被轉化成 HSL色彩空間, 然後在通道級別操作

lighten(@color, 10%); // 返回一個比@color低10%更輕的顏色

darken(@color, 10%); // 返回一個比@color高10%較暗的顏色

saturate(@color, 10%); // 返回比@color多飽和度10%的顏色
desaturate(@color, 10%); // 返回一個比@color少飽和度10%的顏色

fadein(@color, 10%); // 返回一個比@color少10%透明度的顏色
fadeout(@color, 10%); // 返回一個比@color多10%透明度的顏色
fade(@color, 50%); // 返回一個顏色透明度爲50%的顏色

spin(@color, 10); // 返回色調比@color大10度的顏色

spin(@color, -10); // 返回一個比@color小10度色調的顏色

mix(@color1, @color2); // 返回一個混合@ color1和@ color2的顏色
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
例如:

@b: #f04615;

.class {
color: saturate(@b, 5%);
background-color: lighten(spin(@b, 8), 25%);
}
1
2
3
4
5
6
或者提取顏色信息

hue(@color);
saturation(@color);
lightness(@color);
1
2
3
(9)Math 函數
less提供了一組方便的數學函數,可以使用它們處理一些數字類型的值

round(1.67); // 返回2
ceil(2.4); // 返回3
floor(2.6); // 返回2
percentage(0.5); // 返回50%
1
2
3
4
(10)命名空間
爲了更好組織CSS或者單純是爲了更好的封裝,將一些變量或者混合模塊打包起來

例如:

.menu {
.button () {
display: block;
border: 1px solid black;
background-color: grey;
&:hover { background-color: white }
}
.tab { … }
.citation { … }
}
1
2
3
4
5
6
7
8
9
10
使用:

.header a {
color: orange;
.menu > .button;
}
1
2
3
4
(11)作用域
less中的作用域跟其他編程語言非常類似,首先會從本地查找變量或者混合模塊,如果沒找到的話會去父級作用域中查找,直到找到爲止

@var: red;

#page {
@var: white;
#header {
color: @var; // white
}
}

#footer {
color: @var; // red
}
1
2
3
4
5
6
7
8
9
10
11
12
(12)註釋
CSS形式的註釋在less中是依然保留,less同樣也支持雙斜線的註釋, 但是編譯成 CSS 的時候自動過濾掉

例如:

/* Hello, I’m a CSS-style comment */
.class { color: black }

// Hi, I’m a silent comment, I won’t show up in your CSS
.class { color: white }
1
2
3
4
5
編譯後:

.class { color: black }
.class { color: white }
1
2
(13)Importing
可以在主文件中通過下面的形勢引入 .less 文件, .less 後綴可帶可不帶

@import “lib.less”;
@import “lib”;
1
2
如果想導入一個CSS文件而且不想less對它進行處理,只需要使用.css後綴就可以,這樣less就會跳過它不去處理它

@import “lib.css”;

作者:黛梨
來源:CSDN
原文:https://blog.csdn.net/pedrojuliet/article/details/81873002
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章