該系列:
其他待更新...
less是css的擴充套件,能通過特殊的語法寫樣式,然後自帶工具編譯為瀏覽器所能識別的css,下面是其一些基本用法,一般開發只需用到這些功能。
變數
@符號宣告和引用,可寫成表示式的形式
@width: 10px;
@height: @width + 10px;
#header {
width: @width;
height: @height;
}
複製程式碼
編譯為
#header {
width: 10px;
height: 20px;
}
複製程式碼
混入(MIXINS)
minxins能夠把一串樣式規則封裝起來,方便複用
.bordered {
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
#menu a {
color: #111;
.bordered();
}
.post a {
color: red;
.bordered();
}
複製程式碼
編譯後
.bordered {
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
#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;
}
複製程式碼
注意不是非得類選擇器(我看很多例子都用類選擇器),也可以用id選擇器
#ids{
color:red;
}
複製程式碼
巢狀
當css選擇器存在父子關係時,可以像下面這樣書寫
#header {
color: black;
.navigation {
font-size: 12px;
}
.logo {
width: 300px;
}
}
複製程式碼
編譯為
#header {
color: black;
}
#header .navigation {
font-size: 12px;
}
#header .logo {
width: 300px;
}
複製程式碼
注意&在巢狀裡表示所有祖先選擇器,下面是個清除浮動的例子
.clearfix {
display: block;
zoom: 1;
&:after {
content: " ";
display: block;
font-size: 0;
height: 0;
clear: both;
visibility: hidden;
}
}
複製程式碼
當遇到樣式表規則比如@media或@supports時,他會冒泡尋找規則
.component {
width: 300px;
@media (min-width: 768px) {
width: 600px;
@media (min-resolution: 192dpi) {
background-image: url(/img/retina2x.png);
}
}
@media (min-width: 1280px) {
width: 800px;
}
}
複製程式碼
編譯成
.component {
width: 300px;
}
@media (min-width: 768px) {
.component {
width: 600px;
}
}
@media (min-width: 768px) and (min-resolution: 192dpi) {
.component {
background-image: url(/img/retina2x.png);
}
}
@media (min-width: 1280px) {
.component {
width: 800px;
}
}
複製程式碼
操作符
+
, -
, *
, /
能用在數字,顏色,變數操作上,以最左邊出現的單位為主,如果單位轉換不了,無視右邊單位,*和/單位無效
// 能夠轉換成同一單位
@conversion-1: 5cm + 10mm; // result is 6cm
@conversion-2: 2 - 3cm - 5mm; // result is -1.5cm
// px和cm轉換不了,以px為單位,計算(2+5-3)
@incompatible-units: 2 + 5px - 3cm; // result is 4px
// example with variables
@base: 5%;
@filler: @base * 2; // result is 10%
@other: @base + @filler; // result is 15%
//*和/對單位沒有意義
@base: 2cm * 3mm; // result is 6cm
@color: #224488 / 2; //results in #112244
background-color: #112244 + #111; // result is #223355
複製程式碼
calc(v3.0.0)
由於操作符的特性,導致直接在less在3.0版本下使用calc計算表示式會出現意向不到的現象
width: calc(50% + (25vh - 20px)); // result is calc(55%)
複製程式碼
不過3.0版本就修復了這個問題,calc裡的表示式編譯會保持原樣,變數會被替換
@var: 50vh/2;
width: calc(50% + (@var - 20px)); // result is calc(50% + (25vh - 20px))
複製程式碼
Escaping(轉義)
當我們需要使用一個固定的值時,可以使用~“anything”或~‘anything’,比如上面的calc出現的問題就可以這樣解決
@var: 50vh/2;
width: calc(~"50% + (@{var} - 20px)"); // result is calc(50% + (25vh - 20px))
複製程式碼
方法
less內建了很多方法
@base: #f04615;
@width: 0.5;
.class {
width: percentage(@width); // 百分比 returns `50%`
color: saturate(@base, 5%);
background-color: spin(lighten(@base, 25%), 8);
}
複製程式碼
Namespaces and Accessors
namespace類似mixin,是為了更好封裝css,不會再像mixin一樣在編譯後出現
#bundle() {
.button {
display: block;
border: 1px solid black;
background-color: grey;
&:hover {
background-color: white;
}
}
.tab { ... }
.citation { ... }
}
#header a {
color: orange;
#bundle.button(); // can also be written as #bundle > .button
}
複製程式碼
編譯為
#header a {
color: orange;
display: block;
border: 1px solid black;
background-color: grey;
}
#header a:hover{
background-color: white;
}
複製程式碼
注意namespace的(),不寫的或就會在編譯中出現
Map(v3.5.0)
#colors() {
primary: blue;
secondary: green;
}
.button {
color: #colors[primary];
border: 1px solid #colors[secondary];
}
複製程式碼
編譯成
.button {
color: blue;
border: 1px solid green;
}
複製程式碼
作用域
@var: red;
#page {
@var: white;
#header {
color: @var; // white
}
}
複製程式碼
從內向外找,具有變數提升
@var: red;
#page {
#header {
color: @var; // white
}
@var: white;
}
複製程式碼
註釋
/* One heck of a block
* style comment! */
@var: red;
// Get in line!
@var: white;
複製程式碼
匯入
匯入的檔案包含的變數可以正常範圍,預設字尾是less
@import "library"; // library.less
@import "typo.css";
複製程式碼