首页 > 网站 > WEB开发 > 正文

Less开发指南(二)- 基本语法

2024-04-27 14:35:35
字体:
来源:转载
供稿:网友

Less开发指南(二)- 基本语法

(一)嵌套规则

  【1】less可以让我们以嵌套的方式编写层叠样式,先看下面这段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】调用已有的class或id属性集  

#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代码跟踪调试 敬请期待


上一篇:布局中的css要素

下一篇:CSS初始化代码

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表