Less 学习笔记

1. 介绍

Less是一直CSS的预编译语言,是CSS的扩展。使用Less我们也可以对css进行编程,可以定义变量、判断等。本文只要学习自W3Cschool

2. 安装

使用nodejs来进行安装

//安装命令
npm install -g less
//测试是否安装成功
lessc -v

在vue项目中安装npm install less less-loader --save

3. Less编译

less使用命令lessc style.less style.css来进行编译

4. Less语法规则

4.1 变量

LESS允许使用 @ 符号定义变量。 变量分配使用冒号(:)完成。

@color1: #ca428b;
.div1{
  background-color : @color1;
}
.div2{
  background-color : @color1;
}

编译后变成

.div1 {
  background-color: #ca428b;
}
.div2 {
  background-color: #ca428b;
}

4.2 注释

less注释分块注释和单行注释,块注释显示在css文件中,单行注释不显示。

/* 
块注释
*/

//单行注释

4.3 混合

混合类似于编程语言中的函数。 Mixins是一组CSS属性,允许您将一个类的属性用于另一个类,并且包含类名作为其属性。 在LESS中,可以使用类或id选择器以与CSS样式相同的方式声明mixin。 它可以存储多个值,并且可以在必要时在代码中重复使用。

  • 基础使用
// less
@width: 100px;
@height: 50px;
//输出mixin
.subcontent {
    height: @height;
}

.content {
    width: @width;
    .subcontent;
}

输出的css


.subcontent {
  height: 50px;
}
.content {
  width: 100px;
  height: 50px;
}
  • 加上()后,将不输出mixin。包含选择器的混合如下:
@width: 100px;
@height: 50px;
//输出mixin
.subcontent {
    height: @height;
}

//加上()后,在css中将不输出,同时
.a() {
  &:hover {
    background: #FFC0CB;
  }
}

.content {
    width: @width;
    .subcontent;
    .a;
}

输出css

.subcontent {
  height: 50px;
}
.content {
  width: 100px;
  height: 50px;
}
.content:hover {
  background: #FFC0CB;
}
  • mixin命名空间。命名空间用于在通用名称下对mixin进行分组。 使用命名空间可以避免名称冲突,并从外部封装mixin组。
#outer() {
  background:yellow;
  .inner {
    color: red;
  }
}
p {
  #outer > .inner;
}

css

p {
  color: red;
}
  • LESS 保护的命名空间,当guard应用于命名空间时,只有在guard条件返回true时才使用由命名空间定义的mixin。 命名空间防护类似于mixins上的guard。
@color: blue;
#namespace when (@color = blue) {
  .mixin() {
   color: red;
  }
}
p{
 #namespace .mixin();
}

css

p {
  color: red;
}
  • 可带参数的混合
