Less (Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS 扩展语言。因为 Less 和 CSS 非常像,Less 仅对 CSS 语言增加了少许方便的扩展,学习很容易。
使用方法:
// Node.js 环境中使用 Less
npm install -g less
// 编译:
lessc styles.less styles.css
// 在浏览器环境中使用 Less:
<link rel="stylesheet/less" type="text/css" href="styles.less" />
<script src="//cdnjs.cloudflare.com/ajax/libs/less.js/3.0.2/less.min.js" ></script>
主要亮点语法:
.bordered {
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
#menu a {
color: #111;
.bordered;
}
//等价于
#menu a {
color: #111;
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
#header {
color: black;
.navigation {
font-size: 12px;
}
.logo {
width: 300px;
}
}
//等价于
#header {
color: black;
}
#header .navigation {
font-size: 12px;
}
#header .logo {
width: 300px;
}
&一般用于串联选择器,较多用于伪类选择器,典型应用如下
.clearfix {
display: block;
zoom: 1;
&:after {
content: " ";
display: block;
font-size: 0;
height: 0;
clear: both;
visibility: hidden;
}
}
变量为局部作用域,且不必出现在使用之前,如:
@var: red;
#page {
#header {
color: @var; // white
}
@var: white;
}
/* 一个块注释
* style comment! */
@var: red;
// 这一行被注释掉了!
@var: white;
@import "library"; // library.less
@import "typo.css";
sass,作为”世界上最成熟、最稳定、最强大的专业级CSS扩展语言”。兼容所有版本的css,且有无数框架使用sass构建,如Compass,Bourbon,和Susy。
基于ruby,windows系统需先安装ruby环境,mac由于自带ruby,因此无需安装。
//安装sass
gem install sass
//在命令行中运行 Sass
sass input.scss output.css
//监视单个 Sass 文件,每次修改并保存时自动编译
sass --watch input.scss:output.css
// 监视整个文件夹
sass --watch app/sass:public/stylesheets
同less
#main p {
color: #00ff00;
width: 97%;
.redbox {
background-color: #ff0000;
color: #000000;
}
}
& 必须作为选择器的第一个字符,其后可以跟随后缀生成复合的选择器
#main {
color: black;
&-sidebar { border: 1px solid; }
}
有些 CSS 属性遵循相同的命名空间 (namespace),比如 font-family, font-size, font-weight 都以 font 作为属性的命名空间。为了便于管理这样的属性,同时也为了避免了重复输入,Sass 允许将属性嵌套在命名空间中,如:
.funky {
font: {
family: fantasy;
size: 30em;
weight: bold;
}
}
除与less相同的功能外,还支持:
1. Sass 支持标准的 CSS 多行注释 /* */,以及单行注释 //,前者会 被完整输出到编译后的 CSS 文件中,而后者则不会
2. 将 ! 作为多行注释的第一个字符表示在压缩输出模式下保留这条注释并输出到 CSS 文件中
3. 插值语句 (interpolation) 也可写进多行注释中输出变量值
$version: "1.2.3";
/* This CSS is generated by My Snazzy Framework version #{$version}. */
支持块级作用域,将局部变量转换为全局变量可以添加 !global 声明
#main {
$width: 5em !global;
width: $width;
}
#sidebar {
width: $width;
}
//编译后
#main {
width: 5em;
}
#sidebar {
width: 5em;
}
可以在变量的结尾添加 !default 给一个未通过 !default 声明赋值的变量赋值,此时,如果变量已经被赋值,不会再被重新赋值,但是如果变量还没有被赋值,则会被赋予新的值。
$content: "First content";
$content: "Second content?" !default;
$new_content: "First time reference" !default;
#main {
content: $content;
new-content: $new_content;
}
//编译后
#main {
content: "First content";
new-content: "First time reference";
}
一般在文件的最外层(不在嵌套规则内)使用 @import,其实,也可以将 @import 嵌套进 CSS 样式或者 @media 中,与平时的用法效果相同,只是这样导入的样式只能出现在嵌套的层中,相当于有一定作用范围的引用。
与@media 指令与 CSS 中用法一样,同时允许其在 CSS 规则中嵌套。
如果 @media 嵌套在 CSS 规则内,编译时,@media 将被编译到文件的最外层,包含嵌套的父选择器。
将一个选择器下的所有样式继承给另一个选择器。作用是将重复使用的样式 (.error) 延伸 (extend) 给需要包含这个样式的特殊样式(.seriousError)
.error {
border: 1px #f00;
background-color: #fdd;
}
.seriousError {
@extend .error;
border-width: 3px;
}
//编译后
.error, .seriousError {
border: 1px #f00;
background-color: #fdd;
}
.seriousError {
border-width: 3px;
}
@if
@elseif
@else
@for $var from through <end> //包括start,包括end
//或者
@for $var from to <end> //包括start不包括end
@each $var in
@while {}
类别 | Sass | Less |
---|---|---|
安装 | sass的安装需要安装Ruby环境 | Less基于JavaScript,是需要引入Less.js来处理代码输出css到浏览器,也可以在开发环节使用Less,然后编译成css文件,直接放在项目中 |
使用 | 复杂 | 简单 |
功能 | 复杂 | 简单 |
处理机制 | 通过服务端处理 | 通过客户端处理的,解析会比sass慢一点 |
变量 | 以$开始 | 以@开始 |
文件后缀 | .sass 或 .scss | .less |