zoukankan      html  css  js  c++  java
  • Less开发指南(二)- 基本语法

    (一)嵌套规则

      【1less可以让我们以嵌套的方式编写层叠样式,先看下面这段CSS

    .box-a .hd {
      height: 20px;
    }
    .box-a .bd .txt {
      color: #000;
    }
    .box-a .other {
      position: relative;
    } 

      在LESS中,可以用嵌套方式写以上代码:

    .box-a{
        .hd{
            height:20px;
        }
        .bd{
            .txt{
                color:#000;
            }
        }
        .other{
            position:relative;
        }
    }

      代码变更简洁与直观,与DOM树结构很相似。

      【2】 符号

      如果在嵌套规则中,想写串联选择器,而不是写后代选择器,可以用 符号,如:hover 伪类写法

    .box-a{
        .hd{
            height:20px;
            a{
                &:hover{
                    color:#000;
                }
            }
        }
    
    }

      编译后:

    .box-a .hd {
      height: 20px;
    }
    .box-a .hd a:hover {
      color: #000;
    }

    (二)变量

      【1】定义

      @:(需要在末尾加上分号)

    @color:#f60;
    p{
        background-color:@color;
    }

      编译后:

    p {
      background-color: #ff6600;
    }

      【2】字符串插入变量值

    @url:'../images/';
    p{
        background:url('@{url}sp.png');
    } 

      编译后:

    p {
      background: url('../images/sp.png');
    }

      【3】变量之间赋值

    @url:'../images/';
    @pageurl:@url;
    
    p{
        background-image:url('@{pageurl}xxxx.jpg');
    }

      编译后:

    p {
      background-image: url('../images/xxxx.jpg');
    }

      【4】预解析

      (1)Less的变量调用,不需要在变量声明后才可以使用;

      (2)同一个变量定义多次,在当前作用域中最后一次定义的将被使用

    p{
        background-image:url('@{url}xxxx.jpg');
    }
    
    @url:'../images/';
    @url:'http://www.xx.com/';

      编译后:

    p {
      background-image: url('http://www.xx.com/xxxx.jpg');
    }

    (三)混合(Mixins)

     

      【1】调用已有的classid 属性集  

    #modA{color:#000;}
    .fl{float:left;}
    
    p{
        #modA;
        .fl;
    }

      编译后:

    #modA {
      color: #000;
    }
    .fl {
      float: left;
    }
    p {
      color: #000;
      float: left;
    }

      【2】带参数(或者空参数)的混合,编译后不会暴露在css文件中

    #modA(){color:#000;}
    .fl(){float:left;}
    
    p{
        #modA;
        .fl;
    }

      编译后(CSS文件没有混合模块的代码):

    p {
      color: #000;
      float: left;
    }

      

      【3】设置默认参数

    .mixins(@w;@h:100px){
        width:@w;
        height:@h;
    }
    p{
        .mixins(50px);
    }

      编译后:

    p {
      width: 50px;
      height: 100px;
    }

     

      【4】参数

       (1)多个参数可以使用分号或者逗号分隔,推荐使用分号分隔,因为逗号有两重含义:它既可以表示混合的参数,也可以表示一个参数中一组值的分隔符。

       (2)如果在混合的定义或者是调用中找到至少一个分号,就会假设参数是使用分号分隔的,所有的逗号都属于参数中的一组值的分隔符。

    .mixins(@font;@h){
        font:@font;
        height:@h;
    }
    p{
        .mixins(12px 'Microsoft yahei',arial;50px);
    }

      编译后:

    p {
      font: 12px 'Microsoft yahei', arial;
      height: 50px;
    }  

      (3)...  设置不限制参数的个数;@arguments 获取全部的参数值

    .mixins(...){
        -webkit-transform:@arguments;
        -moz-transform:@arguments;
        -ms-transform:@arguments;
        -o-transform:@arguments;
        transform:@arguments;
        
    }
    p{
        .mixins(translate(-10px,-10px));
    }

      编译后:

    p {
      -webkit-transform: translate(-10px, -10px);
      -moz-transform: translate(-10px, -10px);
      -ms-transform: translate(-10px, -10px);
      -o-transform: translate(-10px, -10px);
      transform: translate(-10px, -10px);
    }

      【5】同名混合不会覆盖,符合且都会调用

    .mixins(){
        overflow:hidden;
    }
    .mixins(){
        font:0;
    }
    p{
        .mixins();
    }

      编译后:

    p {
      overflow: hidden;
      font: 0;
    }

      【6】匹配

      (1)根据参数数量匹配

    .mixins(){
        overflow:hidden;
    }
    .mixins(@fz){
        font:@fz;
    }
    .mixins(@w;@h){
        width:@w;
        height:@h;
    }
    p{
        .mixins(10px);
    }

      编译后:

    p {
      font: 10px;
    }

      (2)指定匹配

    .mixins(baidu){
        overflow:hidden;
    }
    .mixins(winds){
        font-size:0;
    }
    
    p{
        .mixins(baidu);
    }

      编译后:

    p {
      overflow: hidden;
    }

      【7】表达式匹配 Guards,支持的表达式匹配运算符包括:>   >=   =    =<    <   (注意:相等是 = )

      (1)单个条件

    .mixins(@type) when(@type=baidu){
        overflow:hidden;
    }
    
    .mixins(@type) when(@type=winds){
        font-size:0;
    }
    
    p{
        .mixins(baidu);
    }

      编译后:

    p {
      overflow: hidden;
    }

      (2)多条件,用逗号隔开:符合其中之一即可匹配

    .mixins(@type) when(@type=baidu),(@type=winds){
        overflow:hidden;
    }
    
    p{
        .mixins(baidu);
    }
    
    h1{
        .mixins(winds);
    }

      编译后:

    p {
      overflow: hidden;
    }
    h1 {
      overflow: hidden;
    }

      (3)多条件,用 and 隔开:全部符合才匹配

    .mixins(@type;@style) when(@type=baidu)and(@style=blue){
        overflow:hidden;
    }
    
    p{
        .mixins(baidu;blue);
    }
    
    h1{
        .mixins(baidu;pink);
    }

      编译后:

    p {
      overflow: hidden;
    }

    (四)递归 

      可以在定义的混合模块自我调用(递归)

      循环输出的例子

    .loop(@n;@i:1) when(@i<=@n){
        .row-@{i}{
            background:url('xxx.jpg') 0 @i*10px no-repeat;
        }
    
        .loop(@n;(@i+1));
    }
    
    .bg{
        .loop(5);
    }

      编译后:

    .bg .row-1 {
      background: url('xxx.jpg') 0 10px no-repeat;
    }
    .bg .row-2 {
      background: url('xxx.jpg') 0 20px no-repeat;
    }
    .bg .row-3 {
      background: url('xxx.jpg') 0 30px no-repeat;
    }
    .bg .row-4 {
      background: url('xxx.jpg') 0 40px no-repeat;
    }
    .bg .row-5 {
      background: url('xxx.jpg') 0 50px no-repeat;
    }

    (五)作用域

       作用域跟其他编程语言类似,首先会从本地查找变量或者混合模块,如果没找到的话会去父级作用域中查找,逐层递增,直到找到为止,否则报错。

    @color:#f60;
    
    p{
        @color:#333;
        background-color:@color;
    }

      编译后:

    p {
      background-color: #333333;
    }

    (六)命名空间

      为了更好组织 CSS 或者单纯是为了更好的封装,可以添加命名空间

    .index{
        .mixins(){
            font-size:0;
        }
    }
    
    p{
        .index > .mixins();
    }

      编译后:

    p {
      font-size: 0;
    }

    (七)注释

       /*编译后保留css原有注释*/

       // 同时支持双反斜杠,但编译后不会保留在css文件中

     

    (八)导入(import

      其实就是把样式内嵌到指定的文件中,不会带来额外请求

      (1)嵌入less文件

    @import "layout.less";

      (2)嵌入css文件

    @import (inline) "base.css";

    (八)避免编译

      如果需要输出一些不正确的 CSS 语法或者使用一些 LESS 不认识的专有语法,编译为less文件过程中会出现错误,这时候可以用避免编译来处理。

       要输出这样的值我们可以在字符串前加上一个 ~ 

      看下出错的例子: 

    p{
        _top:expression(eval(document.documentElement.scrollTop));
    } 

      编译过程中报错

      所以需要用到避免编译的语法

    p{
        _top:~"expression(eval(document.documentElement.scrollTop))";
    }

      避免编译也支持字符串插入值

    @opacity:50;
    p{
        opacity:50/100;
        filter:~"alpha(opacity=@{opacity})";
    }

      编译后:

    p {
      opacity: 0.5;
      filter: alpha(opacity=50);
    }

      总结:以上只是less知识中的冰山一角,更多请关注官网 http://www.lesscss.net/article/home.html

      下一章是  less代码跟踪调试  敬请期待

     

     

     

  • 相关阅读:
    转换时间对象和字符串对象&添加时间
    jquery深入学习17-2-19
    jquery深入学习
    java上传附件含有%处理或url含有%(URLDecoder: Illegal hex characters in escape (%) pattern
    数据库备份脚本(整库备份)
    docker 利用maven插件推送镜像
    排序算法对比分析图
    Java计算时间差、日期差总结
    百度地图计算点是否在园,正方形,多边形范围内。电子围栏
    java maven docker-maven-plugin 结合Dockerfile 构建 docker image 并上传到docker server
  • 原文地址:https://www.cnblogs.com/focuslgy/p/3675346.html
Copyright © 2011-2022 走看看