动态CSS - LESS学习总结
生活随笔
收集整理的這篇文章主要介紹了
动态CSS - LESS学习总结
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
動態的 css——less
http://www.cnblogs.com/yjzhu/archive/2012/11/14/2770332.htmlless 是一種樣式語言,它將 css 賦予了動態語言的特性,如變量、 繼承、 運算、 函數。less 既可以在客戶端上運行(支持 ie6+,webkit,firefox),也可以借助 Node.js 或者 Rhino 在服務端運行。
less 做為 css 的一種形式的擴展,它并沒有閹割 css 的功能,而是在現有的 css 語法上,添加了很多額外的功能,所以對于前端開發人員來所,學習 less 是一件輕而易舉的事情。我們先看下用 less 寫的一段 css:
@base: #f938ab;.box-shadow(@style, @c) when (iscolor(@c)) {box-shadow: @style @c;-webkit-box-shadow: @style @c;-moz-box-shadow: @style @c; } .box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) {.box-shadow(@style, rgba(0, 0, 0, @alpha)); } .box { color: saturate(@base, 5%);border-color: lighten(@base, 30%);div { .box-shadow(0 0 5px, 30%) } }
在沒有學過 less 的情況下,我們并不知道這些代碼是做啥用的,怎么生成我們所熟悉的 css 代碼,以上代碼經過 less 編譯后:
.box {color: #fe33ac;border-color: #fdcdea; } .box div {box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);-webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);-moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); }
下面我們就一起來學習 less 吧。
我們知道如果要使用 jquery 就必須在頁面上引進 jquery 庫,同樣的在使用 less 編寫 css 代碼時,也要引進 less 庫——less.js。點擊這里下載 less 庫。
下載好后只要在頁面中引入就可以了。
<link rel="stylesheet/less" type="text/css" href="style.less" media="all" />
<script type="text/javascript" src="less.js"></script>
要注意外部引進樣式的方法有所改變,rel 屬性值為 stylesheet/less,樣式的后綴變為 .less 同時 less 樣式文件一定要在 less.js 前先引入。
引入了 less 之后,正式開始學習 less。
less 語法
1、變量
less 的變量充許你在樣式中對常用的屬性值進行定義,然后應用到樣式中,這樣只要改變變量的值就可以改變全局的效果。和 javascript 中的全局變量有點類似。甚至可以用變量名定義為變量。
@color: red; @foot: 'color';.head{color: @color; }.foot{color: @@foot; }
輸出:
.head {color: red; } .foot {color: red; }
注意 less 中的變量為完全的“常量”,所以只能定義一次。
2、混合
混合就是定義一個 class,然后在其他 class 中調用這個 class。
.common{color: red; }.nav{background: #ccc;.common; }
輸出:
.common {color: red; } .nav {background: #ccc;color: red; }
Css 中的 class, id 或者元素屬性集都可以用同樣的方式引入。
3、帶參數混合
在 less 中,你可以把 class 當做是函數,而函數是可以帶參數的。
.border-radius (@radius) {
? ? border-radius: @radius;
? ? -moz-border-radius: @radius;
? ? -webkit-border-radius: @radius;
}
#header {
? ? .border-radius(4px);
}
.button {
? ? .border-radius(6px); ?
}
最后輸出:
#header {
? ? border-radius: 4px;
? ? -moz-border-radius: 4px;
? ? -webkit-border-radius: 4px;
}
.button {
? ? border-radius: 6px;
? ? -moz-border-radius: 6px;
? ? -webkit-border-radius: 6px;
}
我們還可以給參數設置默認值:
.border-radius (@radius: 5px) {
? ? border-radius: @radius;
? ? -moz-border-radius: @radius;
? ? -webkit-border-radius: @radius;
}
#header {
? ? .border-radius; ?
}
最后輸出:
#header {
? ? border-radius: 5px;
? ? -moz-border-radius: 5px;
? ? -webkit-border-radius: 5px;
}
也可以定義不帶參數屬性集合,如果想要隱藏這個屬性集合,不讓它暴露到CSS中去,但是還想在其他的屬性集合中引用,就會發現這個方法非常的好用:
.wrap () {
? ? text-wrap: wrap;
? ? white-space: pre-wrap;
? ? white-space: -moz-pre-wrap;
? ? word-wrap: break-word;
}
pre {
? ? .wrap?
}
輸出:
pre {
? ? text-wrap: wrap;
? ? white-space: pre-wrap;
? ? white-space: -moz-pre-wrap;
? ? word-wrap: break-word;
}
混合還有個重要的變量@arguments。
@arguments 包含了所有傳遞進來的參數,當你不想處理個別的參數時,這個將很有用。
.border(@width:0,@style:solid,@color:red){
? ? border:@arguments;
}
.demo{
? ? .border(2px);
}
輸出:
.demo {
? ? border: 2px solid #ff0000;
}
混合還有許多高級的應用,如模式匹配等。在這里就不介紹了,只講些基礎的東西。
4、嵌套規則
less 可以讓我們用嵌套的方式來寫 css。下面是我們平時寫的 css:
#header h1 {
? ? font-size: 26px;
? ? font-weight: bold;
}
#header p {
? ? font-size: 12px;
}
#header p a {
? ? text-decoration: none;
}
#header p a:hover {
? ? border-width: 1px;
}
用 less 我們就可以這樣寫:
#header {
? ? h1 {
? ? ? ? font-size: 26px;
? ? ? ? font-weight: bold;
? ? }
? ? p {
? ? ? ? font-size: 12px;
? ? ? ? a {
? ? ? ? ? ? text-decoration: none;
? ? ? ? ? ? &:hover { border-width: 1px }
? ? ? ? }
? ? }
}
注意 & 符號的使用—如果你想寫串聯選擇器,而不是寫后代選擇器,就可以用到 & 了。這點對偽類尤其有用如 :hover。
5、運算
任何數字、顏色或者變量都可以參與運算。.demo{
? ? color: #888 / 4;
}
輸出:
.demo {
? ? color: #222222;
}
less 完全可以進行復雜四則運算,同樣的復合運算也沒有問題。
6、Color 函數
less 提供了一系列的顏色運算函數。顏色會先被轉化成 HSL 色彩空間,然后在通道級別操作。
復制代碼
lighten(@color, 10%); ? ? // return a color which is 10% *lighter* than @color
darken(@color, 10%); ? ? ?// return a color which is 10% *darker* than @color
saturate(@color, 10%); ? ?// return a color 10% *more* saturated than @color
desaturate(@color, 10%); ?// return a color 10% *less* saturated than @color
fadein(@color, 10%); ? ? ?// return a color 10% *less* transparent than @color
fadeout(@color, 10%); ? ? // return a color 10% *more* transparent than @color
fade(@color, 50%); ? ? ? ?// return @color with 50% transparency
spin(@color, 10); ? ? ? ? // return a color with a 10 degree larger in hue than @color
spin(@color, -10); ? ? ? ?// return a color with a 10 degree smaller hue than @color
mix(@color1, @color2); ? ?// return a mix of @color1 and @color2
復制代碼
使用起來相當簡單:
復制代碼
@base: #f04615;
.class {
? ? color: saturate(@base, 5%);
? ? background-color: lighten(spin(@base, 8), 25%);
}
復制代碼
還可以提取顏色信息:
hue(@color); ? ? ? ?// returns the `hue` channel of @color
saturation(@color); // returns the `saturation` channel of @color
lightness(@color); ?// returns the 'lightness' channel of @color
例如:
@color: #f36;
#header {
? ? background-color: hsl(hue(@color),45%,90%);
}
輸出:
#header {
? ? background-color: #f1dae0;
}
7、Math 函數
less 提供了一組方便的數學函數,你可以使用它們處理一些數字類型的值。
round(1.67); // returns 2
ceil(2.4); ? // returns 3
floor(2.6); ?// returns 2
如果你想將一個值轉化為百分比,你可以使用 percentage 函數:
percentage(0.5); // returns 50%
8、命名空間
有時候,你可能為了更好組織 css 或者單純是為了更好的封裝,將一些變量或者混合模塊打包起來,你可以像下面這樣在 #form 中定義一些屬性集之后可以重復使用:
#form {
? ? .submit () {
? ? ? ? display: block;
? ? ? ? border: 1px solid black;
? ? ? ? background: gray;
? ? ? ? &:hover { background: green }
? ? }
? ? .register { ... }
? ? .login { ... }
}
你只需要在 #myform 中像這樣引入 .submit:
#myform {
? ? color: orange;
? ? #form > .submit;
}
9、作用域
和其他編程語言類似,less 變量也有作用域。首先會從本地查找變量或者混合模塊,如果沒找到的話會去父級作用域中查找,直到找到為止。
復制代碼
@var: red;
#page {
? ? @var: white;
? ? #header {
? ? ? ? color: @var; // white
? ? }
}
#footer {
? ? color: @var; // red ?
}
10、注釋
css 形式的注釋在 less 中是依然保留的,同時 less 也支持雙斜線的注釋,但是編譯成 css 的時候自動過濾掉。
最后 less 還有一些其他的特性就不介紹了,大家可以去官網上看下。
http://www.lesscss.net/
總結
以上是生活随笔為你收集整理的动态CSS - LESS学习总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC++网络资源集合
- 下一篇: Perl学习总结