发表于: 2017-03-10 19:48:53

1 1192


Task11sass、less是什么?如何使用?

1.背景介绍

导语:学过CSS的人都知道,它不是一种编程语言。你可以用它开发网页样式,但是没法用它编程。也就是说,CSS基本上是设计师的工具,不是程序员的工具。在程序员眼里,CSS是一件很麻烦的东西。它没有变量,也没有条件语句,只是一行行单纯的描述,写起来相当费事。

很自然地,有人就开始为CSS加入编程元素,这被叫做"CSS预处理器"css preprocessor)。通俗来讲:CSS预处理器用一种专门的编程语言,进行Web页面样式的设计,然后再编译成正常的CSS文件,以供项目使用。CSS预处理器为CSS增加一些编程的特性,无需考虑浏览器的兼容性问题.

2.知识剖析

2.1 LESS是什么?

根据维基百科上的介绍,其实 LESS 是 Alexis Sellier 受 SASS 的影响创建的开源项目。当时 SASS 采用了缩进作为分隔符来区分代码块,而不是 CSS 中广为使用的括号。为了让 CSS 现有用户使用起来更为方便,Alexis 开发了 LESS 并提供了类似的功能。在一开始,LESS 的解释器也同样是由 Ruby 编写,后来才转而采用了 JavaScript. LESS 代码既可以运行在客户端,也可以运行在服务器端。在客户端只要把 LESS 代码和相应的 JavaScript 解释器在同一页面引用即可;而在服务器端,LESS 可以运行在 Node.js 上,也可以运行在 Rhino 这样的 JavaScript 引擎上。

2.2如何使用LESS?

LESS语法

LESS 做为 CSS 的一种形式的扩展,它并没有减少 CSS 的功能,而是在现有的 CSS 语法之上,添加了许多其它的功能,在语法方面,LESS与CSS较为接近,一个合法的CSS代码段本身也是一段合法的LESS代码段。LESS提供变量、嵌套、混合、操作符、函数等一般编程所需的抽象机制。

LESS 拥有四大特性:变量、混入、嵌套、函数。

     详见Demo1中less代码:

https://github.com/ptteng/PPT/blob/master/demo/css-08-lessAndSass/demo1.less

LESS 还拥有一些很有趣的特性有助于我们的开发,例如模式匹配、条件表达式、命名空间和作用域,以及 JavaScript 赋值等等。

具体参考:

https://www.ibm.com/developerworks/cn/web/1207_shenyi_lesscss/

http://www.w3cplus.com/css/less

http://less.bootcss.com/

可以了解下:

值得参考的 10 个 LESS CSS 实例-

https://www.oschina.net/question/12_46118

2.3 SASS是什么?

SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护。

2.4如何使用SASS?

详见Demo2中sass代码:

https://github.com/ptteng/PPT/blob/master/demo/css-08-lessAndSass/demo2.scss

更多的用法例如条件语句等参看下面链接:

http://www.w3cplus.com/css/an-introduction-to-less-and-comparison-to-sass.html

3.常见问题

less和sass有什么区别?

4.解决方案

一、安装sass与less

sass基于Ruby语言开发而成,因此安装sass前需要安装Ruby。less 在服务器端最容易的安装方式就是通过 npm (node.js 的包管理器),在客户端使用“.less”(LESS源文件),只需要在官网载一个javascript脚本文件主“less.js”。他们都可以利用第三方软件编译成css文件。

二、变量

sass 是以$开头定义的变量,如:$mainColor: #963;

less 是以@开头定义的变量,如  @mainColor: #963;

三、作用域

sass 没有全局变量,满足就近原则,但是实际中可以将需要定义的全局属性放在base.scss 文件中。注意变量名重复;

less 中的作用域和其他程序语言中的作用域非常的相同,他首先会查找局部定义的变量,如果没有找到,会像冒泡一样,一级一级往下查找,直到根为止,同样上面的例子,我们来看看他在LESS下所起的变化。

四、混合(Mixins)

