“我的”Less
LESS 将 CSS 赋予了动态语言的特性,如 变量, 继承, 运算, 函数. LESS 既可以在 客户端 上运行 (支持IE6+, Webkit, Firefox),也可以借助Node.js或者Rhino在服务端运行。 不要想那么多浏览器只认识 CSS 最终使用的也是 CSS,本篇文章主要使用 Node.js来进行编译 Less
使用
在客户端使用
如果你不会Node.js的话,你可以考虑以下工具进行使用
Less.js方式
直接使用.less样式文件可以先引入.less文件
1 | <link rel="stylesheet/less" type="text/css" href="style.less"> |
less.js下载连接 Less.js 引入.less样式文件后,下载less.js,并在标签中引入less.js文件即可!
1 | <script src="less.js" type="text/javascript"></script> |
当然你也可以使用CDN来引用Less.js1
<script src="//cdnjs.cloudflare.com/ajax/libs/less.js/3.7.1/less.min.js" ></script>
Kaola应用程序
koala是一个前端预处理器语言图形编译工具,支持Less、Sass、Compass、CoffeeScript,帮助web开发者更高效地使用它们进行开发。跨平台运行,完美兼容windows、linux、mac。
Kaola下载地址 Kaola 这个就不细说了,直接拖如使用即可…
服务端使用
Node.js
在服务器端安装 LESS 的最简单方式就是通过 npm(node 的包管理器)
1 | npm install less |
在命令行下使用
在终端调用Less解析器
1 | lessc style.less |
当前命令只是解析并返回 如果需要将编译后的CSS保存到一个文件中,需要向下面这样做
1 | lessc style.less > style.css |
当然这样编译后的文件与源文件.less文件在同一个位置,如果你不想这样做,可以在 > 后面同时加上目录,如下:
1 | lessc style.less > ../css/style.css |
如果还想将编译后的CSS压缩掉,加一个 -x 参数就可以了。
他会提示你压缩选项已被废弃。建议您使用专用的css压缩工具,例如:less-plugin-clean-css 当然目前来说,这个还是有用的,至于 less-plugin-clean-css 我就不做更多介绍了,感兴趣的可以直接去研究
这里给个链接供参考:less-plugin-clean-css
语法
LESS 做为 CSS 的一种形式的扩展,它并没有阉割 CSS 的功能,而是在现有的 CSS 语法上,添加了很多额外的功能,所以学习 LESS 是一件轻而易举的事情,果断学习之!
变量
很容易理解,但是Less中的变量很像”常量”,所以只能定义一次!
1 | // 定义变量 |
当然你还可以使用变量名定义为变量
1 | // 定义一个变量 |
混合
在 LESS 中可以定义一些通用的属性集为一个class,然后在另一个class中去调用这些属性
普通混合
定义混合,与普通 class 一样
1 | .bordered { |
现在需要在其他class中引入那些通用的属性集,那么只需要在任何class中像下面这样调用就可以了
1 | div { |
任何 CSS class, id 或者 元素 属性集都可以以同样的方式引入
带参数的混合
在 LESS 中,还可以像函数一样定义一个带参数的属性集合
1 | .border-radius (@radius) { |
然后在其他class中的调用方式
1 | div { |
当然你也可以这样给参数设置默认值
1 | .border-radius (@radius: 10px) { |
调用的时候就可以不用传入参数
1 | div { |
不带参数的混合
想隐藏这个属性集合,不让它暴露到CSS中去,可以定义不带参数属性集合,同时依然可以在其他属性集合中引用
1 | .wrap () { |
@arguments 变量
@arguments包含了所有传递进来的参数,如果你想使用所有变量的话可以这样使用
1 | .btn-border (@size: 1px, @style: solid, @color: black,){ |
模式匹配和引导表达式
匹配
可以定义相同名称的混合,根据传入的参数来改变混合的默认呈现,然后根不同的标识来进行匹配,匹配到的才会被编译
1 | .bg (black){ |
首先会对标识进行匹配,然会在对参数进行匹配,最后在匹配@_ 因为它接收任意值 只有被匹配的混合才会被使用。变量可以匹配任意的传入值,而变量以外的固定值就仅仅匹配与其相等的传入值
引导
想根据表达式进行匹配,而非根据值和参数匹配时,导引就显得非常有用。如果对函数式编程非常熟悉,那么你很可能已经使用过导引。 为了尽可能地保留CSS的可声明性,LESS通过导引混而非if/else语句来实现条件判断,因为前者已在@media query特性中被定义。
when关键字用以定义一个导引序列
1 | .border (@size) when (@size < 5) { |
导引中可用的全部比较运算有: > >= = =< <。此外,关键字true只表示布尔真值,下面两个混合是相同的
1 | .truth (@a) when (@a) { ... } |
除去关键字true以外的值都被视示布尔假 当需要匹配多个条件时,使用逗号‘,’—割,当且仅当所有条件都符合时,才会被视为匹配成功
1 | .border (@size) when (@size >= 5), (@size < 10) { |
导引可以无参数,也可以对参数进行比较运算
1 | .max (@a, @b) when (@a > @b) { width: @a } |
如果想基于值的类型进行匹配,我们就可以使用is* 函式 常见的检测函式:
- iscolor
- isnumber
- isstring
- iskeyword
- isurl
- ispixel
- ispercentage
- isem
1 | .mixin (@a, @b: 0) when (isnumber(@b)) { ... } |
not
使用not关键字实现或条件
1 | .mixin (@b) when not (@b > 0) { ... } |
&
注意 & 符号的使用—如果你想写串联选择器,而不是写后代选择器,就可以用到&了. 这点对伪类尤其有用如:hover 和 :focus.
1 | div{ |
运算
任何数字、颜色或者变量都可以参与运算,它能够分辨出颜色和单位,括号也同样允许使用
1 | @var: 1px + 5; |
函数
Color 函数
- 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%); // 返回@color 透明的为50%的颜色
// (spin不是很懂,哈哈!) - spin(@color, 10); // 返回比@color大10度的颜色
- spin(@color, -10); // 返回比@color小10度的颜色
- mix(@color1, @color2); // 返回两种颜色的混合色
- hue(@color); // 返回@color 的色调
- saturation(@color); // 返回@color 的饱和度
- lightness(@color); // 返回@color 的亮度
- hsl(色调, 饱和度, 亮度); // 返回一个新的颜色
Math 函数
- round(1.67); // returns 2
- ceil(2.4); // returns 3
- floor(2.6); // returns 2 percentage(0.5); // 将一个值转化为百分百
其它
作用域
LESS 中的作用域跟其他编程语言非常类似,首先会从本地查找变量或者混合模块,如果没找到的话会去父级作用域中查找,直到找到为止.
1 | @color: red; |
注释
CSS 形式的注释在 LESS 中是依然保留的,LESS 同样也支持双斜线的注释, 但是编译成 CSS 的时候自动过滤掉
1 | /* 我是注释 */ |
Import
可以在任意.less文件中通过下面的形势引入(一般在index.less 或 main.less) .less 文件, .less 后缀可带可不带,如果想导入一个CSS文件而且不想LESS对它进行处理,只需要使用.css后缀就可以,这样LESS就会跳过它不去处理它
1 | @import "lib.less"; |
字符串插值
变量可以用类似ruby和php的方式嵌入到字符串中,像@{name}这样的结构
1 | @base-url: "http://assets.fnord.com"; |
避免编译
有时候需要输出一些不正确的CSS语法或者使用一些 LESS不认识的专有语法. 要输出这样的值可以在字符串前加上一个 ~ ,将要避免编译的值用””包含起来
1 | .class { |
JavaScript 表达式
JavaScript 表达式也可以在.less 文件中使用. 可以通过反引号的方式使用,也可以同时使用字符串插值和避免编译,也可以访问JavaScript环境
1 | @var: `"hello".toUpperCase() + '!'`; |
1 | @str: "hello"; |
1 | @height: `document.body.clientHeight`; |
想将一个JavaScript字符串解析成16进制的颜色值, 可以使用 color 函数
1 | @color: color(`window.colors.baseColor`); |
声明
本篇文章由个人学习后的总结,意为“笔记”。
本文原创,转载请标注出处,谢谢!