【CSS预处理语言】less

视频

less

less是一种动态样式语言,属于CSS预处理器的范畴,它扩展了CSS语言,增加了变量,Mixin,函数等特性,使CSS更易维护和扩展。

LESS就可以在客户端上允许,也可以借助Node.js在服务端运行

<!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></title>
    <!-- 
      less 官网:
      lesscss.cn
     -->
    <style type="text/less">
      * {
        margin: 0;
        padding: 0;
      }
      #wrap {
        position: relative;
        width: 300px;
        height: 400px;
        border: 1px solid black;
        margin: 0 auto;
        .inner {
          position: absolute;
          left: 0;
          right: 0;
          top: 0;
          bottom: 0;
          margin: auto;
          background: pink;
          height: 100px;
          width: 100px;
        }
      }
    </style>
    <div id="wrap">
      <div class="inner"></div>
    </div>
  </head>
  <body></body>
  <script src="./less.js-master/dist/less.min.js"></script>
</html>

Less编译工具

koala官网:www.koala-app.com

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></title>
    <link rel="stylesheet" href="./css/02.css" />
    <div id="wrap">
      <div class="inner"></div>
    </div>
  </head>
  <body></body>
</html>

less:

* {
  margin: 0;
  padding: 0;
}
#wrap {
  position: relative;
  width: 300px;
  height: 400px;
  border: 1px solid black;
  margin: 0 auto;
  .inner {
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    margin: auto;
    background: pink;
    height: 100px;
    width: 100px;
  }
}

生成的css

* {
  margin: 0;
  padding: 0;
}
#wrap {
  position: relative;
  width: 300px;
  height: 400px;
  border: 1px solid black;
  margin: 0 auto;
}
#wrap .inner {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
  background: pink;
  height: 100px;
  width: 100px;
}

less中的注释

以//开头的注释,不会被编译到css文件中

以/**/包裹的注释会被编译到css文件中

less:

/*这是想暴露出去的注释*/
//这是见不得人的注释

生成的css:

/*这是想暴露出去的注释*/

less中的变量

用@来声明一个变量:@pink:pink;

  1. 作为普通属性值使用:@pink
  2. 作为选择器和属性名:#@{selector的值}的形式
  3. 作为URL:@{url}
  4. 变量的延迟加载

less:

/*这是想暴露出去的注释*/
//这是见不得人的注释
@color:pink;
@m:margin;
@selector:#wrap;
* {
  @{m}: 0;
  padding: 0;
}
@{selector} {
  position: relative;
  width: 300px;
  height: 400px;
  border: 1px solid black;
  margin: 0 auto;
  .inner {
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    margin: auto;
    background: @color;
    height: 100px;
    width: 100px;
  }
}

生成的css:

/*这是想暴露出去的注释*/
* {
  margin: 0;
  padding: 0;
}
#wrap {
  position: relative;
  width: 300px;
  height: 400px;
  border: 1px solid black;
  margin: 0 auto;
}
#wrap .inner {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
  background: #ffc0cb;
  height: 100px;
  width: 100px;
}

less中的嵌套规则

  1. 基本嵌套规则(变量的延迟加载)
    less:

@var:0;
.class{
  @var:1;
  .brass{
    @var :2;
    three:@var;//3
    @var:3;
  }
  one:@var;//1
}

生成的css:

.class {
  one: 1;
}
.class .brass {
  three: 3;
}

  1. &的使用

less:

/*这是想暴露出去的注释*/
//这是见不得人的注释
* {
  margin: 0;
  padding: 0;
}
#wrap {
  position: relative;
  width: 300px;
  height: 400px;
  border: 1px solid black;
  margin: 0 auto;
  .inner {
    position: absolute;
    left: 0;
    right: 0;
    top: 0;
    bottom: 0;
    margin: auto;
    background: pink;
    height: 100px;
    width: 100px;
    &:hover{
      background-color: skyblue;
    }
  }
}

生成的css:

/*这是想暴露出去的注释*/
* {
  margin: 0;
  padding: 0;
}
#wrap {
  position: relative;
  width: 300px;
  height: 400px;
  border: 1px solid black;
  margin: 0 auto;
}
#wrap .inner {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
  background: pink;
  height: 100px;
  width: 100px;
}
#wrap .inner:hover {
  background-color: skyblue;
}

less中的混合

混合就是将一系列属性从一个规则集引入到另一个规则集的方式
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></title>
    <link rel="stylesheet" href="./css/01.css" />
    <div id="wrap">
      <div class="inner"></div>
      <div class="inner2"></div>
    </div>
  </head>
  <body></body>
</html>

  1. 普通混合
  2. 不带输出的混合
  3. 带参数的混合
  4. 带参数并且有默认值的混合

less:

.juzhong(@w:10px,@h:10px,@c:pink){
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
  background: @c;
  height: @h;
  width: @w;
}
* {
  margin: 0;
  padding: 0;
}
#wrap {
  position: relative;
  width: 300px;
  height: 400px;
  border: 1px solid black;
  margin: 0 auto;
  .inner {
   .juzhong();
  }
  .inner2 {
   .juzhong(200px,200px,deeppink);
  }
}

生产的css:

* {
  margin: 0;
  padding: 0;
}
#wrap {
  position: relative;
  width: 300px;
  height: 400px;
  border: 1px solid black;
  margin: 0 auto;
}
#wrap .inner {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
  background: #ffc0cb;
  height: 10px;
  width: 10px;
}
#wrap .inner2 {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
  background: #ff1493;
  height: 200px;
  width: 200px;
}

  1. 命名参数
    less:
