目录

Less和Sass

Less和Sass

CSS预处理器

css预处理器基本思想就是用一种专门的编程语言,为css增加了一些编程的特性,将css作为目标生成文件,然后开发者就只要使用这种语言进行编码的工作

通俗来讲:“css预处理器用一种专门的编程语言,进行web页面样式的设计,然后再编译成正常的css文件,以供项目使用。css预处理器为css增加一些编程的特性,无需考虑浏览器的兼容性问题”

下面介绍了常用的两种css预处理器

Sass

Sass语法是Sass最初的语法格式,通过tab键控制缩进的一种语法规则,不带任何分号和大括号,以.sass为扩展名

Scss:

Scss是Sass的新语法格式,不过他的语法更符合前端人员的书写习惯,即代码包裹在大括号里,并且末尾借书处有分号,以.scss为扩展名

Sass的编译

  • 命令编译
  • GUI工具编译
  • 自动化编译

变量

sass的变量必须$开头,后面紧跟变量名,变量值和变量名之间用冒号隔开(同css),如果值后面加上!default则表示默认值

嵌套

sass嵌套分为:

1.选择器嵌套

2.属性的嵌套

一般用到的都是选择器嵌套

选择器嵌套

选择器嵌套指的是在一个选择器中嵌套另一个选择器来实现继承,从而增强了sass文件的结构性和可读性。

在选择器嵌套中,可以使用 &表示父元素选择器

例如:

#top_nav{
  line-height: 40px;
  text-transform: capitalize;
  background-color:#333;
  li{
    float:left;
  }
  a{
    display: block;
    padding: 0 10px;
    color: #fff;

    &:hover{
      color:#ddd;
    }
  }
}

编译成功后的css为:

#top_nav{
  line-height: 40px;
  text-transform: capitalize;
  background-color:#333;
}  
#top_nav li{
  float:left;
}
#top_nav a{
  display: block;
  padding: 0 10px;
  color: #fff;
}
#top_nav a:hover{
  color:#ddd;
}
属性嵌套

属性嵌套指的是有些属性拥有同一个开始单词,如border-width,border-color都是以border开头,可以在sass编写中省去相同开头

例如:

.fakeshadow {
  border: {
    style: solid;
    left: {
      width: 4px;
      color: #888;
    }
    right: {
      width: 2px;
      color: #ccc;
    }
  }
}

编译成功:

.fakeshadow {
  border-style: solid;
  border-left-width: 4px;
  border-left-color: #888;
  border-right-width: 2px;
  border-right-color: #ccc; 
}

@at-root跳出选择器嵌套

混合(mixin)

sass中使用@mixin声明混合,可以传递参数,参数名以$符号开始,多个参数以逗号分开,也可以给参数设置默认值。声明的@mixin通过@include来调用。

//sass style
//-------------------------------   
@mixin opacity($opacity:50) {
  opacity: $opacity / 100;
  filter: alpha(opacity=$opacity);
}

//css style
//-------------------------------
.opacity{
  @include opacity; //参数使用默认值
}
.opacity-80{
  @include opacity(80); //传递参数
}

参数可以使用无参,也可以多个参数

继承

sass中,选择器继承可以让选择器继承另一个选择器的所有样式,并联合声明。使用选择器的继承,要使用关键词@extend,后面紧跟需要继承的选择器

//sass style
//-------------------------------
h1{
  border: 4px solid #ff9aa9;
}
.speaker{
  @extend h1;
  border-width: 2px;
}

//css style
//-------------------------------
h1,.speaker{
  border: 4px solid #ff9aa9;
}
.speaker{
  border-width: 2px;
}

关于sass的语法还有很多,例如函数,运算,条件判断,循环等等

推荐一个学习sass的网站:

Less

LESS和Sass的主要不同就是他们的实现方式,LESSS是基于JavaScript,所以,是在客户端处理的。Sass是基于Ruby的,是在服务器端处理的

  • 变量

Less和Sass的语法规则大同小异,不过Less引用变量的形式为@变量名值

  • 混合(mixin)

在Sass中,要在样式规则前面添加@mixin声明,规定它是个嵌套。然后,通过@include来调用它:

@mixin border { border-top: 1px dotted #333; } article.post { background: #eee; @include border; } ul.menu { background: #ccc; @include border; }

但在Less中:

.border { border-top: 1px dotted #333; } article.post { background: #eee; .border; } ul.menu { background: #ccc; .border; }即可完成

注释:

LESS中允许两种注释写法。标准的CSS注释,/* comment */,是有效的,而且能够通过处理并正确输出。当行注释,// comment,同样可以用但是不能够通过处理也不能被输出

分享一篇比较Less和Sass的文章: