多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 一、概述 less是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,使 CSS 更易维护和扩展。 Less 可以运行在 Node 或浏览器端。 ## 二、安装 ``` $ npm install -g less ``` ## 三、语言特性 1、变量支持,也就是样式可以用变量: ```css @nice-blue: #5B83AD; @light-blue: @nice-blue + #111; #header { color: @light-blue; } ``` 输出: ```css #header { color: #6c94be; } ``` 2、混入支持,也就是说可以在样式中嵌套混入已经定义的样式: ```css .bordered { border-top: dotted 1px black; border-bottom: solid 2px black; } ``` ```css #menu a { color: #111; .bordered; } .post a { color: red; .bordered; } ``` 3、嵌套 ```css #header { color: black; .navigation { font-size: 12px; } .logo { width: 300px; } } ``` ```css #header { color: black; } #header .navigation { font-size: 12px; } #header .logo { width: 300px; } ``` @规则嵌套和冒泡 ```css .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; } } ``` 输出: ```css .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; } } ``` 4、运算 算术运算符 +、-、*、/ 可以对任何数字、颜色或变量进行运算。如果可能的话,算术运算符在加、减或比较之前会进行单位换算。计算的结果以最左侧操作数的单位类型为准。如果单位换算无效或失去意义,则忽略单位。无效的单位换算例如:px 到 cm 或 rad 到 % 的转换。 ```css // 所有操作数被转换成相同的单位 @conversion-1: 5cm + 10mm; // 结果是 6cm @conversion-2: 2 - 3cm - 5mm; // 结果是 -1.5cm // conversion is impossible @incompatible-units: 2 + 5px - 3cm; // 结果是 4px // example with variables @base: 5%; @filler: @base * 2; // 结果是 10% @other: @base + @filler; // 结果是 15% @base: 2cm * 3mm; // 结果是 6cm @color: #224488 / 2; //结果是 #112244 background-color: #112244 + #111; // 结果是 #223355 ``` 5、转义 转义(Escaping)允许你使用任意字符串作为属性或变量值。任何 ~"anything" 或 ~'anything' 形式的内容都将按原样输出,除非 interpolation。 ```css @min768: ~"(min-width: 768px)"; .element { @media @min768 { font-size: 1.2rem; } } ``` 输出: ```css @media (min-width: 768px) { .element { font-size: 1.2rem; } } ``` 6、函数 Less 内置了多种函数用于转换颜色、处理字符串、算术运算等。 函数的用法非常简单。 ```css @base: #f04615; @width: 0.5; .class { width: percentage(@width); // returns `50%` color: saturate(@base, 5%); background-color: spin(lighten(@base, 25%), 8); } ``` 7、命名空间和访问符 有时,出于组织结构或仅仅是为了提供一些封装的目的,你希望对混合(mixins)进行分组。你可以用 Less 更直观地实现这一需求。假设你希望将一些混合(mixins)和变量置于 #bundle 之下,为了以后方便重用或分发: ```css #bundle() { .button { display: block; border: 1px solid black; background-color: grey; &:hover { background-color: white; } } .tab { ... } .citation { ... } } ``` ```css #header a { color: orange; #bundle.button(); // 还可以书写为 #bundle > .button 形式 } ``` 8、映射 可以将混合(mixins)和规则集(rulesets)作为一组值的映射(map)使用; ```css #colors() { primary: blue; secondary: green; } .button { color: #colors[primary]; border: 1px solid #colors[secondary]; } ``` 输出: ```css .button { color: blue; border: 1px solid green; } ``` 9、作用域 Less 中的作用域与 CSS 中的作用域非常类似。首先在本地查找变量和混合(mixins),如果找不到,则从“父”级作用域继承。 下面两段代码效果一样,就是变量的作用域起的作用了; ```css @var: red; #page { @var: white; #header { color: @var; // white } } ``` ```css @var: red; #page { #header { color: @var; // white } @var: white; } ``` 10、导入 “导入”的工作方式和你预期的一样。你可以导入一个 .less 文件,此文件中的所有变量就可以全部使用了。如果导入的文件是 .less 扩展名,则可以将扩展名省略掉: ```css @import "library"; // library.less @import "typo.css"; ``` ## 四、动态修改样式 less允许通过函数实现运行时修改样式,less文件将自动编译,很多动态换肤功能用这个特性得以实现; ```js less.modifyVars({ '@buttonFace': '#5B83AD', '@buttonText': '#D9EEF2' }); ```