less 基本用法指南
什么是 lesss ?
Less 是一款强化 CSS 的辅助工具,它在 CSS 语法的基础上增加了变量 (variables)、嵌套 (nested rules)、混合 (mixins)、导入 (inline imports) 等高级功能,这些拓展令 CSS 更加强大与优雅。
安装及使用
- 安装
npm i -g less
- 使用
在命令行中运行 Sass
lessc input.less output.css
基本用法
- 变量(Variables)
@width: 100px;;
.block {
width: @width;
}
- 混合(Mixins)
.bordered {
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
.block div {
color: #111;
.bordered();
}
.block p {
color: red;
.bordered();
}
- 嵌套(Nesting)
.block {
color: black;
.h1 {
font-size: 22px;
}
.h2 {
font-size: 18px;
}
&:hover {
font-size: 12px;
}
}
@规则嵌套和冒泡
.block {
width: 300px;
@media (min-width: 768px) {
width: 600px;
@media (min-resolution: 192dpi) {
background-color: red;
}
}
@media (min-width: 1280px) {
width: 800px;
}
}
- 运算(Operations)
算术运算符 +
、-
、*
、/
可以对任何数字、颜色或变量进行运算。如果可能的话,算术运算符在加、减或比较之前会进行单位换算。计算的结果以最左侧操作数的单位类型为准。如果单位换算无效或失去意义,则忽略单位。无效的单位换算例如:px 到 cm 或 rad 到 % 的转换。
// 所有操作数被转换成相同的单位
@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%
- 转义(Escaping)
@min768: ~"(min-width: 768px)";
.block {
@media @min768 {
font-size: 1.2rem;
}
}
- 函数(Functions)
@base: #f04615;
@width: 0.5;
.block {
width: percentage(@width); // returns `50%`
color: saturate(@base, 5%);
background-color: spin(lighten(@base, 25%), 8);
}
更多函数介绍:https://less.bootcss.com/functions/
- 命名空间和访问符
有时,出于组织结构或仅仅是为了提供一些封装的目的,你希望对混合(mixins)进行分组。你可以用 Less 更直观地实现这一需求。假设你希望将一些混合(mixins)和变量置于 #bundle
之下,为了以后方便重用或分发:
#bundle() {
.button {
display: block;
border: 1px solid black;
background-color: grey;
&:hover {
background-color: white;
}
}
}
.link a {
color: orange;
#bundle.button(); // 还可以书写为 #bundle > .button 形式
}
- 映射(Maps)
#colors() {
primary: blue;
secondary: green;
}
.button {
color: #colors[primary];
border: 1px solid #colors[secondary];
}
- 作用域(Scope)
Less 中的作用域与 CSS 中的作用域非常类似。首先在本地查找变量和混合(mixins),如果找不到,则从“父”级作用域继承。
@var: red;
#page {
@var: white;
#header {
color: @var; // white
}
}
- 注释(Comments)
/* 一个块注释
* style comment! */
@var: red;
// 这一行被注释掉了!
@var: white;
- 导入(Importing)
@import "library"; // library.less
@import "typo.css";