【LESS 笔记】基础内容

01 Less 是什么

Less css 是一种动态样式语言,属于 CSS 预处理语言的一种,它使用类似 CSS 的语法为 CSS 的赋予了动态的特性,如变量、继承、运算、函数等,更方便 CSS 的编写和维护实现 CSS 模块化

作为一种 CSS 扩展,Less 不仅向后兼容 CSS,它还使用现有的 CSS 语法新增了额外的特性。这使得学习 Less 更轻松,一旦有任何问题,可以随时退回使用标准的 CSS

Less CSS 可以在多种语言,环境中使用,包括浏览器端,桌面客户端,服务端

下载包:

npm install less-loader less --save-dev

webpack.config.js 文件里添加配置:

{test: /.less$/, use: ['style-loader','css-loader','less-loader']}

webpack.config.js 文件

module.exports = {
  entry: './src/js/entry.js',
  output: {
    filename: 'index.js',
    publicPath: './out',
    path: __dirname + '/out'
  },
  module: {
    rules: [
      {test: /.js$/, loader: 'babel-loader'},
      {test: /.css$/, use: ['style-loader','css-loader']},
      {test: /.(png|jpg|gif|svg)$/, use: 'url-loader?limit=8192&name=/[name].[ext]'},
      {test: /.less$/, use: ['style-loader','css-loader','less-loader']}
    ]
  }
}

entry.less 文件

body{
  background-color: #ff0;
  .demo01{
    width: 200px;
    height: 200px;
    background: #f0f;
  }
}

entry.js 文件

// 引入less文件
require('../less/entry.less');

console.log('index');

index.html 文件

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div class="demo01">demo01</div>
  <div class="demo02">demo02</div>
  <script src="./out/index.js"></script>
</body>
</html>

在这里插入图片描述

在这里插入图片描述

02 Less 语法

2.1 注释

  • //:不会被编译
  • /**/:此注释会被编译

2.2 变量

  • 声明变量:@a:300px
  • 使用变量:.box {width: @a;}
  • @arguments 变量:@arguments 包含了所有传递进来的参数
    • 如果你不想单独处理每一个参数的话就可以像这样写
    • border_arg(@w:30px,@c:red,@xx:solid) {border:@arguments;}

entry.less 文件

@w:200px;
@h:200px;
@yellow1: #ff0;
@yellow2: #00f;
body{
  background: @yellow1;
  .demo01{
    width: @w;
    height: @h;
    background: #f0f;
  }
  .demo02{
    width: @w;
    height: @h;
    background: @yellow2;
    border: 5px solid #fff;
  }
}

在这里插入图片描述

2.3 混合

2.3.1 独立选择器样式可以被直接用在其他选择器样式之中

如:.border {border: 1px solid orange} .box {width:@a;height:@a; .border;}

相当于:.box {width: 300px;height:300px;border:1px solid orange}

