BlueXIII's Blog

热爱技术,持续学习

0%

LESS学习笔记

参考文档

对比

  • SASS: Sass (Syntactically Awesome Stylesheets)是一种动态样式语言,Sass语法属于缩排语法,比css比多出好些功能(如变量、嵌套、运算,混入(Mixin)、继承、颜色处理,函数等),更容易阅读。from 2007
  • SCSS: Sass的缩排语法,对于写惯css前端的web开发者来说很不直观,也不能将css代码加入到Sass里面,因此sass语法进行了改良,Sass 3就变成了Scss(sassy css)。与原来的语法兼容,只是用{}取代了原来的缩进。
  • LESS: Less也是一种动态样式语言. 对CSS赋予了动态语言的特性,如变量,继承,运算, 函数.  Less 既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可在服务端运行 (借助 Node.js)。 from 2009

使用Less

页面引入

1
2
<link rel="stylesheet/less" href="style.less">
<script src="less.min.js"></script>

使用npm安装

1
2
npm install -g less
lessc styles.less > styles.css

导入(Importing)

1
2
@import "library"; // library.less
@import "typo.css";

嵌套(Nesting)

1
2
3
4
5
6
7
8
9
#header {
color: black;
.navigation {
font-size: 12px;
}
.logo {
width: 300px;
}
}

变量(Variables)

值变量

1
2
3
4
5
6
7
@width: 10px;
@height: @width + 10px;

#header {
width: @width;
height: @height;
}

选择器变量

1
2
3
4
5
6
7
8
9
10
11
12
@mySelector: #wrap;
@Wrap: wrap;
@{mySelector}{ //变量名 必须使用大括号包裹
color: #999;
width: 50%;
}
.@{Wrap}{
color:#ccc;
}
#@{Wrap}{
color:#666;
}

属性变量

1
2
3
4
5
@borderStyle: border-style;
@Soild:solid;
#wrap {
@{borderStyle}: @Soild;//变量名 必须使用大括号包裹
}

url变量

1
2
3
4
@images: "../img";//需要加引号
body {
background: url("@{images}/dog.png");//变量名 必须使用大括号包裹
}

声明变量

1
2
3
4
5
6
7
8
9
10
11
12
@background: {background:red;};
#main{
@background();
}
@Rules:{
width: 200px;
height: 200px;
border: solid 1px red;
};
#con{
@Rules();
}

变量运算

1
2
3
4
5
6
7
8
9
@width:300px;
@color:#222;
#wrap{
width:@width-20;
height:@width-20*5;
margin:(@width-20)*5;
color:@color*2;
background-color:@color + #111;
}

变量作用域(Scope)

1
2
3
4
5
6
7
8
var: red;

#page {
@var: white;
#header {
color: @var; // white
}
}

媒体查询

1
2
3
4
5
6
7
8
9
10
11
12
.component {
width: 300px;
@media (min-width: 768px) {
width: 600px;
@media (min-resolution: 192dpi) {
background-image: url(/img/retina2x.png);
}
}
@media (min-width: 1280px) {
width: 800px;
}
}

混合(Mixins)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.bordered {
border-top: dotted 1px black;
border-bottom: solid 2px black;
}

#menu a {
color: #111;
.bordered();
}

.post a {
color: red;
.bordered();
}

运算(Operations)

1
2
3
4
5
6
7
8
9
10
11
// 所有操作数被转换成相同的单位
@conversion-1: 5cm + 10mm; // 结果是 6cm
@conversion-2: 2 - 3cm - 5mm; // 结果是 -1.5cm

// conversion is impossible
@incompatible-units: 2 + 5px - 3cm; // 结果是 4px

// example with variables
@base: 5%;
@filler: @base * 2; // 结果是 10%
@other: @base + @filler; // 结果是 15%

为了与 CSS 保持兼容,calc() 并不对数学表达式进行计算,但是在嵌套函数中会计算变量和数学公式的值。

1
2
@var: 50vh/2;
width: calc(50% + (@var - 20px)); // 结果是 calc(50% + (25vh - 20px))

转义(Escaping)

转义(Escaping)允许你使用任意字符串作为属性或变量值。任何 ~”anything” 或 ~’anything’ 形式的内容都将按原样输出

1
2
3
4
5
6
@min768: ~"(min-width: 768px)";
.element {
@media @min768 {
font-size: 1.2rem;
}
}

函数(Functions)

1
2
3
4
5
6
7
8
@base: #f04615;
@width: 0.5;

.class {
width: percentage(@width); // returns `50%`
color: saturate(@base, 5%);
background-color: spin(lighten(@base, 25%), 8);
}

命名空间和访问符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
bundle() {
.button {
display: block;
border: 1px solid black;
background-color: grey;
&:hover {
background-color: white;
}
}
.tab { ... }
.citation { ... }
}

#header a {
color: orange;
#bundle.button(); // 还可以书写为 #bundle > .button 形式
}

映射(Maps)

1
2
3
4
5
6
7
8
9
#colors() {
primary: blue;
secondary: green;
}

.button {
color: #colors[primary];
border: 1px solid #colors[secondary];
}

注释(Comments)

1
2
3
4
5
6
/* 一个块注释
* style comment! */
@var: red;

// 这一行被注释掉了!
@var: white;