zoukankan      html  css  js  c++  java
  • CSS预处理器-Less

    less的中文官网:http://lesscss.cn/
    bootstrap中less教程:http://www.bootcss.com/p/lesscss/
    css预处理器有:less、sass、stylus

    less

    less是一种动态样式语言,属于css预处理器的范畴,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,使 CSS 更易维护和扩展。

    • 使用原生css编写样式时,没有嵌套的话,逻辑关系不明确,如果代码很多,要想改动代码就显得较为困难
    • 使用less编写代码变得更加高效

    LESS 既可以在 客户端 上运行 ,也可以借助Node.js在服务端运行。

    <style type="text/css">
    #parent{
       300px;
      height: 300px;
      background-color: orange;
      margin: 40px auto;
    }
    #parent #son{
       200px;
      height: 200px;
      background-color: pink;
      margin: 20px auto;
    }
    <style>
    

    Less编译的几种方式

    .less文件不能直接在浏览器上运行,需要编译成css文件,才能被浏览器解析

    方式1:使用less.js编译

    ①页面使用style标签或者link标签引入less,标签属性type中的值为text/less

    <link rel="stylesheet" type="text/less" href="1.less">
    

    ②在style标签 或者link标签 引入less.min.js

    <script src="less.min.js"></script>
    
    • 注意:less.min.js会对样式类型为text/less进行解析。
    • 这种方式不好,不是进行预处理。①需要额外引入less.js ② 使用的是运行时编译,使用js来将less代码转换成css,解析需要时间。

    方式2:koala工具编译

    koala 官网:www.koala-app.com

    • 这种方式需要额外下载软件

    方式3:vscode安装插件

    安装easy less插件可以实时对.less文件进行编译

    less中的注释

    //开头的注释,不会被编译到css文件中
    /**/包裹的注释会被编译到css文件中

    less中的变量

    作用:可以进行复用。

    使用@来声明一个变量,语法:@变量名:值;。例如:@color:pink;

    • 作为普通属性值只来使用:直接使用@变量名
    • 作为选择器和属性名:@{变量名}
    • 变量的延迟加载
      • less中的变量有块级作用域,只有当块级作用域中变量提升赋值后才会进行属性值赋值操作
    @color:yellow;
    @selector:#parent;
    @w:width;
    @fontSize:10px;
    
    /*选择器*/
    @{selector}{
      /* 属性名 */
    	@{w}: 400px;
      
      /*变量延迟加载*/
      font-size: @fontSize;
    	@value:20px;
      
    	height: 300px;
      /* 普通变量 */
    	background-color: @color;
    	margin: 40px auto;
    }
    

    less中的嵌套规则

    1.基本嵌套规则
    2.&的使用

    #parent{
    	 400px;
    	height: 300px;
    	background-color: pink;
    	margin: 40px auto;
    	#son{
    		 200px;
    		height: 200px;
    		background-color: yellow;
    		margin: 20px auto;
        
        /*
        	&相当于对嵌套父级的引用。
        	如果有&,则会解析成"#parent #son:hover"
        	如果没有&,则会解析成"#parent #son :hover"
        */
    		&:hover{
    			background-color: aqua;
    		}
    	}
    }
    

    less中的混合

    混合就是将一系列属性从一个规则集引入到另一个规则集的方式。简单理解就是,封装一个函数,然后在需要使用的地方进行调用,会把内容完全拷贝
    1.普通混合
    2.不带输出的混合
    3.带参数的混合
    4.带参数并且有默认值的混合
    5.带多个参数的混合
    6.命名参数
    7.匹配模式
    8.arguments变量

    普通混合

    • 混合的定义可以是.或者#开头
    //下面混合的定义会编译到css文件中---带输出的混合
    //.style0{
    // 不想编译到css文件中,则添加括号 --不带输出的混合
    .style0(){
    	 100px;
    	height: 100px;
    	background-color: red;
    }
    #son{
      .style0;
      margin: 20px auto;
    }
    

    带参数的混合

    // 可以为参数赋默认值
    .style1(@w,@h,@c:orange){
    	 @w;
    	height: @h;
    	background-color: @c;
    }
    
    #son{
      .style1(50px,50px,green);
    	margin: 20px auto;
    }
    

    命名参数的混合

    在调用时指定要传入的形参

    .style2(@w:100px,@h:100px,@c:green){
    	 @w;
    	height: @h;
    	background-color: @c;
    }
    #son{
      .style2(@c:yellow);
    	margin: 20px auto;
    }
    

    匹配模式

    个人理解就是:将公共的样式和独立的样式抽离,less编译时会将所有的样式整合在一起

    需求:为#son元素的不同边框设置不同的颜色

    HTML结构

    <div id="parent">
      <div id="son">son</div>
    </div>
    

    style.less

    .styleBorderColor(@position,@color){
    	border- 10px;
    	border-style: solid;
    	border-color: transparent;
    }
    .styleBorderColor(top,@color){
    	border-top-color: @color;
    }
    .styleBorderColor(right,@color){
    	border-right-color: @color;
    }
    .styleBorderColor(bottom,@color){
    	border-bottom-color: @color;
    }
    .styleBorderColor(left,@color){
    	border-left-color: @color;
    }
    
    

    index.less

    @import './style.less'
    
    #son1{
       100px;
      height: 100px;
      background-color: yellow;
      .styleBorderColor(bottom,purple)
    }
    

    arguments

    .style5(@width,@style,@color){
      border:@arguments;
    }
    
    #son{
      .style5(10px,solid,green);
    }
    

    less运算

    在less中可以进行加减乘除的运算

    @fontSize: 20;
    
    h1{
    	font-size: @fontSize+10px;
    }
    

    less避免编译

    在less编写任何内容,less都会帮我们进行编译,如果不想要less帮忙编译的话则使用~"不想编译的内容"这种形式。比如calc是浏览器可以自行运算的,我们想要浏览器帮忙计算即可

    @w: 20;
    #parent{
    	 ~"calc(100px*2)";
    }
    

    less继承

    特点:

    • 性能比混合高
    • 灵活度比混合低

    注意:继承 不支持 参数

    HTML

    <div id="parent">
      <div id="son1">son1</div>
      <div id="son2">son2</div>
    </div>
    

    混合方式

    .style_son(@color){
    	 100px;
    	height: 100px;
    	background-color: @color;
    }
    
    #parent{
    	 300px;
    	height: 300px;
    	background-color: aqua;
    	margin: 30px auto;
    	#son:nth-child(1){
    		.style_son(orange);
    	}
    	#son:nth-child(2){
    		.style_son(pink);
    	}
    }
    

    继承方式

    // 注意不能接收参数
    .style_son{
    	 200px;
    	height: 200px;
    }
    .style_son:hover{
      background-color:yellow !important;
    }
    
    #parent{
    	 300px;
    	height: 300px;
    	background-color: aqua;
    	margin: 30px auto;
      
      // 下面会等价于 .style_son,#parent .son然后应用.style_son的规则
    	//.son:extend(.style_son){
    	.son{
        // 等价于上面
    	 	//&:extend(.style_son);
        // 获取.style_son的所有状态 即包括 hover
    		&:extend(.style_son all);
        &:nth-child(1){
    			background-color: orange;
    		}
    		&:nth-child(2){
    			background-color: red;
    		}
    	}
    }
    
    


  • 相关阅读:
    软件测试七年之痒,依然热爱!我还是从前那个少年!
    我想从功能测试转向自动化测试,怎么办?
    python中的一些内置函数
    python中eval()
    集合
    列表的切片:取出来还是一个列表,可用在复制列表元素的操作
    字符串常用的方法
    dict字典,以及字典的一些基本应用
    list列表(也叫数组),以及常用的一些方法
    jsonpath的用法
  • 原文地址:https://www.cnblogs.com/it774274680/p/15114942.html
Copyright © 2011-2022 走看看