.juzhong(@w:10px,@h:10px,@c:pink){
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
  background: @c;
  height: @h;
  width: @w;
}
* {
  margin: 0;
  padding: 0;
}
#wrap {
  position: relative;
  width: 300px;
  height: 400px;
  border: 1px solid black;
  margin: 0 auto;
  .inner {
   .juzhong(@c:black);
  }
  .inner2 {
   .juzhong(200px,200px,deeppink);
  }
}

生成的css

* {
  margin: 0;
  padding: 0;
}
#wrap {
  position: relative;
  width: 300px;
  height: 400px;
  border: 1px solid black;
  margin: 0 auto;
}
#wrap .inner {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
  background: #000000;
  height: 10px;
  width: 10px;
}
#wrap .inner2 {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
  background: #ff1493;
  height: 200px;
  width: 200px;
}

  1. 匹配模式
    less:
@import "./triangle.less";
//业务代码
#wrap > .sjx {
  .triangle(B,40px, yellow)
}

trangle.less:

.triangle(@_,@w,@c){
  width: 0px;
  height: 0px;
    /* 开启haslayout-->windows IE */
  overflow: hidden;
}
.triangle(L,@w,@c){
  border-width: @w;
  border-style: dashed solid dashed dashed;
  /* IE6不认识transparent -->画虚线 */
  border-color: transparent @c transparent transparent;
}
.triangle(R,@w,@c){
  border-width: @w;
  border-style: dashed dashed dashed solid;
  /* IE6不认识transparent -->画虚线 */
  border-color: transparent transparent transparent @c;
}
.triangle(T,@w,@c){
  border-width: @w;
  border-style: dashed dashed solid dashed;
  /* IE6不认识transparent -->画虚线 */
  border-color: transparent transparent @c transparent;
}
.triangle(B,@w,@c){
  border-width: @w;
  border-style: solid dashed dashed dashed;
  /* IE6不认识transparent -->画虚线 */
  border-color: @c transparent transparent transparent;
}

生成的css:

@import "./triangle.less";
//业务代码
#wrap > .sjx {
  .triangle(B,40px, yellow)
}
  1. arguments变量

less:

.border(@1,@2,@3){
  border:@arguments;
}
#wrap .sjx{
  .border(1px,solid,black)
}

生成的css:

#wrap .sjx {
  border: 1px solid #000000;
}

less运算

在less中可以进行加减乘除的运算
less:

#wrap .sjx{
  width: (100+100px);
  // less中只需要计算双方的一方带单位就可以了
}

生成的css:

#wrap .sjx {
  width: 200px;
}

less继承 继承与混合的区别

<!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>
    <link rel="stylesheet" href="./css/mixin.css" />
  </head>
  <body>
    <div id="wrap">
      <div class="inner">inner1</div>
      <div class="inner">inner2</div>
    </div>
  </body>
</html>

混合:

mixin.less

*{
  margin:0;
  padding: 0;
}
@import './mixin/juzhong-mixin.less';
#wrap{
  position:relative;
  width: 300px;
  height: 300px;
  border: 1px solid;
  margin:0 auto;
  .inner{
    &:nth-child(1){
      .juzhong(100px,100px,deeppink);
    }
    &:nth-child(2){
      .juzhong(50px,50px,pink);
    }
  }
}

生成的mixin.css:

* {
  margin: 0;
  padding: 0;
}
#wrap {
  position: relative;
  width: 300px;
  height: 300px;
  border: 1px solid;
  margin: 0 auto;
}
#wrap .inner:nth-child(1) {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
  width: 100px;
  height: 100px;
  background-color: #ff1493;
}
#wrap .inner:nth-child(2) {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
  width: 50px;
  height: 50px;
  background-color: #ffc0cb;
}

juzhong-mixin.less

.juzhong(@w,@h,@c){
  position: absolute;
  left:0;
  right: 0;
  top:0;
  bottom: 0;//四边定义为0能居中
  margin: auto;
  width: @w;
  height: @h;
  background-color: @c;
}

继承:

extend.less

*{
  margin:0;
  padding: 0;
}
@import './mixin/juzhong-extend.less';
#wrap{
  position:relative;
  width: 300px;
  height: 300px;
  border: 1px solid;
  margin:0 auto;
  .inner{
    &:extend(.juzhong all);
    &:nth-child(1){
      width: 100px;
      height: 100px;
      background-color: deeppink
    }
    &:nth-child(2){
      width: 50px;
      height: 50px;
      background-color: pink;
    }
  }
}

生成的extend.css

* {
  margin: 0;
  padding: 0;
}
.juzhong,
#wrap .inner {
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  bottom: 0;
  margin: auto;
}
.juzhong:hover,
#wrap .inner:hover {
  background: red!important;
}
#wrap {
  position: relative;
  width: 300px;
  height: 300px;
  border: 1px solid;
  margin: 0 auto;
}
#wrap .inner:nth-child(1) {
  width: 100px;
  height: 100px;
  background-color: #ff1493;
}
#wrap .inner:nth-child(2) {
  width: 50px;
  height: 50px;
  background-color: pink;
}

juzhong-extend.less

.juzhong{
  position: absolute;
  left:0;
  right: 0;
  top:0;
  bottom: 0;//四边定义为0能居中
  margin: auto;
}

.juzhong:hover{
  background: red!important;
}

less避免编译

~“要避免编译的代码”

test.less

*{
  margin: 0+10px;
  padding: ~"calc(100+100px)";
}

生成的test.css

* {
  margin: 10px;
  padding: calc(100+100px);
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值