美文网首页
less的用法

less的用法

作者: 一刀一个小黄鱼 | 来源:发表于2017-04-27 22:28 被阅读736次

    less是一门css预处理语言,它扩充了 CSS 语言,增加了诸如变量、混合(mixin)、函数等功能,让 CSS 更易维护、方便制作主题、扩充。良好的使用可以让代码输入节省很多时间

    一般less的使用,可以下载一个叫koala的软件 百度即可,安装时最好不要有中文路径,然后在文件下创建一个Less格式(文件后缀.less)的文件 在koala中添加文件夹后右键编译文件,就会生成一个css文件,这样就可以在less文件中书写时,就会把编译后的css样式自动写在css文件里,使用的时候引用css文件 就可以了。

    下面是less一些常见的用法:
    首先了解什么是变量,变量就是没有固定的值是可以改变的,在使用时我们需要给变量取个名字叫变量名,然后在进行声明

    1. 变量: 存储数据的容器,数据本身可以修改
    2. 声明:@变量名称:变量的值;
      less的使用可以有几种用法

    使用

    属性值中:@变量名称

    选择器名中:@{变量名称}

    属性名中:@{变量名称}

    在路径中使用:@{变量名称} **注意加引号

    在变量值中使用:@变量名称

    在变量名中使用:@变量名称

    @w: 100px;
    @b: box;
    @bg: background;
    
    #{@b} {
        width: @w;
        height: @w;
        @{bj}: red
    }
    

    显示为

    #box {
        width: 100px;
        height: 100px;
        background: red;
    }
    

    可以给变量增添运算

    #{@b}1 {
      width: @w*2;
      height: @w*3;
      background: red;
    }  
    

    显示为

    #box1 {
        width: 200px;
        height: 300px;
        background: red;
    }
    

    运算的使用

    运算时的单位识别
    如果运算符的左右两侧都有单位,
    加减乘除识别的是运算符左侧的单位
    乘法识别的是运算符右侧的单位

    @w: 100rem;
    @rem: 64px;
    #box {
        width: @w/@rem;
        width: @w*@rem;
        width: @w+@rem;
        width: @w-@rem;
    }
    

    显示为

    #box {
        width: 1.5625rem;
        width: 6400px;
        width: 164rem;
        width: 36rem;
    }
    

    *变量名重名之后,后边会覆盖前边的


    @w2: 100;
    
    @rem2: 64;
    
    #box {
        width: @w2+@rem2+px;
    }
    

    显示

    #box {
        width:164 px; 
    }
    

    这样写在单位和值之间用空格,尽量在变量中添加单位


    作用域

    写在{}之间 叫做局部变量,只可以在{}之间起作用

    @w: 100px;
    .box {
        @w: 200px; 
        width: @w;
    }
    #box {
        width: @w;
    }
    

    显示

    .box {
        width: 200px;
    }
    #box {
        width: 100px;
    }
    
    

    less中的嵌套

    优先识别自己样式

    #box {
        @w: 100px;
        width: @w*3;
        height: 200px;
    }
    li {
        @w: 200px;
        width: @w;
    }
    div {
        width:@w;
    }
    a {
      color: red;
      &:hover { // &上一级
        color: blue;
      }
    }
    

    显示

    #box {
        width: 300px;
        height: 200px;
    }
    li {
      width: 200px;
    }
    a {
      color: red;
    }
    #box a:hover {
        color: blue;
    }
    

    混合

    添加多个样式给一个变量中去使用

    .bor {
        background: red;
        border: 2px solid #000;
    }
     //想让样式在css中不编译,添加一个()在名字后 例.bor() {...}
    #box {
        width: 100px;
        height: 100px;
        .border
    }
    .div {
        width: 200px;
        height: 200px;
        .border; 
    }
    

    显示

    #box {
        width: 100px;
        height: 100px;
        background: red;
        border: 2px solid #000;
    }
    .div {
        width: 200px;
        height: 200px;
        background: red;
        border: 2px solid #000;
    }
    

    带参数的混合

    .name(@color) {
        border: 1px solid @color;
    }
    #box {
        .name(red)
    }
    #box2 {
        .name(blue)
    }
    #box3 {
        .name(#000)
    }
    

    显示

    #box {
        border: 1px solid #ff0000;
    }
    #box2 {
        border: 1px solid #0000ff;
    }
    #box3 {
         border: 1px solid #000000;
    }
    

    带多个参数的混合

    **只要给了@属性后, 下面的样式中就必须要添加具体的数值

    .name(@w,@color) {
        border: @w solid @color;
    }
    #box {
        .name(1px,red);
    }
    
    div {
      .name(red);
    }
    //上面的没有给@w数值,2个变量只有1个 就不能显示,所以是错误的
    #box2 {
        .name(2px,blue);
    }
    #box3 {
        .name(@color:#000,@w:3px);
    }
    

    显示

    #box {
         border: 1px solid #ff0000;
    }
    #box2 {
        border: 2px solid #0000ff;
    }
    #box3 {
         border: 3px solid #000000;
    }
    
    

    添加了参数默认值的混合

    .name{@w:1px,@color:red} {
        border: @w solid @color;
    }
    #box {
        .name;
    }
    #box2 {
        .name()
    }
    #box3 {
        .name(2px,blue);
    }
    #box4 {
        .name(@w:2px,@color:yellow);
    }
    .numble(@x,@y) {
        @name: ((@x+@y) / 2);
    }
    div {
        .numble(16px,50px);
        padding: @name;
    }
    

    结果

    #box {
        border: 1px solid #ff0000;
    }
    #box2 {
        border: 1px solid #ff0000;
    }
    #box3 {
        border:2px solid #0000ff;
    }
    #box4 {
        border: 2px solid #ffff00;
    }
    div {
        padding: 33px;
    }
    

    这样Less就可以在多项样式上添加更加方便

    .boxS() {
        box-shadow+: 0 0 10px #000;
    }
    #box {
        .boxS;
        box-shadow+: inset 0 0 10px red;
    }
    

    显示

    #box {
         box-shadow: 0 0 10px #000, inset 0 0 10px red;
    }
    

    混合中的判断

    给样式设置条件,只有条件成立后才会识别其中的样式

    .width(@w) when (@w >= 200px)
    {
      width:@w;
    }
    #box1 {
        .width(100px);
    }
    #box2 {
        .width(200px);
    }
    #box3 {
        .width(300px);
    }
    
    

    在css中显示

    #box2 {
      width: 200px;
    }
    #box3 {
      width: 300px;
    }
    
    

    给出不同的条件下的样式,根据条件成立来选取不同的样式

       .name(@w,@c,@dir) when (@dir = 1)
       { 
        border-top: @w solid @c;
       }
       .name(@w,@c,@dir) when (@dir = 2)
       {
        border-right: @w solid @c;
       }
       .name(@w,@c,@dir) when (@dir = 3)
       {
        border-bottom: @w solid @c;
       }
       .name(@w,@c,@dir) when (@dir = 4)
       {
        border-left: @w solid @c;
       }
       
       #box {
        .name(2px,red,3);
       }
    

    结果

    #box {
      border-bottom: 2px solid #ff0000;
    }
    

    上面设置不同的变量,当满足变量所要的条件后,就会执行其中的内容。当下面需要变量的样式时,就会找到所含的变量名称后,变量有确定数值的就按照变量走,没有确定数值,就需要自己设置,当对应设置的数值满足上面变量的条件后,就会执行

    > < =  >=  <=
    .name(@w,@c,@dir) when (判断条件)
    {
        //条件成立之后,执行的内容
    }
    .name(@dir) when (@dir = top)
    {
        border-top: 10px solid #000;    
    }
    .name(@dir) when (@dir = right)
    {
        border-right: 10px solid #000;  
    }
    .name(@dir) when (@dir = bottom)
    {
        border-bottom: 10px solid #000;     
    }
    .name(@dir) when (@dir = left)
    {
        border-left: 10px solid #000;   
    }
    #box {
        .name(left); //找到所有叫 .name()的混合
    }
    
    

    循环

    .name(@numble) when (@numble >= 0)
       {
        .name(@numble - 10); //函数调用
        width: @numble; //执行语句
       }
       .box {
        .name(100px);
       }
    
    

    结果

    .box {
      width: 0px;
      width: 10px;
      width: 20px;
      width: 30px;
      width: 40px;
      width: 50px;
      width: 60px;
      width: 70px;
      width: 80px;
      width: 90px;
      width: 100px;
    }
    
    

    从小到大排列 先写函数调用后写执行语句;

    函数调用,都是上面的执行完后才会往下执行,当.box给了.name变量的数值为100px往后执行;

    满足了when >=0,继续往下执行;

    这时.name为100px-10;继续往下width: 就为90px了;

    这时 .name(@numble - 10);这一条还没执行完,会继续在条件满足下运行,当最后结果为不小于0后;

    就会往下执行width=0了;

    然后继续回到上面执行之前的结果,一直到最后为结果显示

    从大到小排列 先执行语句后写写函数调用

    .name(@numble) when (@numble >= 0)
       {
        width: @numble; //执行语句
        .name(@numble - 10);//函数调用
       }
       .box {
        .name(100px);
       }
    

    结果

    .box {
      width: 100px;
      width: 90px;
      width: 80px;
      width: 70px;
      width: 60px;
      width: 50px;
      width: 40px;
      width: 30px;
      width: 20px;
      width: 10px;
      width: 0px;
    }
    
    

    当.box给了最上面.name数值条件得到满足,直接执行width: 为100px了;

    然后往下执行,-10后 继续执行width: 90px;...

    后面循环 直到最后结果小于0的条件。

    相关文章

      网友评论

          本文标题:less的用法

          本文链接:https://www.haomeiwen.com/subject/neiwzttx.html