//定义的@fontSize: 10px是默认值,在混合时可以进行重新赋值覆盖。
.mixin(@color: black; @fontSize: 10px) {
  color: @color;
  font-size: @fontSize;
}
.class1 {
  .mixin(@fontSize: 20px; @color: #F5A9D0);
}
.class2 {
  .mixin(#F79F81; @fontSize: 20px);
}
.class3 {
  .mixin(#F79F81);
}
//使用@arguments取出全部的参数
.box-shadow(@x: 0; @y: 0; @height: 3px; @width: 3px) {
  -webkit-box-shadow: @arguments;  //输出-webkit-box-shadow: 2px 2px 3px 3px;
}
.myclass {
  .box-shadow(2px; 2px);
}

//使用... 提供可变数量的参数
.mixin(...) {        // it matches arguments from 0-n
.mixin() {           // it matches exactly 0 arguments
.mixin(@x: 1) {      // it matches arguments from 0-1
.mixin(@x: 1; ...) { // it matches arguments from 0-n

//模糊匹配
.mixin(dark; @color) {
  color: darken(@color, 15%);
}
.mixin(light; @color) {
  color: lighten(@color, 15%);
}

@color-new: dark;

.line {
  .mixin(@color-new; #FF0000);
}

4.4 mixins函数

Mixins函数和混合的工作方式非常相似。mixins可以嵌套,可以接受参数和返回值。

  • mixin的作用域:由变量和混合组成的混合可以在调用者的作用域中使用,并且是可见的
.mixin() {
  @bgcolor: #C0C0C0;
}
.myclass{
  .mixin();
  background-color: @bgcolor;
}
  • Mixin和返回值: mixin类似于函数,在mixin中定义的变量将作为它的返回值。
.padding(@x, @y) {
  @padding: ((@x + @y) / 2);
}

.myclass{
  .padding(80px, 120px);  // call to the mixin
  padding-left: @padding; //  returns the value
}
  • Mixin定义另一个mixin
.outerMixin(@value) {
  .nestedMixin() {
    font-size: @value;
  }
}
.myclass {
  .outerMixin(30);
  .nestedMixin();
}

4.5 嵌套

Less允许将一个类的属性用于另一个类,并且包含类名作为其属性

.container{
  h1{
       font-size: 25px;
       color:#E45456;
 }
  p{
       font-size: 25px;
       color:#3C7949;
  }

 .myclass{
  h1{
        font-size: 25px;
        color:#E45456;
  }
  p{
       font-size: 25px;
       color:#3C7949;
  }
 }
}

css

.container h1 {
  font-size: 25px;
  color: #E45456;
}
.container p {
  font-size: 25px;
  color: #3C7949;
}
.container .myclass h1 {
  font-size: 25px;
  color: #E45456;
}
.container .myclass p {
  font-size: 25px;
  color: #3C7949;
}

4.6 操作符

Less支持加减乘除等算术运算

@size: 10px;
.myclass {
 padding-bottom: @size * 2;
 padding-left: @size / 2;
 padding-right: @size + 2;
 padding-top: @size - 2;
}

css

.myclass {
  padding-bottom: 20px;
  padding-left: 5px;
  padding-right: 12px;
  padding-top: 8px;
}

4.7 函数

Color 函数

  • lighten(@color, 10%); // 返回一个比@color低10%更轻的颜色
  • darken(@color, 10%); // 返回一个比@color高10%较暗的颜色
  • saturate(@color, 10%); // 返回比@color多饱和度10%的颜色
  • desaturate(@color, 10%); // 返回一个比@color少饱和度10%的颜色
  • fadein(@color, 10%); // 返回一个比@color少10%透明度的颜色
  • fadeout(@color, 10%); // 返回一个比@color多10%透明度的颜色
  • fade(@color, 50%); // 返回一个颜色透明度为50%的颜色
  • spin(@color, 10); // 返回色调比@color大10度的颜色
  • spin(@color, -10); // 返回一个比@color小10度色调的颜色
  • mix(@color1, @color2); // 返回一个混合@ color1和@ color2的颜色

Math 函数

  • round(1.67); // returns 2
  • ceil(2.4); // returns 3
  • floor(2.6); // returns 2
  • percentage(0.5); // returns 50%

Less内置函数

4.8 Less 命名空间和访问器

less通过命名空间来管理class,有点类似后端的包结构,如下:

//命名空间定义
.class1 {
  .class2 {
    .val(@param) {
      font-size: @param;
      color:green;
    }
  }
}

/访问方式
.myclass {
  .class1 > .class2 > .val(20px);
}

4.9 导入

使用@import可以导入LESS或CSS文件的内容。

@import "style";      // imports the style.less
@import "style.less"; // imports the style.less
@import "style.php";  // imports the style.php as a less file
@import "style.css";  // it will kept the statement as it is

4.10 循环

Loops语句允许我们多次执行一个语句或一组语句。 当递归mixin与 Guard表达式和模式匹配组合时,可以创建各种迭代/循环结构。

.cont(@count) when (@count > 0) {
  .cont((@count - 1));
  width: (25px * @count);
}
div {
  .cont(7);
}

css

div {
  width: 25px;
  width: 50px;
  width: 75px;
  width: 100px;
  width: 125px;
  width: 150px;
  width: 175px;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350

推荐阅读更多精彩内容