zoukankan      html  css  js  c++  java
  • LESS SCSS 预编译语言

      前  言

    JRedu

     LESS  是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,使 CSS 更易维护和扩展。

    LESS 为 Web 开发者带来了福音,它在 CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了 CSS 的编写,并且降低了 CSS 的维护成本,就像它的名称所说的那样,LESS 可以让我们用更少的代码做更多的事情。

     Sass 是一款强化 CSS 的辅助工具,它在 CSS 语法的基础上增加了变量 (variables)、嵌套 (nested rules)、混合 (mixins)、导入 (inline imports) 等高级功能,这些拓展令 CSS 更加强大与优雅。使用 Sass 以及 Sass 的样式库(如 Compass)有助于更好地组织管理样式文件,以及更高效地开发项目。

    1  LESS预编译语言



    1.1LESS的基础语法

    1、声明变量:@变量名:变量值;
     使用变量:@变量名
     >>>变量使用的原则:
     多次频繁出现的值,后期需要统一修改的值,或者牵扯到数值运算的值,推荐使用变量
     >>>LESS中的变量类型
     在CSS中出现的属性值,在less中都可以用作变量名
     ① 数值类:不带单位的 123 带单位的 1px
     ② 字符串类型:带引号的"hahah" 不带引号的 red #ff000
     ③ 颜色类:red #ff000 rgb(255,255,0)
     ④ 值列表类型:多个值用逗号或空格分隔 10px solid red

    @color:#ff0000;
    @length:100px;
    #div1{
         @length;
        height: @length*2;
        background-color: @color;
    }


     2、混合(Mixins)


     ①、无参混合
     声明 .class{}
     调用:在选择器中使用.class 直接调用
     


    //无参混合 .borderRadius{ border-radius: 10px; -webkit-border-radius: 10px; -moz-border-radius: 10px; }

    //调用

    .class{
    10px;
    height: 10px;
    .borderRadius();
    }

     

    ② 有参无默认值混合
     声明.class(@param)
     调用:.class(paramValue)//有参无默认值混合

    //有参无默认值混合
    .borderRadius1(@radius){ border-radius: @radius; -webkit-border-radius: @radius; -moz-border-radius: @radius; }
    //调用
    .class{

    10px;
    height: 10px;
    .borderRadius1(20px);

    }

     


     ③ 有参有默认值混合
     声明:.class(@param:10px)
     调用:.class(paramValue) 或 .class()

    //有参有默认值混合
    .borderRadius2(@radius:10px){ border-radius: @radius; -webkit-border-radius: @radius; -moz-border-radius: @radius; }

    .class{
    10px;
    height: 10px;
    .borderRadius2();
    }

     


     >>>如果声明时没有给参数赋默认值,则调用时必须赋值,否则报错
     >>>无参混合实际上就是一个普通的class选择器,会被编译到css文件中,
     而有参混合在编译时,不会出现在css文件中


     3、less中的匹配模式:类似于switch 结构
     ① 声明: @pipei(条件一,参数) {} @pipei(条件二,参数) {} @pipei(@_,参数) {}
     ② 调用:@pipei(条件的值,参数的值){}
     ③ 匹配规则:
     根据调用时输入的条件值,去寻找与之匹配的混合执行,
     @_不管匹配成功与否,都会执行的选项。

    .pipei(lefts,@10px){
        margin-left: @width;
    }
    .pipei(rights,@10px){
        margin-right: @width;
    }
    .pipei(tops,@10px){
        margin-top: @width;
    }
    .pipei(bottoms,@10px){
        margin-bottom: @width;
    }
    .pipei(@_,@10px){
        padding: 10px;
    }
    //@_不管匹配成功与否,都会执行的选项。 @position:leftss; .class1{ .pipei(@position,20px); }


    4、arguments特殊变量
    在混合中,@arguments表示混合传入的所有参数.@arguments中的所有参数之间,用空格分隔。
     .argu(@width,@style,@color){
    border: @arguments;--> border: @width @style @color;
    }

    .argu(@width,@style,@color){
        //border: @width @style @color;
        border: @arguments;
    }
    .class2{
        .argu(10px,solid,red);
    }


    5、less中加减乘除运算:
    less中的所有变量和数值,可以进行加减乘除运算
    需要注意的是,当颜色值运算时,红绿蓝分三组运算,组内单独计算,组间互不干涉。
    6、less中的嵌套
    less允许CSS选择器按照HTML代码的结构进行嵌套
    section{
    >p{}
    ul{
    &:hover
    }
    }
    ① less中的嵌套默认是后代选择器,如果需要子代选择器,需要在前面加>
    ② &符号,表示这个&所在的上一层选择器,比如上述&表示section ul:hover

    1.2 SCSS预编译语言

    3.2.1SCSS基础语法

    /注释一:编译时不会被编译到CSS文件中
    /*
    * 注释二:在非compressed模式下,会被编译到CSS文件中。
    *
    */
    /*!
    * 注释三:重要注释,在各种压缩模式下,都会被编译到CSS文件中。
    */
    !scss基础语法
     1、scss中的变量
     ① 声明变量 $变量名:变量值;
     scss 中允许将变量嵌套在字符串中,但是变量必须使用井{}包裹
     eg:border-井{$left}:10px solid red;

    $100px;
    $position:left;
    #div1{
         $width;
        height: $width;
        background-color: red;
        border-#{$position}:10px solid green ;
    }


     2、scss中的运算:会将单位进行运算。使用时需注意最终的单位是否正确。
     eg:10px*10px=100 px*px


     3、scss中的嵌套:选择器嵌套 属性嵌套 伪类嵌套
     ① 选择器嵌套 ul{li{}}
     嵌套默认表示后代选择器,如果需要子代选择器,可以在选择器前加>
     可以在选择器的{}中,使用&表示上一层的选择器
     ② 伪类嵌套 :li{&:hover{}}
     在选择器的{}中,使用&配合伪类事件,可以表示当前选择器的伪类
     ③ 属性嵌套 font:{size:18px;} -->font-size:18px
     对于属性名有-分隔为多段的属性,可以使用属性嵌套,属性名的前半部分必须紧跟一个:,才能使用{}包裹属性的后半部分。

    section{
        background-color: #CCCCCC;
        p{
            color: red;
        }
        ul{
            padding: 0px;
            li{
                list-style: none; 
                font:{
                    size: 16px;
                    weight:bold;
                    family:"微软雅黑";
                    style:"italic";
                }
                //& =="section ul li"
            }
        }
    }

    对应的CSS文件:

    section {
      background-color: #CCCCCC;
    }
    section p {
      color: red;
    }
    section ul {
      padding: 0px;
    }
    section ul li {
      list-style: none;
      font-size: 16px;
      font-weight: bold;
      font-family: "微软雅黑";
      font-style: "italic";
    }


     4、 混合宏 继承 占位符
     ① 混合宏 使用@mixin声明混合宏,在其他选择器中使用@include调用混合宏
     eg: @mixin hunhe($param:value){} .class{ @include hunhe(value); }
     @mixin hunhe{$param:value} .class{@include hunhe();}

     >>>声明时,可以有参数,也可以没有参数。参数可以有默认值,也可以没有默认值。
     但是调用时,必须符合声明时的要求。与less中 的混合相同
     >>>优点:① 可以传参 ② 不会产生同名的class
     >>>缺点:调用时,会把混合宏中的所有代码copy到选择器中,产生大量冗余代码

    //混合宏
    @mixin hunhe($color:red){
        color: $color;
    }
    .class3{
        @include hunhe;
        background-color: yellow;
    }
    .class4{
        @include hunhe;
        background-color: blue;
    }


     ② 继承:声明一个普通的class,在其他选择器中使用@extend 继承这个class
     .class1{} .class2{@extend .class1;}
     >>>优点:将相同的代码,提取到并集选择器,减少冗余代码
     >>>缺点:①不能传参;②会生出一个多余的class

    //继承
    .class1{
        color: red;
    }
    .class{
        @extend .class1;
        background-color: yellow;
    }

     ③占位符:使用%声明占位符,在其他选择器中使用@extend继承占位符;
     %class{} .class1{@extend %class;}
     >>>优点:①将相同代码,提取到并集选择器,减少冗余代码 ② 不会产生同名的class
     >>>缺点:不能传参

    %class1{
        color: red;
    }
    .class4{
        @extend %class1;
        background-color: yellow;
    }


     5、if条件结构
     条件结构需要写在选择器里面,条件结构的{}直接包裹样式属性。
     @if 条件{
     @else{}
     }

    //scss中的条件语句
    .class6{
         100px;
        height: 100px;
        @if 1>2 {
            background-color: yellow;
        }
        @else{
            background-color: green;
        }
    }


     6、for循环
     @for $i from 1 to 10{} 不包含10
     @for $i from 1 through 10{} 包含10

    @for $i from 1 to 10{
        .border-#{$i}{
            border: #{$i}px solid red;
        }
    }


     7、while循环
     $i:0;
     @while $i<10{
     $i:$i+1;
     }

    $i:0;
    @while $i<10{
        .while-#{$i}{
            border: #{$i}px solid red;
        }
        $i:$i + 1;
    }


     8、 each 循环遍历
    @each $item in a,b,c,d{
     //$item 表示 a,b,c,d中的每一项
     }

    //each 循环遍历
    @each $item in c1,c2,c3,c4{
        $i:$i+1;
        .#{$item}{
            border: #{$i}px solid red;
        }
    }

     

  • 相关阅读:
    序列化与反序列化之Kryo
    集合框架
    dubbo配置方式简单介绍
    sql(Oracle)优化之索引
    多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合
    Storm 性能优化
    web.xml配置重理解
    Java各个版本的新特性
    这两天光写shell了,再贴一段代码,以供日后参考。
    Hadoop常用操作笔记
  • 原文地址:https://www.cnblogs.com/zzzzyy/p/7534804.html
Copyright © 2011-2022 走看看