Less基础

执行时用js编译less

<style type="text/less">
  #wrap{
        width: 500px;
        height: 500px;
        border: 1px solid;
        .inner{
                width: 100px;
                height: 100px;
                background: pink;
        }
}
<script src="//cdnjs.cloudflare.com/ajax/libs/less.js/2.5.3/less.min.js"></script>

Less编译工具 koala 官网:www.koala-app.com

less中的注释

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

变量

// @定义的 选择器,属性名,url  使用时必须 @{xx}使用  .
// 属性值不能@{}使用 会报错
@color:pink;
@selector:wrap;
@margin:margin;
@background_url:'http://xx.jpg';
.@{selector}{
    @{margin}:20px;
    color:@color;
    background-image: url('@{background_url}');
}

变量的延迟加载

{}是less的作用域  赋值时取的是作用域内变量最终的结果 ,当前作用域不存在变量取上层作用域最终结果
@size:10;
.wrap{
    border: @size px solid; //10px
    .inner{
        @size:1px;
        border: @size solid; //20px 
        @size:20px;
    }
}
//编译结果
.wrap {
  border: 10 px solid;
}
.wrap .inner {
  border: 20px solid;
}

嵌套规则

//以.inner为基准的伪类 用&符开头&就相当于.inner本身  不写会视为子选择器
.inner{
        width: 100px;
        height: 100px;
        background:@color;
        &:hover{
            background: black;
        }
    }

混合 (提取公共代码 跟函数很像的东西 可以传参,以.开头)

<!--普通混合  编译时会被当成类选择器 加入css文件 -->
@color:pink;
.common{
    width: 100px;
    height: 100px;
}
.wrap{
    .inner1{
        .common;
    }
    .inner2{
        .common;
    }
}
<!--不带参数的混合 编译时不会被当成类选择器加入css文件-->
.common(){....} 
<!--带参数的混合 编译时不会被当成类选择器加入css文件-->
//除非是有默认值的形参 否则一旦定义了形参 就算混合内部没用上这个形参 调用时不传实参也会报错
//形参的默认值 可以是其他变量
@color:#fff;
.common(@margin,@c:@color){
    width: 100px;
    height: 100px;
    background:@c;
    margin: @margin;
    &:hover{
        background: black;
    }
}
.wrap{
    .inner1{
        .common(10px,#666);
    }
    .inner2{
        .common(20px);
        border: 1px solid;
    }
}
<!--命名参数-->
// 调用时 无视参数的顺序 指定参数的值
@color:#fff;
.common(@margin,@pd:10px,@c:@color){
    width: 100px;
    height: 100px;
    background:@c;
    margin: @margin;
    padding:@pd;
    &:hover{
        background: black;
    }
}
.wrap{
    .inner1{
        .common(@margin:20px);
    }
    .inner2{
        .common(@pd:20px,@margin:30px);
        border: 1px solid;
    }
}

<!--匹配模式--->
//可以将匹配混合集的公共代码提取,名字一致  写了@_后(形参个数也必须一致) 一旦混合被匹配上会自动调用 
.sjx(@_,@ww,@cc){
    width: 0px;
    height: 0px;
    overflow: hidden; 
    border-width: @ww;
}
.sjx(T,@width,@color){
    //border-width: @width;
    border-style:solid dashed dashed dashed;
    border-color:@color transparent transparent transparent ;
}
.sjx(R,@width,@color){
    //border-width: @width;
    border-style:dashed solid dashed dashed;
    border-color:transparent @color transparent transparent ;
}
.wrap{
    .inner{
        .sjx(T,20px,yellow);//根据标识 调用匹配上的混合
    }
}

<!-- arguments 混合内部使用实参时不用一个个写 一次性写完 鸡肋的一个功能-->
.border(@w,@style,@c){
    border: @arguments;
}

.wrap .sjx{
   .border(1px,solid,black)
}

继承

//继承的灵活性不好 但是性能好 , 与混合相比(混合编译后css相当于复制粘贴) 继承则不会出现重复的代码

.juzhong{
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    top: 0;
    margin: auto;
}

.juzhong:hover{
    background: red!important;
}
.juzhong .test{
    color: red;
}
.inner{
        &:extend(.juzhong all); //all表示 以.juzhong开头的全部继承 (这里:hover .test都会继承)
        &:nth-child(1){
           width: 100px;
           height: 100px;
           background: pink;
        }
        &:nth-child(2){
           width: 50px;
           height: 50px;
           background: yellow;
        }
}
//最终生成的css文件,就是 分组选择器
.juzhong,
.wrap .inner {
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  top: 0;
  margin: auto;
}
.juzhong:hover,
.wrap .inner:hover {
  background: red!important;
}
.juzhong .test,
.wrap .inner .test {
  color: 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: pink;
}
.wrap .inner:nth-child(2) {
  width: 50px;
  height: 50px;
  background: yellow;
}

避免编译

margin: ~"calc(10+10)";  ~" xxx"里的内容 不会被less编译 

引入其他less文件

@import './xx.less'; //可以将一些混合写入其他文件 使用时引入这个文件就行
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2.21学习经验分享# Bruce_Zhu于2017.2.21 一、LESS基础 LESS 是一门 CSS 预处理...
    旅行的意义zxy阅读 339评论 0 0
  • 变量 适用于定义主题,我们可以将背景颜色、字体颜色、边框属性等常规样式进行统一定义,这样不同的主题只需要定义不同的...
    dadadahui阅读 744评论 0 0
  • Less 是一门 CSS 预处理语言,使用了类似CSS的语法,为CSS赋予了动态语言的特征。它扩展了 CSS 语言...
    嘿喵heyMeow阅读 171评论 0 0
  • 工具:koala 下载完成后将含有less文件的文件夹拖入,指出导出的css文件的路径既可以进行编译。下面是les...
    poppyl阅读 286评论 0 0
  • 什么是Less? Less是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS的赋予了...
    执凉阅读 477评论 1 0