Sass的混合:sass样式中声明Mixins时需要使用“@mixin”,然后后面紧跟Mixins的名,他也可以定义参数,同时可以给这个参数设置一个默认值,但参数名是使用“$”符号开始,而且和参数值之间需要使用冒号(:)分开。

   在选择器调用定义好的Mixins需要使用“@include”,然后在其后紧跟你要调用的Mixins名。不过在Sass中还支持老的调用方法,就是使用加号“+”调用Mixins,在“+”后紧跟Mixins名。

   一起来看个简单的例子,比如说在你的Sass样式中定义了一个名叫“error”的Mixin,这个“error”设置了一个参数“$borderWidth”,在没特别定义外,这个参数的默认值设置为“2px”:

/*声明一个Mixin叫作“error”*/

@mixin error($borderWidth:2px){

  border:$borderWidth solid #f00;

  color: #f00;

}

/*调用error Mixins*/

.generic-error {

  @include error();/*直接调用error mixins*/

}

.login-error {

  @include error(5px);/*调用error mixins,并将参数$borderWidth的值重定义为5px*/

}

less 的混合: 在LESS中,混合是指将定义好的“ClassA”中引入另一个已经定义的“Class”,就像在当前的“Class”中增加一个属性一样。

   不过LESS样式中声明Mixins和Sass声明方法不一样,他更像CSS定义样式,在LESS可以将Mixins看成是一个类选择器,当然 Mixins也可以设置参数,并给参数设置默认值。不过设置参数的变量名是使用“@”开头,同样参数和默认参数值之间需要使用冒号(:)分隔开。

   正如Sass混合是的示例,同样在LESS样式中定义一个名叫“error”的Mixin,这个“error”设置了一个参数“@borderWidth”,在没有特别定义外,这个参数的默认值是“2px”:

/*声明一个Mixin叫作“error”*/

.error(@borderWidth:2px){

  border:@borderWidth solid #f00;

  color: #f00;

}

/*调用error Mixins*/

.generic-error {

  .error();/*直接调用error mixins*/

}

.login-error {

  .error(5px);/*调用error mixins,并将参数@borderWidth的值重定义为5px*/

}

五、嵌套

/*sass里的嵌套*/

section {

  margin:10px;

  nav {

    height:25px;

    a {

      color:#0982c1;

      &:hover {

        text-decoration:underline;

      }}}}

六、继承

sass的继承:@extend

.block {

  margin: 10px 5px;

  padding: 2px;

}

p {

  @extend .block;/*继承.block选择器下所有样式*/

  border: 1px solid #eee;

}

ul,ol {

  @extend .block; /*继承.block选择器下所有样式*/

  color: #333;

  text-transform: uppercase;

}

less的继承:类似于mixins

.block {

  margin: 10px 5px;

  padding: 2px;

}

p {

  .block;/*继承.block选择器下所有样式*/

  border: 1px solid #eee;

}

ul,ol {

  .block; /*继承.block选择器下所有样式*/

  color: #333;

  text-transform: uppercase;

}

5.编码实战

Demo1:LESS使用

https://ptteng.github.io/PPT/demo/css-08-lessAndSass/demo1.html

Demo2:SASS使用

https://ptteng.github.io/PPT/demo/css-08-lessAndSass/demo2.html

6.扩展思考

less和sass选哪个用?

https://www.zhihu.com/question/22285654

7.参考文献

初步认识LESS:

https://www.ibm.com/developerworks/cn/web/1207_shenyi_lesscss/

CSS——LESS:

http://www.w3cplus.com/css/less

sass 与 less 的区别与学习:

http://www.cnblogs.com/StephenJiang/p/4607100.html

less:

http://less.bootcss.com/

Less和Sass:

http://blog.csdn.net/github_33261002/article/details/51636862

Less介绍及其与Sass的差异:

http://www.w3cplus.com/css/an-introduction-to-less-and-comparison-to-sass.html

SASS入门:

http://www.w3cplus.com/sassguide/

8.更多讨论

国内互联网前端用LESS的还是SASS的多一些?



返回列表 返回列表
评论

    分享到