zoukankan      html  css  js  c++  java
  • Less小总结

    Less 是一个Css 预编译器,意思指的是它可以扩展Css语言,添加功能如允许变量(variables),混合(mixins),函数(functions) 和许多其他的技术,让你的Css更具维护性,主题性,扩展性。

    Less要CSS语法的基础上进行了扩展,主要包含:Variables,Mixins、Nested Rules、Functions & Operations、Client-side usage、Server-side usage等等

    1.变量——Variables

    
        Less中的变量有以下规则:
        以@作为变量的起始标识,变量名由字母、数字、_和-组成
        没有先定义后使用的规定;
        以最后定义的值为最终值;
        可用于rule值、rule属性、rule属性部件、选择器、选择器部件、字符串拼接;
        定义时 "@变量名: 变量值;" 的形式;引用时采用 "@变量名" 或 "@{变量名}" 的形式;
        存在作用域,局部作用域优先级高于全局作用域。
        
    
                    /*======== 定义变量===========*/
    				@color: #4d926f;
    				/*======== 应用到元素中 ========*/
    				#header {
    					color: @color;
    				}
    				h2 {
    					color: @color;
    				}
       

    Less中的变量还具有计算功能

    
                    @nice-blue: #5b83ad;
    				@light-blue: @nice-blue + #111;
    				#header {
    					color: @light-blue;
    				}
        

    我们还可以定义一个变量名为变量,在Less中的变量实际上就是一个“常量”,因为它们只能被定义一次。后的@color可以覆盖前面的@color

    
                @color: #253636;
    			@highlight: "color";
    			#header {color: @@highlight;}
        

    混入——Mixins

    混入其实就是一种嵌套,它充许你将一个类嵌入到另一个类中,而被嵌入的这个类也称为是一个变量。换句话说,你可以用一个类定义CSS,然后把整个为当作一个变量来使用,嵌入到另一个类中当作他的属性;另外混入也像一个带有参数的functions.这样任何CSS的类或ID下的样式都可以当作变量,使用混入模式用来当作另一个元素的属性值。

    
                    .roundedCorners(@radius:5px) {
    					-moz-border-radius: @radius;
    					-webkit-border-radius: @radius;
    					border-radius: @radius;
    				}
    				/*========== 定义的类应用到另个一个类中 ===========*/
    				#header {
    					.roundedCorners; //等同于.roundedCorners();
    				}
    				#footer {
    					.roundedCorners(10px);
    				}
        

    还有一种方法就是给Mixins不定我任何参数,特别是在你想隐藏输出的CSS规则,但又想在别的规则中包含他的属性,使用这种不带参数的Mixins将非常有用的

    
                    .wrap(){
    					text-wrap: wrap;
    					white-space: pre-wrap;
    					white-space: -moz-pre-wrap;
    					word-wrap: break-word;
    				}
    				pre {
    					.wrap; !important; //对pre引用内的都加上 !important
    				}
        
    
                    .wrap(){
    					text-wrap: wrap;
    					white-space: pre-wrap;
    					white-space: -moz-pre-wrap;
    					word-wrap: break-word;
                       &:hover
                       {
                       color:red;
                       }
    				}
    				pre {
    					.wrap;  //这里 也包含有pre的hover样式
    				}
        
    
            .aa()
            {
                .inn
                {
                 color:blue;
                }
            }
            .cc
            {
                .aa > .inn; //可以这样引用,以下都是等价的
                .aa > .inn();
                //.aa.inn();
                //.aa.inn
            }
        
    
            .mixin(@color) {
              color-1: @color;
            }
            .mixin(@color; @padding:2) {
              color-2: @color;
              padding-2: @padding;
            }
            .mixin(@color; @padding; @margin: 2) {
              color-3: @color;
              padding-3: @padding;
              margin: @margin @margin @margin @margin;
            }
            .some .selector div {
              .mixin(#008000);
            }
    
            //输出:
            .some .selector div {
            color-1: #008000;
            color-2: #008000;
            padding-2: 2;
            }
            //如果是.mixin(#008000,4);
            //输出:
            .some .selector div {
             color-2: #008000;
             padding-2: 4;
             color-3: #008000;
             padding-3: 4;
             margin: 2 2 2 2;
            } 
        

    上面这个不是太好理解,可以使用命名参数

    
            .mixin(@color: black; @margin: 10px; @padding: 20px) 
            {
              color: @color;
              margin: @margin;
              padding: @padding;
            }
            .class1 {
              .mixin(@margin: 20px; @color: #33acfe);
            }
            .class2 {
              .mixin(#efca44; @padding: 40px);
            }
        

    @argument在混合中有特殊的意义,它包含了所有的参数传递。这是有用的,如果你不想处理个别参数

    
            .box-shadow(@x: 0; @y: 0; @blur: 1px; @color: #000) {
            -webkit-box-shadow: @arguments;
            -moz-box-shadow: @arguments;
            box-shadow: @arguments;
           }
            .big-block {
            .box-shadow(2px; 5px);
            }
            //如下
            .big-block {
            -webkit-box-shadow: 2px 5px 1px #000;
            -moz-box-shadow: 2px 5px 1px #000;
            box-shadow: 2px 5px 1px #000;
            }
        

    对于...的参数形式,表示不定个数的参数

    
            .mixin(...) {        // matches 0-N arguments
            .mixin() {           // matches exactly 0 arguments
            .mixin(@a: 1) {      // matches 0-1 arguments
            .mixin(@a: 1; ...) { // matches 0-N arguments
            .mixin(@a; ...) {    // matches 1-N arguments
            .mixin(@a; @rest) {  //使用这个变量名后,将这些参数分配给变量。
        

    还有一个@switch进行复合利用

    
            .mixin(dark; @color) {
              color: darken(@color, 10%);
            }
            .mixin(light; @color) {
              color: lighten(@color, 10%);
            }
            .mixin(@_; @color) { //匹配任意
              display: block;
            }
    
            @switch:light;
            .class
            {
            .mixin(@switch;#999);
            }
            //得到
            .class {
                color: #a2a2a2;
                 display: block;
            }
        

    作为函数的混合形式

    
            .mixin() {
             @  100%;  //这个体只是用来定义变量,
             @height: 200px;
            }
    
            .caller {
             .mixin();
               @width;
             height: @height;
            }
            //得到
            .caller {
               100%;
             height: 200px;
            }
        
    
             .average(@x, @y) {
              @average: ((@x + @y) / 2);
              }
    
               div {
               .average(16px, 50px); // "call" the mixin
               padding: @average;    // use its "return" value
             }
            //得到
            div {
            padding: 33px;
            }
        

    导入less:标准的css必须提前导入再使用,但less不要求,可以在后面导入

    
            .foo {
             background: #900;
            }
            @import "dssd/.less";
        

    less分支判断
    .dd (@a) when (@a){}
    .dd (@a) when (@a>=3){...}
    .mixin (@a) when (@a > 10), (@a < -10) { ... }
    .max (@a; @b) when (@a < @b) { @b }
    .mixin (@a; @b: 0) when (isnumber(@b)) { ... }
    default()函数只是剩余分支的情况
    .mixin (@a) when (@a > 0) { ... }
    .mixin (@a) when (default()) { ... } // 这里就是 when @a <= 0
    when not进行反转
    .mixin (@b) when not (@b > 0) { ... }

    循环:珊格

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

    合并特性:性能够聚合多个属性从而形成一个用逗号分隔的单一属性

    
            .mixin() {
              box-shadow+: inset 0 0 10px #555;
            }
            .myclass {
              .mixin();
              box-shadow+: 0 0 20px black;
            }
    
            // 为了避免意外的合并,merge 需要在每个需要合并的属性名后面添加一个 + 以作标示
            // 输出
            .myclass {
                box-shadow: inset 0 0 10px #555, 0 0 20px black;
            }
        

    父选择器&

    
            a 
            {
              color: blue;
              &:hover {
                color: green;
               }
             }
            // 又如
            .button 
            {
                &-ok {
                 background-image: url("ok.png");
                }
    
                &-cancel {
                  background-image: url("cancel.png");
                }
    
                &-custom {
                  background-image: url("custom.png");
                }
            }
    
            //又如
             .link
            {
               & + & {
                 color: red;
               }
    
               & & {
                color: green;
               }
    
               && {
                 color: blue;
               }
    
               &, &ish {
               color: cyan;
               }
            }
            //等于于
            .link + .link {
                 color: red;
                }
    
                .link .link {
                  color: green;
                }
    
                .link.link {
                  color: blue;
                }
    
                .link, .linkish {
                  color: cyan;
                }
        

    对于多个&

    
           .grand 
            {
                .parent 
               {
                 & > & {
                 color: red;
                }
            }
            //等于于
           .grand .parent > .grand .parent {
                 color: red;
                }
        

    多项组合

    
            p,a
            {
            border:1px solid #222;
             &+&
             {
              color:red;
             }
            }
            //等价于
            p,a
            {
            border:1px solid #222;
            }
            p+p
            {
            color:red;
            }
            p+a
            {
            color:red;
            }
            a+p
            {
            color:red;
            }
            a+a
            {
            color:red;
            }
        

    继承 &:extend()

    
            .e:extend(.f) {}
            .e:extend(.g) {}
    
            //等价于
            .e:extend(.f, .g) {}
    
            对于
            pre:hover,
              .some-class {
              &:extend(div pre);
            }
            //等价于
            pre:hover:extend(div pre),
            .some-class:extend(div pre) {}
    
            对于
            .my-inline-block() {
            display: inline-block;
            font-size: 0;
            }
            .thing1 {
             .my-inline-block;
            }
            .thing2 {
            .my-inline-block;
            }
    
            //输出
            .thing1 {
                display: inline-block;
                font-size: 0;
            }
            .thing2 {
                display: inline-block;
                font-size: 0;
            }
            
            //而这还不是最简的
             .my-inline-block() {
                display: inline-block;
                font-size: 0;
            }
            .thing1 {
               &:extend(.my-inline-block);
            }
            .thing2 {
               &:extend(.my-inline-block);
            }
            //输出
            .my-inline-block,
            .thing1,
            .thing2 {
                display: inline-block;
                font-size: 0;
            }
        

    函数

    1.杂项函数

    1.color:将代表颜色的字符串转换为颜色值.color("#aaa")
    2.将数字从一种单位转换到另一种单位

    convert(9s, "ms")
    convert(14cm, mm)
    convert(8, mm)

    3.data-uri:将资源内联进样式表

    data-uri('../data/image.jpg');
    输出: url('data:image/jpeg;base64,bm90IGFjdHVhbGx5IGEganBlZyBmaWxlCg==');
    浏览器端输出: url('../data/image.jpg');

    4.deafult()

    .mixin(1) {x: 11}
    .mixin(2) {y: 22}
    .mixin(@x) when (default()) {z: @x}

    5.unit:删除或更换单位。

    unit(5, px) 输出 5px
    unit(5em) 输出 5

    2.字符串函数

    1.escape:对字符串中的特殊字符做 URL-encoding 编码

    这些字符不会被编码:,, /, ?, @, &, +, ', ~, ! and $。
    被编码的字符是:<space>, #, ^, (, ), {, }, |, :, >, <, ;, ], [ and =。

    2.%: 格式化占位符
    3.replace:用一个字符串替换一段文本。

    //字符串 要换的 新的 规则(正则)
    replace("Hello, Mars?", "Mars?", "Earth!");
    replace("One + one = 4", "one", "2", "gi");
    replace('This is a string.', "(string).$", "new $1.");
    replace(~"bar-1", '1', '2');

    3.列表函数

    1.length:返回列表中元素的个数

    @list: "banana", "tomato", "potato", "peach";
    n: length(@list);

    2.extract:返回列表中指定位置的元素。

    @list: apple, pear, coconut, orange;
    value: extract(@list, 3);

    4.数学函数

    1.ceil:向上取整。ceil(2.5)=3
    2.floor:向下取整。floor(2.5)=2
    3.percentage:将浮点数转换为百分比字符串。percentage(0.5)=50%
    4.round:四舍五入取整。精度默认为0.round(1.67)=2 round(1.67, 1)=1.7
    5.sqrt:计算一个数的平方根,并原样保持单位。sqrt(25cm)=5cm
    6.abs:计算数字的绝对值,并原样保持单位。
    7.sin:正弦函数。asin/cos/acos/tan/atan
    8.pi:返回圆周率 π pi()=3.141592653589793
    9.pow:设第一个参数为A,第二个参数为B,返回A的B次方。
    10.mod:返回第一个参数对第二参数取余的结果。
    11.min:返回一系列值中最小的那个。min(3px, 42px, 1px, 16px)=1px /max

    5.类型函数

    1.isnumber:如果待验证的值为数字则返回 true ,否则返回 false 。

    isnumber(#ff0); // false
    isnumber(blue); // false
    isnumber("string"); // false
    isnumber(1234); // true
    isnumber(56px); // true
    isnumber(7.8%); // true
    isnumber(keyword); // false
    isnumber(url(...)); // false

    2.isstring:如果待验证的值是字符串则返回 true ,否则返回 false 。

    isstring(#ff0); // false
    isstring(blue); // false
    isstring("string"); // true
    isstring(1234); // false
    isstring(56px); // false
    isstring(7.8%); // false
    isstring(keyword); // true
    isstring(url(...)); // true

    3.iscolor:如果待验证的值为颜色则返回 true ,否则返回 false 。

    iscolor(#ff0); // true
    iscolor(blue); // true
    iscolor("string"); // false
    iscolor(1234); // false
    iscolor(56px); // false
    iscolor(7.8%); // false
    iscolor(keyword); // false
    iscolor(url(...)); // false

    4.iskeyword:如果待验证的值为关键字则返回 true ,否则返回 false 。

    iskeyword(#ff0); // false
    iskeyword(blue); // false
    iskeyword("string"); // false
    iskeyword(1234); // false
    iskeyword(56px); // false
    iskeyword(7.8%); // false
    iskeyword(keyword); // true
    iskeyword(url(...)); // false

    5.isurl:如果待验证的值为 url 则返回 true ,否则返回 false 。

    isurl(#ff0); // false
    isurl(blue); // false
    isurl("string"); // false
    isurl(1234); // false
    isurl(56px); // false
    isurl(7.8%); // false
    isurl(keyword); // false
    isurl(url(...)); // true

    6.ispixel:如果待验证的值为像素数则返回 true ,否则返回 false 。

    ispixel(#ff0); // false
    ispixel(blue); // false
    ispixel("string"); // false
    ispixel(1234); // false
    ispixel(56px); // true
    ispixel(7.8%); // false
    ispixel(keyword); // false
    ispixel(url(...)); // false

    7.isem:如果待验证的值的单位是 em 则返回 true ,否则返回 false 。

    isem(#ff0); // false
    isem(blue); // false
    isem("string"); // false
    isem(1234); // false
    isem(56px); // false
    isem(7.8em); // true
    isem(keyword); // false
    isem(url(...)); // false

    8.ispercentage:如果待验证的值为百分比则返回 true ,否则返回 false 。

    ispercentage(#ff0); // false
    ispercentage(blue); // false
    ispercentage("string"); // false
    ispercentage(1234); // false
    ispercentage(56px); // false
    ispercentage(7.%); // true
    ispercentage(keyword); // false
    ispercentage(url(...)); // false

    9.isunit:如果待验证的值为指定单位的数字则返回 true ,否则返回 false 。

    isunit(11px, px); // true isunit(2.2%, px); // false isunit(33px, rem); // false isunit(4rem, rem); // true isunit(56px, "%"); // false isunit(7.8%, '%'); // true isunit(1234, em); // false isunit(#ff0, pt); // false isunit("mm", mm); // false

    6.颜色函数

    1.rgb/rgba
    2.rgnb:创建格式为 #AARRGGBB 的十六进制颜色值 (注意不是 #RRGGBBAA!)

    argb(rgba(90, 23, 148, 0.5)),这种格式被用于 IE 、.NET 和 Android 的开发中

    3.hsl/hsla:通过色相 (hue),饱和度 (saturation),亮度 (lightness) 三种值 (HSL) 创建不透明的颜色对象

    hsl(90, 100%, 50%),hsla(90, 100%, 50%, 0.5)

    4.hsv/hsva:通过色相 (hue)、饱和度 (saturation)、色调 (value) 三种值 (HSV) 创建不透明的颜色对象。

    hsv(90, 100%, 50%),hsva(90, 100%, 50%, 0.5)

    5.red/green/blue:从颜色对象中提取颜色通道值

    green(rgb(10, 20, 30))

    6.alpha:从颜色对象中提取 alpha 通道值 alpha(rgba(10, 20, 30, 0.5))=0.5
    7.saturate/desaturate:增加/减少颜色饱和度 saturate(hsl(90, 80%, 50%), 20%)=#80ff00
    8.lighten/darken:增加/减少颜色亮度 lighten(hsl(90, 80%, 50%), 20%)=#b3f075
    9.fadeout/fadein:增加/减少透明度fadein(hsla(90, 90%, 50%, 0.5), 10%)=hsla(90, 90%, 50%, 0.6)
    10.fade:设置透明度fade(hsl(90, 90%, 50%), 10%)=hsla(90, 90%, 50%, 0.1)
    11.spin:在任一方向旋转颜色的色调角 @c: spin(saturate(#aaaaaa, 10%), 10);
    12.multiply:正片叠底 multiply(#ff6600, #cccccc);
    13.screen:变色/滤色 screen(#ff6600, #666666);
    14.overlay:叠加 overlay(#ff6600, #000000);
    15.softlight:柔光 softlight(#ff6600, #333333);
    16.hardlight:强光 hardlight(#ff6600, #666666);
    17.difference:排除 difference(#ff6600, #333333);
    18.average:分别对 RGB 的三种颜色值取平均值,然后输出结果。average(#ff6600, #ff0000);
  • 相关阅读:
    struts2 s:if 的字符串比较问题
    struts2 标签
    servlet filter
    div滚动与控制
    页面定位
    linux下编译利用CMakeLists.txt 编译C++写的opencv程序
    yolo image.c
    强制杀进程
    PDB GDB 调试代码
    YOLOv3的Darknet在OpenCV3.4.1(bug)下编译出错填坑
  • 原文地址:https://www.cnblogs.com/wwkk/p/6490348.html
Copyright © 2011-2022 走看看