在 Less 中,可以通过 @import 指令来导入外部文件。在标准 CSS 中,@import 规则必须在所有其他类型的规则之前。但是 Less 不关心你把 @import 语句放在哪里。@import 指令可以放在代码中的任何位置,例如:
.foo { background: #900; } @import "this-is-valid.less";
Less 可能会根据文件扩展名对 @import 语句进行不同的处理:
如果扩展名是 .css,文件内容将被原样输出。
如果是任何其他扩展名,将作为 Less 文件被导入。
如果没有扩展名,将给他添加一个 .less 的扩展名,并作为 Less 文件被导入。
例如:
@import "foo"; // 导入 foo.less @import "foo.less"; // 导入 foo.less @import "foo.php"; // 导入 foo.php 作为 Less 文件 @import "foo.css"; // 导入 CSS,保留原来内容,即内容被原样输出
Less 为 CSS @import 提供了几个扩展,以提供对外部文件执行更大的灵活性。
语法: @import (keyword) "filename";
ss 已实现以下导入选项:
reference: 使用 Less 文件但不输出它
inline: 在输出中包含源文件但不处理它
less: 将文件视为 Less 文件,无论文件扩展名是什么
css: 将文件视为 CSS 文件,无论文件扩展名是什么
once: 只包含文件一次(这是默认行为)
multiple: 多次包含文件
optional: 找不到文件时继续编译
每个 @import 允许多个关键字,你必须使用逗号分隔关键字,例如:
@import (optional, reference) "foo.less";
发布于 v1.5.0,除非引用,否则不将导入的样式添加到编译输出。例如:
// 文件:ext-less.less @color: green; @bgcolor: #F0F0F0; .mixin(@color, @bgcolor) { color: @color; background: @bgcolor; } .a { .mixin(@color, @bgcolor); text-decoration: none; } // 文件:demo.less @import (reference) "ext/ext-less.less"; div { // 引用 ext/ext-less.less 文件中的 .mixin 混入 .mixin(#333, #F0F0F0); }
编译 Less,输出 css 如下:
div { color: #333; background: #F0F0F0; }
一下,reference 在导入文件中用引用标志标记每个 at-rule 和选择器,正常导入,但是当生成 CSS 时,"reference" 选择器(以及任何仅包含引用选择器的媒体查询)不会输出。 reference 样式不会出现在你生成的 CSS 中,除非引用样式用作 mixins 或 extended。
此外,reference 根据使用的方法(mixin 或 extend)产生不同的结果:
extend: 当一个选择器被扩展时,只有新的选择器被标记为未被引用,并被拉入引用 @import 语句的位置。
mixins: 当 reference 样式用作 隐式混合 时,其规则被混入,标记为 "不引用",并正常出现在引用的位置。
参考范例:
这允许你通过执行以下操作仅从 Bootstrap 等库中提取特定的、有针对性的样式:
.navbar:extend(.navbar all) { //... }
并且你将从 Bootstrap 中仅引入与 .navbar 相关的样式。
发布于 v1.5.0,包含外部文件,但不处理它们。例如:
// 文件:ext-less.less @color: green; @bgcolor: #F0F0F0; .a { color: @color; text-decoration: none; background: @bgcolor; } // 文件:demo.less @import (inline) "ext/ext-less.less";
编译 less,输出 css 如下:
@color: green; @bgcolor: #F0F0F0; .a { color: @color; text-decoration: none; background: @bgcolor; }
当 CSS 文件可能不兼容时,你将使用它; 这是因为虽然 Less 支持大多数已知标准的 CSS,但它在某些地方不支持注释,并且在不修改 CSS 的情况下不支持所有已知的 CSS hack。
因此,你可以使用它在输出中包含文件,以便所有 CSS 都在一个文件中。
发布于 v1.4.0,将导入的文件视为 Less,而不考虑文件扩展名。例如:
@import (less) "foo.css";
发布于 v1.4.0,将导入的文件视为常规 CSS,而不考虑文件扩展名。例如:
@import (css) "foo.less";
输出:
@import "foo.less";
发布于 v1.4.0,表示该文件仅导入一次,该文件的后续导入语句将被忽略。这是 @import 语句的默认行为。例如:
// 文件:ext-less.less @color: green; @bgcolor: #F0F0F0; .a { color: @color; text-decoration: none; background: @bgcolor; } // 文件:demo.less @import (once) "foo.less"; @import (once) "foo.less"; // 该语句将被忽略
编译 less,输出 css 如下:
.a { color: green; text-decoration: none; background: #F0F0F0; }
发布于 v1.4.0,允许导入多个同名文件。例如:
// file: foo.less .a { color: green; } // file: main.less @import (multiple) "foo.less"; @import (multiple) "foo.less";
输出
.a { color: green; } .a { color: green; }
发布于 v2.3.0,允许仅在文件存在时导入该文件。如果没有 optional 关键字,Less 会在导入找不到的文件时抛出 FileError 并停止编译。