(同样可以将 #box)

entry.css

@w:200px;
@h:200px;
@yellow1: #ff0;
@yellow2: #00f;
.border{
  border: 5px solid #fff;
}
body{
  background: @yellow1;
  .demo01{
    width: @w;
    height: @h;
    background: #f0f;
    .border
  }
  .demo02{
    width: @w;
    height: @h;
    background: @yellow2;
    .border
  }
}

在这里插入图片描述

2.3.2 混合是可以带参数的

如:.border2(@border_width) {border: @border_width solid yelllow}

使用:.box {.border2(5px);}

entry.less 文件

@w:200px;
@h:200px;
@yellow1: #ff0;
@yellow2: #00f;
.border(@borderStyle){
  border: 5px solid @borderStyle;
}
body{
  background: @yellow1;
  .demo01{
    width: @w;
    height: @h;
    background: #f0f;
    .border(#f00);
  }
  .demo02{
    width: @w;
    height: @h;
    background: @yellow2;
    .border(#0f0);
  }
}

在这里插入图片描述

entry.less 文件

@w:200px;
@h:200px;
@yellow1: #ff0;
@yellow2: #00f;

.border(@borderWidth,@boederStyle,@borderColor){
  border: @borderWidth @boederStyle @borderColor;
}
body{
  background: @yellow1;
  .demo01{
    width: @w;
    height: @h;
    background: #f0f;
    .border(10px,solid,#f00);
  }
  .demo02{
    width: @w;
    height: @h;
    background: @yellow2;
    .border(20px,dashed,#090);
  }
}

在这里插入图片描述

2.3.3 此参数可以具备默认值

如:.border3 (@border-width:10px) {border:@border-width solid green}

使用:.box {.border3;}

用处:兼容写法,减轻冗余代码

例子如下:

.borderRadius(@radius:5px) {
  -webkit-border-radius:@radius;
  -moz-border-radius:@radius;
  border-radius:@radius}
.box{
  .border3;
  borderRadius(5%);
};

2.4 匹配模式

2.4.1 基本语法

entry.less 文件

.triangle(top,@borderColor){
  border-width: 50px;
  border-style: solid;
  border-color: transparent;
  border-top-width: 0;
  border-bottom-color: @borderColor;
}
.triangle(bottom,@borderColor){
  border-width: 50px;
  border-style: solid;
  border-color: transparent;
  border-bottom-width: 0;
  border-top-color: @borderColor;
}
.triangle(right,@borderColor){
  border-width: 50px;
  border-style: solid;
  border-color: transparent;
  border-right-width: 0;
  border-left-color: @borderColor;
}
.triangle(left,@borderColor){
  border-width: 50px;
  border-style: solid;
  border-color: transparent;
  border-left-width: 0;
  border-right-color: @borderColor;
}
body{
  .demo01{
    width: 0;
    height: 0;
    .triangle(right,#f0f);
  }
  .demo02{
    width: 0;
    height: 0;
    .triangle(top,#0ff);
  }
}

在这里插入图片描述

2.4.2 代码冗余,将公共部分提取出来

.trangle(@_,....){} 这句话的意思是,无论在哪使用 .triangle(....) 都会把 .trangle(@_,....){} 里的样式带上

entry.less 文件

.triangle(@_,...){
  border-width: 50px;
  border-style: solid;
  border-color: transparent;
}
.triangle(top,@borderColor){
  border-top-width: 0;
  border-bottom-color: @borderColor;
}
.triangle(bottom,@borderColor){
  border-bottom-width: 0;
  border-top-color: @borderColor;
}
.triangle(right,@borderColor){
  border-right-width: 0;
  border-left-color: @borderColor;
}
.triangle(left,@borderColor){
  border-left-width: 0;
  border-right-color: @borderColor;
}
body{
  .demo01{
    width: 0;
    height: 0;
    .triangle(right,#f0f);
  }
  .demo02{
    width: 0;
    height: 0;
    .triangle(top,#0ff);
  }
}

在这里插入图片描述

2.5 嵌套写法

符合 DOM 结构

index.html 文件

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div class="demo01">demo01
    <div class="demo01-01">demo01-01</div>
  </div>
  <div class="demo02">demo02</div>
  <script src="./out/index.js"></script>
</body>
</html>

entry.less 文件

@w:150px;
@h:150px;
body{
  background: blanchedalmond;
  .demo01{
    width: @w;
    height: @h;
    background: #0ff;
    .demo01-01{
      width: 100%;
      height: 50%;
      background: #ff0;
      &:hover{
        height: 70%;
      }
    }
    .demo01-01:hover{
      width: 70%;
    }
  }
  .demo02{
    width: @w;
    height: @h;
    background: #f0f;
  }
}

在这里插入图片描述

entry.less 文件

@w:150px;
@h:150px;
body{
  background: blanchedalmond;
  .demo01{
    width: @w;
    background: #0ff;
    .demo01-01{
      width: 100%;
      height: 50%;
      background: #ff0;
      &:hover{
        height: 200px;
      }
    }
  }
  .demo02{
    width: @w;
    height: @h;
    background: #f0f;
  }
}

在这里插入图片描述

2.5.1 浮动和清除浮动

浮动

entry.less 文件

@w:150px;
@h:150px;
body{
  background: blanchedalmond;
  .demo01{
    width: @w;
    background: #0ff;
    .demo01-01{
      float: left;
      width: 100px;
      height: 200px;
      background: #ff0;
    }
  }
  .demo02{
    width: @w;
    height: @h;
    background: #f0f;
  }
}

在这里插入图片描述

清除浮动

entry.less 文件

@w:150px;
@h:150px;
body{
  background: blanchedalmond;
  .demo01{
    width: @w;
    background: #0ff;
    &:after{
      content: '';
      display: block;
      clear: both;
    }
    .demo01-01{
      float: left;
      width: 100px;
      height: 200px;
      background: #ff0;
    }
  }
  .demo02{
    width: @w;
    height: @h;
    background: #f0f;
  }
}

在这里插入图片描述

2.6 样式属性值计算

Less 计算样式:

  • @wOne: 300px;
  • @wOne + 30px
  • .box {width:(@wOne - 20) * 5;}
  • 加减乘除皆可

CSS 计算样式:

  • width: ~'calc(100px + 30%)' == cal(130px)
  • width: ~'calc(100% + 30px)' == cal(130%)
  • 加减乘除皆可

2.7 避免编译

有时候我们需要输出一些不正确的 css 语法或者使用一些 Less 不认识的专用语法

要输出这样的值我们可以在字符串前加一个 ~

例如: width: ~'calc(100% - 35px)';

使用:.box {width:~'calc(300px-30px)';} ==> .box {width: calc(300px-30px)}

2.8 模块引入

利用 @import './triangle.less'; 或者 @import url('./triangle.less'); 引入模块

index.html 文件

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div class="demo01">demo01
    <!-- <div class="demo01-01">demo01-01</div> -->
  </div>
  <div class="demo02">demo02</div>
  <script src="./out/index.js"></script>
</body>
</html>

triangle.less 文件

.triangle(@_,...){
  border-width: 50px;
  border-style: solid;
  border-color: transparent;
}
.triangle(top,@borderColor){
  border-top-width: 0;
  border-bottom-color: @borderColor;
}
.triangle(bottom,@borderColor){
  border-bottom-width: 0;
  border-top-color: @borderColor;
}
.triangle(right,@borderColor){
  border-right-width: 0;
  border-left-color: @borderColor;
}
.triangle(left,@borderColor){
  border-left-width: 0;
  border-right-color: @borderColor;
}

entry.less 文件

// @import './triangle.less';
@import url('./triangle.less');
body{
  .demo01{
    width: 0;
    height: 0;
    .triangle(right,#f0f);
  }
  .demo02{
    width: 0;
    height: 0;
    .triangle(top,#0ff);
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值