zoukankan      html  css  js  c++  java
  • less语法总结学习

    1.变量

    1.属性值作为变量

    @color:#333;
    div{
      background:@color;
    }

    2.选择器作为变量

    @mySelector: #wrap;
    @Wrap: wrap;
    @{mySelector}{ //变量名 必须使用大括号包裹
          color: #999;
           50%;
     }
     .@{Wrap}{
          color:#ccc;
     }
     #@{Wrap}{
          color:#666;
     }  
      /* 生成的 CSS */
     #wrap{
          color: #999;
           50%;
     }
    .wrap{
          color:#ccc;
     }
    #wrap{
          color:#666;
     }

    3.属性值作为变量 

         @borderStyle: border-style;
          @Soild:solid;
          #wrap{
            @{borderStyle}: @Soild;//变量名 必须使用大括号包裹
          }
          /* 生成的 CSS */
          #wrap{
            border-style:solid;
          }
    

    4.url路径作为变量

         @images: "../img";//需要加引号
          body {
            background: url("@{images}/dog.png");//变量名 必须使用大括号包裹
          }
          /* 生成的 CSS */
          body {
            background: url("../img/dog.png");
          }
    

    5.申明变量作为方法 eg:@name{};

        @background: {background:red;};
          #main{
              @background();
          }
          @Rules:{
               200px;
              height: 200px;
              border: solid 1px red;
          };
          #con{
            @Rules();
          }
        
          /* 生成的 CSS */
          #main{
            background:red;
          }
          #con{
             200px;
            height: 200px;
            border: solid 1px red;
          }
    

    6.变量运算

    规则:

    加减法时,以第一个数据的单位为基准。

    乘除法时,注意单位一定要统一。

          @300px;
          @color:#222;
          #wrap{
            @width-20;
            height:@width-20*5;
            margin:(@width-20)*5;
            color:@color*2;
            background-color:@color + #111;
          }
          /* 生成的 CSS */
          #wrap{
            280px;
            height:200px;
            margin:1400px;
            color:#444;
            background-color:#333;
          }    
    

    7.变量的作用域

    就近原则,不是指代码的位置,而是指代码的层级结构。

    @color:red;
    div{
      @color:blue;
      background: @color;
    }

    8.用变量定义变量

    解析的顺序是从后向前逐层解析。

          @fnord:  "I am fnord.";
          @var:    "fnord";
          #wrap::after{
            content: @@var; //将@var替换为其值 content:@fnord;
          }
          /* 生成的 CSS */
          #wrap::after{
            content: "I am fnord.";
          }
    

    2.嵌套 

    1.&符号,表示的是上1级选择器的名字。

         #header{
            &:after{ //注意:不能省略&,如果省略会给每一个子元素添加一个after。
              content:"Less is more!";
            }
            .title{
              font-weight:bold;
            }
            &_content{//理解方式:直接把 & 替换成 #header
              margin:20px;
            }
          }
          /* 生成的 CSS */
          #header::after{
            content:"Less is more!";
          }
          #header .title{ //嵌套了
            font-weight:bold;
          }
          #header_content{//没有嵌套!
              margin:20px;
          }
    

    2.嵌套覆盖原有样式

    div{
      200px;
      height:200px;
      background:red;
      .show{
          display: none;
      }
    }
    .show{
      display: block; //被覆盖,只有在div使用show时才覆盖
    }
    

    3.媒体查询

    css写法:

    @media only screen and {max-width:1200px;}{
      div{}
    }
    @media only screen and  {min-992px;}{
      div{}
    }
    @media only screen and {min-768px}{
      div{}
    }
    

    less写法:

    #main{
      @media screen{
          @media (max-768px){
            100px;
          }
      }
      @media tv {
        2000px;
      }
    }
    /* 生成的 CSS */
    @media screen and (max-768px){
      #main{
          100px;
      }
    }
    @media tv{
      #main{
        2000px;
      }
    }
    

    4.混合方法

    1.基本方法

    要点:“.”与“#”都可以作为方法前缀。可以不适用小括号,但是为了避免css格式混淆,建议加上小括号“()”。

    .card(){
      background: red;
    }
    #post(){
      color: #fff;
    }
    // 或者
    .card{
      background: red;
    }
    #post{
      color: #fff;
    }
    #wrap{
      .card();
      #post();
    }
    //生成的css
    .card {
      background: red;
    }
    #post {
      color: #fff;
    }
    #wrap {
      background: red;
      color: #fff;
    }
    

    2.传参的方法,第一传入默认参数,第二可以传入不定参数,类似函数

    .setSize(@width_size,@height_size){
      @width_size;
      height:@height_size;
    }
    .card(){
      background: red;
    }
    .setFont(@color:#fff,@fontSize:20px){
      color: @color;
      font-size: @fontSize;
    }
    .boxShadow(...){
      box-shadow: @arguments;
    }
    .textShadow(@a,...){
      text-shadow: @arguments;
    }
    #wrap{
      .setSize(100px,200px);
      .card();
      .setFont();
      .boxShadow(1px,4px,30px,blue);
      .textShadow(1px,4px,30px,green);
    }
    //生成的css
    #wrap {
       100px;
      height: 200px;
      background: red;
      color: #fff;
      font-size: 20px;
      box-shadow: 1px 4px 30px blue;
      text-shadow: 1px 4px 30px green;
    }
    

    3.多个方法的情况下的匹配

    类似于多态。有点类似于switch case

    同一个方法名的多个方法,由于传入的参数不同而实现不同的功能。

    .triangle(top,@20px,@color:#000){
      border-color:transparent  transparent @color transparent ;
    }
    .triangle(right,@20px,@color:#000){
      border-color:transparent @color transparent  transparent ;
    }
    
    .triangle(bottom,@20px,@color:#000){
      border-color:@color transparent  transparent  transparent ;
    }
    .triangle(left,@20px,@color:#000){
      border-color:transparent  transparent  transparent @color;
    }
    .triangle(@_,@20px,@color:#000){
      border-style: solid;
      border- @width;
    }
    #main{
      .triangle(left, 50px, #999)
    }
    /* 生成的 CSS */
    #main{
    border-color:transparent  transparent  transparent #999;
    border-style: solid;
    border- 50px;
    }

    4.方法的嵌套用法,类似js的对象

    在 CSS 中> 选择器,选择的是儿子元素,就是必须与父元素有直接血源的元素。 - 在引入命令空间时,如使用 > 选择器,父元素不能加括号。 - 不得单独使用命名空间的方法必须先引入命名空间,才能使用其中方法。 - 子方法可以使用上一层传进来的方法
    #card(){
      background: #723232;
      .d(@w:300px){
           @w;
          #a(@h:300px){
              height: @h;//可以使用上一层传进来的方法
               @w;
          }
      }
    }
    #wrap{
      #card > .d > #a(100px); // 父元素不能加 括号
    }
    #main{
      #card .d();
    }
    #con{
      //不得单独使用命名空间的方法
      //.d() 如果前面没有引入命名空间 #card ,将会报错
      #card; // 等价于 #card();
      .d(20px); //必须先引入 #card
    }
    /* 生成的 CSS */
    #wrap{
      height:100px;
      300px;
    }
    #main{
      300px;
    }
    #con{
      20px;
    }
    

    5.条件的使用:less具有一个when,and,not与“,”语法

    比较运算有:> >= = =< <  

    =代表是等于

    除去关键字true以外的值其他都会被默认为fales

    #card{
      // and 运算符 ,相当于 与运算 &&,必须条件全部符合才会执行
      .border(@width,@color,@style) when (@width>100px) and(@color=#999){
          border:@style @color @width;
      }
      // not 运算符,相当于 非运算 !,条件为 不符合才会执行
      .background(@color) when not (@color>=#222){
          background:@color;
      }
      // , 逗号分隔符:相当于 或运算 ||,只要有一个符合条件就会执行
      .font(@size:20px) when (@size>50px) , (@size<100px){
          font-size: @size;
      }
    }
    #main{
      #card>.border(200px,#999,solid);
      #card .background(#111);
      #card > .font(40px);
    }
    /* 生成后的 CSS */
    #main{
      border:solid #999 200px;
      background:#111;
      font-size:40px;
    }
    

    6.循环语法

    .generate-columns(@n, @i: 1) when (@i =< @n) {
      .column-@{i} {
         (@i * 100% / @n);
      }
      .generate-columns(@n, (@i + 1));
    }
    .generate-columns(4);
    /* 生成后的 CSS */
    .column-1 {
       25%;
    }
    .column-2 {
       50%;
    }
    .column-3 {
       75%;
    }
    .column-4 {
       100%;
    }
    

    7.使用important:   相当于这个方法中的每一个属性都设置了一遍important,不允许覆盖

    .border{
      border: solid 1px red;
      margin: 50px;
    }
    #main{
      .border() !important;  //border里面的每个属性都会被important
    }
    /* 生成后的 CSS */
    #main {
      border: solid 1px red !important;
      margin: 50px !important;
    }
    

    8.继承属性:extend是less的一个伪类。它可以继承所匹配声明中的全部样式。

    加上all  可以继承所有属性

    选择器和扩展之间 是允许有空格的:pre:hover :extend(div pre).

    可以有多个扩展: pre:hover:extend(div pre):extend(.bucket tr) - 注意这 与 pre:hover:extend(div pre, .bucket tr)一样。

    扩展必须在最后 : pre:hover:extend(div pre).nth-child(odd)。 如果一个规则集包含多个选择器,所有选择器都可以使用extend关键字。

    .mainBg{
      background: red;
      .fontSize{
        color: #fff;
      }
    }
    
    #main{
      background: green;
       100px;
      height: 100px;
      &:extend(.mainBg);
    }
    #con{
      background:blue;
       100px;
      height: 100px;
      &:extend(.mainBg .fontSize);
    }
    #wrap:extend(.mainBg all) {
       100px;
      height: 100px;
      font-size: 30px;
    }
    //生成的css
    .mainBg,
    #main,
    #wrap {
      background: red;
    }
    .mainBg .fontSize,
    #con,
    #wrap .fontSize {
      color: #fff;
    }
    #main {
      background: green;
       100px;
      height: 100px;
    }
    #con {
      background: blue;
       100px;
      height: 100px;
    }
    #wrap {
       100px;
      height: 100px;
      font-size: 30px;
    }
    

    9.导入

    在less文件中可以引入其他的less文件。使用关键字import。

    导入less文件,可以省略后缀。

    import “index.less”;
    import “index”;

    @import可以放在任何地方

    @import 'index.less'

    加reference属性,不会编译该引入文件,但是可以使用该文件的变量

    @import (reference) “bootstrap.less”;

    加once属性,表明相同的文件只会被导入一次,而随后的导入文件的重复代码都不会解析。

    @import (once) "foo.less";
    @import (once) "foo.less"; // this statement will be ignored

    加multiple属性,允许导入多个同名文件

    @import (multiple) "foo.less";
    @import (multiple) "foo.less";
    

    10.避免编译

     #main{
         ~'calc(300px - 30px)';
     }
        
    /* 生成后的 CSS */
    #main{
        calc(300px - 30px);
    }
    

    11.在less中使用js

  • 相关阅读:
    详细的描述一个测试活动完整的过程
    黑盒测试的测试用例常见设计方法都有哪些?请分别以具体的例子来说明这些方法在测试用例设计工作中的应用。
    测试计划工作的目的是什么?测试计划文档的内容应该包括什么?其中哪些是最重要的?
    redo log 有什么作用?
    Spring的简介和优点?
    java的语法基础(二)
    相对于Statement,PreparedStatement的优点是什么?
    MyBatis 的好处是什么?
    python中字符串的编码和解码
    相对于Statement,PreparedStatement的优点是什么?
  • 原文地址:https://www.cnblogs.com/sure2016/p/12073524.html
Copyright © 2011-2022 走看看