Less与Sass解析
首先我们要明确一个观点,尽管Less和Sass语法上有一些共性,但是Less !== Sass。当我们构建一个网站的时候,
我们可能会需要调色板这个功能,即拥有提供固定的可选择样式,避免样式跳跃过大。这个时候我们就用到了Less和Sass,
事实证明,他们的功能要比这个多得多。
Less 和 Sass 语法共性
1.混入(Minxins)—— class中的class
2.参数混入 —— 可以传递参数的class
3.嵌套规则 —— Class中嵌套class,从而较少重复的代码
4.运算 —— CSS中用上数学
5.颜色功能 —— 可编辑颜色
6.命名空间(namespace) —— 分组样式
7.作用域 —— 局部修改样式
8.JavaScript赋值 - 在CSS中使用JavaScript表达式赋值
Less和Sass的主要不同就是他们的实现方式,Less是基于JavaScript,所以是在客户端处理。而
Sass是基于Ruby在服务器端处理的。很多开发者不会选择Less因为JavaScript引擎需要额外的时
间来处理代码然后输出修改过的CSS到浏览器。关于这个有很多种方式,我选择的是只在开发环节使用
LESS,一旦我完成开发,就复制然后粘贴Less输出的到一个压缩器,然后到一个独立的CSS文件来替代
Less文件。另外,我选择使用LESS.app来编译和压缩Less文件。两个选择都将最小化你的样式输出,
从而避免由于用户的浏览器不支持JavaScript而可能引起的任何问题。
Less Is More
Sass 安装
安装
如果已经安装好了Ruby,接着在命令行下输入
gem install sass |
使用
将Sass文件(.sass)转化为css
代码
sass test.scss |
如果要将显示结果保存成未见,后面再跟一个.css
文件名
sass test.scss test.css |
Sass 提供四个编译风格选项:
1.nested : 嵌套缩进的css代码,他是默认值
2.expanded : 没有缩进的、拓展css代码
3.compact : 简洁格式的css代码
4.compressed : 压缩后的css代码
在生产环境当中,一般使用最后一个选项
sass –style compressed test.sass test.css
也可以让sass监听某人文件或目录,一旦源文件有变化,就自动生成编译后的文件 //watch a filter
sass --watch input.scss:output.css
//watch a directory
sass --watch app/sass:public/stylesheets
```
# Less 安装
在项目中引入less.js
1.下载less.js
2.创建一个文件来存放Less代码,如style.less
3.添加以下代码到你的HTML的<head>中
```HTML
<link rel="stylesheet/less" type="text/css" href="styles.less">
<script src="less.js" type="text/javascript"></script>
其实也有一个服务器端的less版本,在服务器上安装Less的最简单的办法就是使用Node PackageMessager (NPM 一看 就知道是基于NodeJS的)
相同和不同
变量
If you are developer,variables will be your best friend
我们可以将能重复使用到的值(本案例里是color)设置成变量,这样就可以避免重复的定义,减少很大的工作量
@blue : #00c; |
他们看起来:
关于变量 Less和Sass的唯一区别就是 Less使用@
而 Sass 使用$
.同时还有一些作用域上的差别,我们之后会提到
混入(mixin)
有些时候我们会创建一些在样式表中重复使用的样式规则,通常会使用<div class="border article"></div>
这种方式引用多种样式,但是有了less 我们可以
.border{ |
下面是在两个元素中分别添加.border
同样的效果,而且仅仅在样式变中就完成了
在Sass中,我们需要在样式规则前添加@minxin
声明,然后通过@include
来调用它
@mixin border { |
参数混入
使用Less或Sass,我们可以使用函数处理Css中多余的工作。最好的例子就是我们正在经历的从Css2到css3的过渡过程中很多浏览器的私有前缀。Nettuts+有一篇Jeffrey Way写的文章
内容是包含参数的文件,他们可以附带大多数浏览器私有前缀Css3属性
.border-radius( @radius:3px ){ |
Sess的语法很像Less,只是只用$声明变量,然后使用前面提到的@minxin
和 @include
来调用
选择器继承
Less并没有提供这个功能,通过这个功能,你可以讲一个选择器附加到已经预先定义的选择器上,而无需在使用逗号
将两者分开:
.menu { |
嵌套规则
在Css中嵌套Class和ID是避免你的样式干扰或者被别的样式干扰的唯一方法,但这样会非常凌乱。使用一个类似于#site-body.post.postheader h2
的选择器毫无吸引力,使用Less,你可以嵌套Id、class及标签:
#site-body{ |
上面的代码最终和上面的例子(长长的选择器)的效果一样,但是更容易阅读和理解
运算
在css中使用数字或变量来实现数学之美
@base_margin: 10px; |
Sass 在对数字的处理上更加专业,让已经可以换算单位了,Sass可以处理无法识别的度量单位并将其输出,这个特性明显是一个对未来的尝试 —— 证明W3C做出的一些改变
/* Sass */ |
Color 函数
在文章开头的时候我们提到了调色板,对此贡献最大的一部分就是颜色函数。加入你用一个标准的蓝色贯穿到你的样式中,然后你想在表单中用这个蓝色来做一个渐变的按钮。你可以打开PS或者其他编辑器来获取一个比蓝色浅的或者比较暗的HFX色值来作为渐变色,或者,你可以使用Less中的颜色函数
@blue: #369; |
lighten函数明显就是用百分比值来减轻颜色,在这个例子中,他将减轻这个基础的蓝色的10%。这种方法可以让我们变阿华的元素或者其他任何元素的颜色值 —— 只是简单的改变基础颜色而已,这对于主题(模板)来说非常有用。而且,如果你使用参数功能,像上面提到的,你还可以更简单的应用到一些浏览器的私有前缀的生命中,如:.linear-gradient(lighten(@blue),@blue,100%)
最终效果的确很赞
Sass 貌似与更多的选项,如果你想了解更多,可以看一些这篇很详细的介绍
条件语句与控制
这的确是一个很好用的功能,也是另一个Less不支持的功能,你可以使用if {} else {} 条件语句,for {} 循环。他甚至支持and、or和not,以及< , > , >= , <= 和 == 等操作符
|
命名空间
命名空间可以有效的组织我们的Css,我们可以将一些公用的样式分组,然后在用的时候直接使用。例如,我们创建了一个名为default的样式分组,那我们就可以在用到的时候直接从该组中调用。
.nav_list() { |
然后,在我们的代码中,如果我们正好在一个nav元素中使用了ul元素,那么我们就会想到我们需要default的样式,然后我们就可以简单的调用它,他就会被直接使用
nav ul {
#defaults > .nav_list;
}
作用域
作用域是编程中的标配,LESS中也是。如果你在你的样式表的root级声明一个变量,他在整个文档中都是可以使用的。然而,如果你在一个选择器,比如ID或者CLASS中,重新定义了这个变量,那么,他就只能在这个选择器中可用了。
@color: #00c; /* 蓝色 */ |
注释
这一部分比较基础,Less允许两种注释的写法//注释
和 /* 注释 */
导入
标准的@import: 'classes.less'
如果你想要引入其他的LESS文件,那么文件的拓展名是可选的,所以@import ‘classes’ ;也是可行的。如果你想要导入一些无需less处理的内容,你可以使用.css后缀
字符串插入
字符串也是可以用于变量中的,然后通过 @{name}
来调用
@base_url: 'http://www.ddd.com' |
转义(Escaping)
我们通常需要引入一个css中非法或者less无法识别的值,通常一些IE的hack,要避免抛出异常并破坏Less,你需要避开他们
.class{ |
Javascript 赋值
在样式表中使用Javascript:
@string: `'howdy'.toUpperCase()`; /* @string 变成 HOWDY */ |
输出格式
然而Less并没有输出设置,而Sass中提供四种选项:nested,compact,compressed 和 expanded
http://blog.jobbole.com/24671/