本文是探讨的是" css预处理语言之less快速入门 "
此文章是个人学习归纳的心得,未经允许,严禁转载,如有不对, 还望斧正, 感谢!
CSS 是一门非程序式语言,没有变量、函数、SCOPE(作用域)等概念。
Less(Leaner Style Sheets 的缩写)是一门 CSS 扩展语言,也称为 CSS 预处理器。
做为 CSS 的一种形式的扩展,它并没有减少 CSS 的功能,而是在现有的 CSS 语法上,为 CSS 加入程序式语言的特性。
它在 CSS 的语法基础上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了 CSS 的编写,并且降低了 CSS 的维护成本,就像它的名称所说的那样,Less 可以让我们用更少的代码做更多的事情。
Less 中文网址:Less 快速入门 | Less.js 中文文档 - Less 中文网 (bootcss.com)
常见的 CSS 预处理器:Sass、Less、Stylus
一句话:Less 是一门 CSS 预处理语言,它扩展了 CSS 的动态特性。
用node运行Less
node -v
查看版本即可npm install -g less
即可lessc -v
查看版本即可vscode使用Less
本质上,Less 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件。
所以,我们需要把我们的 Less 文件,编译生成为 CSS 文件,这样我们的 HTML 页面才能使用。
【VSCode Less 插件】
vscode 的 Easy LESS 插件
这个插件可以自动将less
文件转义成css
文件
关于配置
settings.json配置如下
"less.compile": {
"compress": true, // true => remove surplus whitespace
"sourceMap": true, // true => generate source maps (.css.map files)将浏览器审查元素中css代码在css文件中的位置改成对应的less文件中的位置
"out": true // false => DON'T output .css files (overridable per-file, see below)生成对应的css文件
}
只要保存一下 less 文件,会自动生成 CSS 文件。
/*
* 一个块注释
* style comment!
*/
// 这一行被注释掉了!
div {
color: red;
}
变量是指没有固定值,可以改变的。因为我们 CSS 中的一些颜色和数值等经常使用。
@变量名: 值;
变量是指没有固定值,可以改变的。因为我们 CSS 中的一些颜色和数值等经常使用。
@变量名: 值;
@
为前缀@color: pink;
// 直接使用
body {
color: @color;
}
a:hover {
color: @color;
}
变量用于选择器名、属性名、URL、@import
语句
@my-selector: banner;
// 需要添加 {}
.@{my-selector} {
font-weight: bold;
line-height: 40px;
margin: 0 auto;
}
@property: color;
.widget {
@{property}: #0ee;
background-@{property}: #999;
}
// Variables
@images: '../img';
// Usage
body {
color: #444;
background: url('@{images}/white-sand.png');
}
// Variables
@themes: '../../src/themes';
// Usage
@import '@{themes}/tidal-wave.less';
当一个变量被声明多次,会取最后一次的值,并从当前作用域往外寻找变量。
@var: 0;
.class {
@var: 1;
.brass {
@var: 2;
three: @var;
@var: 3;
}
one: @var;
}
编译后
.class {
one: 1;
}
.class .brass {
three: 3;
}
.widget {
color: #efefef;
background-color: $color;
}
编译后
.widget {
color: #efefef;
background-color: #efefef;
}
Less 提供了使用嵌套(nesting)代替层叠或与层叠结合使用的能力
【我们经常用到选择器的嵌套】
#header .logo {
width: 300px;
}
【less 嵌套写法】
#header {
.logo {
width: 300px;
}
}
用 Less 书写的代码更加简洁,并且模仿了 HTML 的组织结构。
在嵌套规则中, &
表示父选择器,常用于给现有选择器添加伪类。
.header {
a {
color: blue;
&:hover {
color: green;
}
}
}
编译后
.header a {
color: blue;
}
.header a:hover {
color: green;
}
你还可以使用此方法将伪选择器(pseudo-selectors)与混合(mixins)一同使用。下面是一个经典的 clearfix 技巧,重写为一个混合(mixin) (& 表示当前选择器的父级):
.clearfix {
display: block;
zoom: 1;
&:after {
content: " ";
display: block;
font-size: 0;
height: 0;
clear: both;
visibility: hidden;
}
}
混合(Mixin)是一种将一组属性从一个规则集包含(或混入)到另一个规则集的方式,可理解为复制粘贴。
.bordered {
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
#menu a {
color: #111;
.bordered();
}
.post a {
color: red;
.bordered();
}
.bordered {
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
#menu a {
color: #111;
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
.post a {
color: red;
border-top: dotted 1px black;
border-bottom: solid 2px black;
}
// 使用类选择器时可以在选择器后边添加一个括号,这时我们实际上就创建了一个mixins
// 这种是不会被识别进css
.myMixin() {
width: 400px;
height: 400px;
}
.p4 {
.myMixin; //.myMixin();都可以
}
.border(@width, @style, @color) {
border: @width @style @color;
}
div {
.border(1px, solid, #ccc);
}
div {
border: 1px solid #ccc;
}
需注意的是,就算有默认值,也要按顺序传递
.border(@width, @style, @color: #ccc) {
border: @width @style @color;
}
div {
.border(1px, solid);
}
// 会出错
.border(@width: 1px, @style, @color) {
border: @width @style @color;
}
div {
.border(solid, #ccc);
}
可以在向混合传参是指定参数名称,从而不需要按顺序传入
.border(@width, @style, @color: #ccc) {
border: @width @style @color;
}
div {
.border(@style: solid, @color: red, @width: 100px);
}
@arguments
变量包含了传入的所有参数
.box-shadow(@x: 0, @y: 0, @blur: 1px, @color: #000) {
-webkit-box-shadow: @arguments;
-moz-box-shadow: @arguments;
box-shadow: @arguments;
}
.big-block {
.box-shadow(2px, 5px);
}
.big-block {
-webkit-box-shadow: 2px 5px 1px #000;
-moz-box-shadow: 2px 5px 1px #000;
box-shadow: 2px 5px 1px #000;
}
在多个相同的混合中(参数个数必须相同),匹配特定的混合。
.mixin(dark, @color) {
color: darken(@color, 10%);
}
.mixin(light, @color) {
color: lighten(@color, 10%);
}
// @_ 表示匹配所有
.mixin(@_, @color) {
display: block;
}
@switch: light;
.class {
.mixin(@switch, #888);
}
.class {
color: #a2a2a2;
display: block;
}
任何数字、颜色或者变量都可以参与运算。就是 Less 提供了加(+)、减(-)、乘(*)、除(/)算术运算。
/* Less 里面写 */
@width: 10px + 5;
div {
border: @width solid red;
}
/* Less 甚至还可以这样 */
width: (@width + 5) * 2;
【生成的 css】
div {
border: 15px solid red;
}
注意:
1px + 5
100px / 10
改为 (100px / 10)
,否则没有效果计算结果以操作数最左侧的单位类型为准
@conversion-1: 5cm + 10mm; // 6cm
@conversion-2: 2 - 3cm - 5mm; // -1.5cm
@conversion-3: 3.1 * 2cm; // 6.2cm
@conversion-4: 4px / 2; // 4px / 2
// conversion is impossible
@incompatible-units: 1cm - 1px; // 0.97354167cm
// example with variables
@base: 5%;
@filler: @base * 2; // 10%
@other: @base + @filler; // 15%
@color: #224488 / 2; // #112244
background-color: #112244 + #111; // #223355
Extend Syntax
nav ul {
&:extend(.inline);
background: blue;
}
.inline {
color: red;
}
nav ul {
background: blue;
}
.inline,
nav ul {
color: red;
}
通过加引号可以避免 Less 编译,直接把内容输出到 CSS 中
.banner .inline .header {
width: '100px + 100px';
height: 100px + 100px;
}
.banner .inline .header {
width: '100px + 100px';
height: 200px;
}
Less 内置了多种函数用于转换颜色、处理字符串、算术运算等。这些函数在Less 函数手册中有详细介绍。
函数的用法非常简单。下面这个例子将介绍如何利用 percentage 函数将 0.5 转换为 50%,将颜色饱和度增加 5%,以及颜色亮度降低 25% 并且色相值增加 8 等用法:
@base: #f04615;
@width: 0.5;
.class {
width: percentage(@width); // returns `50%`
color: saturate(@base, 5%);
background-color: spin(lighten(@base, 25%), 8);
}
你可以导入一个 .less 文件,此文件中的所有变量就可以全部使用了。如果导入的文件是 .less 扩展名,则可以将扩展名省略掉:
@import url("syntax.less");//url可以不加但是可能会有问题
@import "library"; // library.less
@import "typo.css";
手动给每个less文件指定导出
导出必须写到第一行
// out: 路径/文件名
// out: ./mycss/pink.css
设置导出: 当面目录下,创建一个 mycss 文件夹, 生成 一个 pink.css (做了改名)
// out: ./mycss/
设置导出: 当面目录下,创建一个 mycss 文件夹, 生成 一个 跟less一样的文件名(原名)
less 禁止导出
// out: false
到这里, less对你来说, 就已经不是问题了。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。