• Less学习总结


    Less is More , Than CSS

    1. Less是什么?

    LESSCSS是一种动态样式语言,属于CSS预处理语言的一种,它使用类似CSS的语法,为CSS的赋予了动态语言的特性,如变量、继承、运算、函数等,更方便CSS的编写和维护。
    LESSCSS可以在多种语言、环境中使用,包括浏览器端、桌面客户端、服务端。

    2. 编译工具

    (1)koala编译
      Koala
      国人开发的LESS/SASS编译工具。
      下载地址:http://koala-app.com/index-zh.html
    (2)Node.js库
    (3)浏览器端使用

     关于sublime的less环境安装,参考sublime中用less实现css预编译

    3. 常用语法

    (1)注释

    可以使用css中的注释( /**/ )
    也可以用//注释(// 编译时会自动过滤掉)

    ////Less中的编译
    /*我是被编译的*/
    //不会被编译的
    
    ////映射到Css中的编译
    /*我是被编译的*/

    (2)变量

    定义变量使用@开头

    //Less
    @200px;
    @height:200px;
    .title{
        width: @width;
        height: @height;}
    
    //映射到css
    .title {
      margin: 0 auto;
      width: 200px;
      height: 200px;
    }

    (3)混合-(Mixin)

    //less
    .title{
        // .border;
        //.border_1(5px);
        .border_2();
    }
    //混合
    .border{
        border: 2px solid green;
    }
    //混合带参数
    .border_1(@a){
        border: @a solid yellow;
    }
    //混合-默认带值
    .border_2(@a:10px){
        border: @a solid black;
    }
    
    //css
    .title {
      border: 10px solid black;
    }
    .border {
      border: 2px solid green;
    }
    //混合的例子(兼容css3语法)
    //Less
    .border_radius(@radius:5px){
        -webkit-border-radius:@radius;
        -moz-border-radius:@radius;
        border-radius:@radius;
    }
    .radius_test{
        width:100px;
        height: 40px;
        background-color: green;
        //调用混合
        .border_radius(10px);
    }
    
    //css
    .radius_test {
      width: 100px;
      height: 40px;
      background-color: green;
      -webkit-border-radius: 10px;
      -moz-border-radius: 10px;
      border-radius: 10px;
    }

    (4)匹配模式

    //匹配模式-三角形
    //less
    .triangle(top,@w:5px,@c:#ccc){
        border-width: @w;
        border-color: transparent transparent @c transparent;
        border-style: dashed dashed solid dashed;
    }
    .triangle(bottom,@w:5px,@c:#ccc){
        border-width: @w;
        border-color: @c transparent transparent transparent;
        border-style: solid dashed dashed dashed;
    }
    .triangle(left,@w:5px,@c:#ccc){
        border-width: @w;
        border-color: transparent @c transparent transparent;
        border-style: dashed solid dashed dashed;
    }
    .triangle(right,@w:5px,@c:#ccc){
        border-width: @w;
        border-color: transparent transparent transparent @c;
        border-style: dashed dashed dashed solid;
    }
        //@_表示匹配任何一个参数,这里是top、bottom、left、right
    .triangle(@_,@w:5px,@c:#ccc){
        width: 0;
        height: 0;
        overflow: hidden;
    }
    
    .sanjiao{
        .triangle(right,100px);
    }
    
    //css
    .sanjiao {
      border-width: 100px;
      border-color: transparent transparent transparent #ccc;
      border-style: dashed dashed dashed solid;
      width: 0;
      height: 0;
      overflow: hidden;
    }
    //匹配模式 - 定位例子
    //less
    .pos(r){
        position: relative;
    }
    .pos(a){
        position: absolute;
    }
    .pos(f){
        position: fixed;
    }
    
    .pipei{
        width:200px;
        height: 200px;
        background-color: green;
        .pos(r);
    }
    
    //css
    .pipei {
      width: 200px;
      height: 200px;
      background-color: green;
      position: relative;
    }

    (5)运算

    //运算
    //任何数字、颜色或者变量都可以参与运算,运算应该被包裹在括号中
    //less
    @num:300px;
    
    .box{
        width:(@num - 20) * 5;
        color:#ccc - 10;
    }
    
    //css
    .box {
      width: 1400px;
      color: #c2c2c2;
    }

    (6)嵌套规则

    //嵌套
    //less
    /*
    .list{}
    .list li{}
    .list a{}
    .list span{}
     */
    
    .list{
        width:600px;
        margin: 30px auto;
        padding: 0;
        list-style: none;
        
        li{
            height: 30px;
            line-height: 30px;
            background-color: pink;
            margin-bottom: 5px;
            padding:0 10px;
        }
    
        a{
            float: left;
            //& 代表他的上一层选择器
            &:hover{
                color:red;
            }
        }
        span{
            float: right;
        }
    }
    
    //css
    /*
    .list{}(6
    .list li{}
    .list a{}
    .list span{}
     */
    .list {
      width: 600px;
      margin: 30px auto;
      padding: 0;
      list-style: none;
    }
    .list li {
      height: 30px;
      line-height: 30px;
      background-color: pink;
      margin-bottom: 5px;
      padding: 0 10px;
    }
    .list a {
      float: left;
    }
    .list a:hover {
      color: red;
    }
    .list span {
      float: right;
    }

    (7)@arguments变量

    //arguments
    //less
    //@arguments包含了所有传递进来的参数
    .border_arg(@w:30px,@c:red,@xx:solid){
        border:@arguments;
    }
    
    .test_arguments{
        .border_arg(40px);
    }
    
    //css
    .test_arguments {
      border: 40px red solid;
    }

    (8)避免编译

    //避免编译
    //有时候我们需要输出一些不正确的 CSS 语法或者使用一些 LESS 不认识的专有语法
    //要输出这样的值我们可以在字符串前加上一个 ~
    //less
    .test{
        width:~'calc(300px - 30px)';
    }
    
    //css
    .test {
      width: calc(300px - 30px);
    }

    (9)!important关键字

    //!important
    //会为所有混合所带来的样式,添加上!important
    //less
    .test_important{
        .border_radius() !important;   //会为所有混合所带来的样式,添加上!important
    }
    
    //css
    .test_important {
      -webkit-border-radius: 5px !important;
      -moz-border-radius: 5px !important;
      border-radius: 5px !important;
    }

    4. 例子完整代码

    HTML:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>LESS</title>
        <link rel="stylesheet" href="style.css">
    </head>
    <body>
        <div class="title">hello world!</div>
        <div class="radius_test"></div>
        <div class="sanjiao"></div>
        <div class="pipei"></div>
        <div class="box"></div>
    
    
        <ul class="list">
            <li><a href="#">这里是一个测试的文字</a><span>2014-10-22</span></li>
            <li><a href="#">这里是一个测试的文字</a><span>2014-10-22</span></li>
            <li><a href="#">这里是一个测试的文字</a><span>2014-10-22</span></li>
            <li><a href="#">这里是一个测试的文字</a><span>2014-10-22</span></li>
            <li><a href="#">这里是一个测试的文字</a><span>2014-10-22</span></li>
            <li><a href="#">这里是一个测试的文字</a><span>2014-10-22</span></li>
            <li><a href="#">这里是一个测试的文字</a><span>2014-10-22</span></li>
        </ul>
    </body>
    </html>
    View Code

    LESS:

    @charset "utf-8";
    
    @200px;
    @height:200px;
    .title{
        margin: 0 auto;
        width: @width;
        height: @height;
        background-color: red;
        // .border;
        //.border_1(5px);
        .border_2();
    }
    //混合
    .border{
        border: 2px solid green;
    }
    //混合带参数
    .border_1(@a){
        border: @a solid yellow;
    }
    //混合-默认带值
    .border_2(@a:10px){
        border: @a solid black;
    }
    //混合的例子(兼容css3语法)
    .border_radius(@radius:5px){
        -webkit-border-radius:@radius;
        -moz-border-radius:@radius;
        border-radius:@radius;
    }
    .radius_test{
        width:100px;
        height: 40px;
        background-color: green;
        //调用混合
        .border_radius(10px);
    }
    
    //匹配模式-三角形
    .triangle(top,@w:5px,@c:#ccc){
        border-width: @w;
        border-color: transparent transparent @c transparent;
        border-style: dashed dashed solid dashed;
    }
    .triangle(bottom,@w:5px,@c:#ccc){
        border-width: @w;
        border-color: @c transparent transparent transparent;
        border-style: solid dashed dashed dashed;
    }
    .triangle(left,@w:5px,@c:#ccc){
        border-width: @w;
        border-color: transparent @c transparent transparent;
        border-style: dashed solid dashed dashed;
    }
    .triangle(right,@w:5px,@c:#ccc){
        border-width: @w;
        border-color: transparent transparent transparent @c;
        border-style: dashed dashed dashed solid;
    }
        //@_表示匹配任何一个参数,这里是top、bottom、left、right
    .triangle(@_,@w:5px,@c:#ccc){
        width: 0;
        height: 0;
        overflow: hidden;
    }
    
    .sanjiao{
        .triangle(right,100px);
    }
    
    //匹配模式 - 定位例子
    .pos(r){
        position: relative;
    }
    .pos(a){
        position: absolute;
    }
    .pos(f){
        position: fixed;
    }
    
    .pipei{
        width:200px;
        height: 200px;
        background-color: green;
        .pos(r);
    }
    
    //运算
    //任何数字、颜色或者变量都可以参与运算,运算应该被包裹在括号中
    @num:300px;
    
    .box{
        width:(@num - 20) * 5;
        color:#ccc - 10;
    }
    
    //嵌套
    /*
    .list{}
    .list li{}
    .list a{}
    .list span{}
     */
    
    .list{
        width:600px;
        margin: 30px auto;
        padding: 0;
        list-style: none;
        
        li{
            height: 30px;
            line-height: 30px;
            background-color: pink;
            margin-bottom: 5px;
            padding:0 10px;
        }
    
        a{
            float: left;
            //& 代表他的上一层选择器
            &:hover{
                color:red;
            }
        }
        span{
            float: right;
        }
    }
    
    //arguments
    //@arguments包含了所有传递进来的参数
    .border_arg(@w:30px,@c:red,@xx:solid){
        border:@arguments;
    }
    
    .test_arguments{
        .border_arg(40px);
    }
    
    //避免编译
    //有时候我们需要输出一些不正确的 CSS 语法或者使用一些 LESS 不认识的专有语法
    //要输出这样的值我们可以在字符串前加上一个 ~
    .test{
        width:~'calc(300px - 30px)';
    }
    
    
    //!important
    //会为所有混合所带来的样式,添加上!important
    
    .test_important{
        .border_radius() !important;   //会为所有混合所带来的样式,添加上!important
    }
    View Code

    CSS:

    @charset "utf-8";
    .title {
      margin: 0 auto;
      width: 200px;
      height: 200px;
      background-color: red;
      border: 10px solid black;
    }
    .border {
      border: 2px solid green;
    }
    .radius_test {
      width: 100px;
      height: 40px;
      background-color: green;
      -webkit-border-radius: 10px;
      -moz-border-radius: 10px;
      border-radius: 10px;
    }
    .sanjiao {
      border-width: 100px;
      border-color: transparent transparent transparent #ccc;
      border-style: dashed dashed dashed solid;
      width: 0;
      height: 0;
      overflow: hidden;
    }
    .pipei {
      width: 200px;
      height: 200px;
      background-color: green;
      position: relative;
    }
    .box {
      width: 1400px;
      color: #c2c2c2;
    }
    /*
    .list{}(6
    .list li{}
    .list a{}
    .list span{}
     */
    .list {
      width: 600px;
      margin: 30px auto;
      padding: 0;
      list-style: none;
    }
    .list li {
      height: 30px;
      line-height: 30px;
      background-color: pink;
      margin-bottom: 5px;
      padding: 0 10px;
    }
    .list a {
      float: left;
    }
    .list a:hover {
      color: red;
    }
    .list span {
      float: right;
    }
    .test_arguments {
      border: 40px red solid;
    }
    .test {
      width: calc(300px - 30px);
    }
    .test_important {
      -webkit-border-radius: 5px !important;
      -moz-border-radius: 5px !important;
      border-radius: 5px !important;
    }
    View Code

    5. 总结

      CSS代码完全依赖于LESS代码的编写,开发过程中,HTML引入的依旧是CSS代码,而我们编写和修改的是LESS中的样式。Less极大的方便了我们进行CSS样式的编写,因此掌握Lessde 特性,会很大的提高开发效率。

  • 相关阅读:
    VBS基础篇
    AcWing249 蒲公英(分块)
    CF1338B Edge Weight Assignment(思维+dfs)
    CF785E Anton and Permutation(分块)
    UCF Local Programming Contest 2015(Practice)D题
    AcWing851 spfa求最短路
    CF479E Riding in a Lift (dp)
    AcWing267 莫基亚(CDQ分治)
    P4093 [HEOI2016/TJOI2016]序列 (CDQ分治)
    2019ICPC南昌区域赛C题 And and Pair(数位dp)
  • 原文地址:https://www.cnblogs.com/guorange/p/7375059.html
Copyright © 2020-2023  润新知