完美

[学习|工作|博客|交流平台|完美起航]
 详情

less学习之初步二

时间:[2018-02-05 22:14:56] 作者:[ zyw327 ] 点击:[ 1449 ]

一、混合定义函数及混合函数的传参

less定义多个具有相同名称和参数数量的混合是合法的。带多个参数的混合,参数用分号分割,逗号会作为列表传递,即如果传参的括号里面全部都是以逗号分割,那么会依次传给各个参数值,如果传参的括号里面既有逗号也有分号,则会把分号前面的看做一个整体传给一个参数值。例如

.mixin(@color;) {
  color-1: @color;
}

.mixin(@color; @padding:5px;) {
  color-2: @color;
  padding-2: @padding;
}

.mixin(@color; @padding; @margin: 2px) {
  color-3: @color;
  padding-3: @padding;
  margin: @margin @margin @margin @margin;
}

.some .selector div {
  .mixin(yellow);
}
//函数混合传参
.mixin(@color; @padding:xxx; @margin: 2px) {
  color-3: @color;
  padding-3: @padding;
  margin: @margin @margin @margin @margin;
}
.div {
  .mixin(red, 2px, 3px; something, ele); //此处第一个分号前会作为一个参数,后面的作为第二个参数
}
.div1 {
  .mixin(green,2px,3px);//此处则是作为三个参数传递
}
.div2 {
  .mixin(black,2px,3px;);//此处则是作为三个参数传递
}

上述编译后结果:

.some .selector div {
  color-1: #ffff00;
  color-2: #ffff00;
  padding-2: 5px;
}
/*混合参数传参*/
.div {
  color-3: #ff0000, 2px, 3px;
  padding-3: something, ele;
  margin: 2px 2px 2px 2px;
}
.div1 {
  color-3: #008000;
  padding-3: 2px;
  margin: 3px 3px 3px 3px;
}
.div2 {
  color-3: #000000, 2px, 3px;
  padding-3: xxx;
  margin: 2px 2px 2px 2px;
}

二、less函数命名参数

less的函数支持命名参数的形式传参,例如

//命名参数
.mixin(@color: black; @margin: 10px; @padding: 20px) {
  color: @color;
  margin: @margin;
  padding: @padding;
}
.class1 {
  .mixin(@margin: 20px; @color: red);
}
.class2 {
  .mixin(yellow, @padding: 40px);
}
.class3 {
  .mixin(@padding: 80px)
}

编译的结果为:

.class1 {
  color: #ff0000;
  margin: 20px;
  padding: 20px;
}
.class2 {
  color: #ffff00;
  margin: 10px;
  padding: 40px;
}
.class3 {
  color: #000000;
  margin: 10px;
  padding: 80px;
}

三、函数的匹配模式级函数变量返回值

定义多个相同名称的函数,通过匹配调用不同函数,函数变量返回值即在函数中将计算的结果赋值给变量。例如

// 匹配模式
.border(all, @w: 5px) {
  border-radius: @w;
}
.border(t_l, @w: 5px) {
  border-top-left-radius: @w;
}
.border(t_r, @w: 5px) {
  border-top-right-radius: @w;
}
.border(b-l, @w: 5px) {
  border-bottom-left-radius: @w;
}
.border(b-r, @w: 5px) {
  border-bottom-right-radius: @w;
}
// 函数中变量返回值
.average(@x, @y) {
  @average: ((@x + @y) / 2);
}
.weight(@x, @y) {
  @add: (@x + @y);
}
footer{
  //.border(all, 10px);
  .border(t_l, 10px);
  .border(t_r, 10px);
  .average(500px, 300px);
  line-height: @average;
  background: aqua;
  width: 500px;
  height: 300px;
  .weight(500, 300);
  font-weight: @add;
  float: left;
}

编译后css如下

footer {
  border-top-left-radius: 10px;
  border-top-right-radius: 10px;
  line-height: 400px;
  background: aqua;
  width: 500px;
  height: 300px;
  font-weight: 800;
  float: left;
}

四、arguments变量代表所有可变参数

通过arguments替代所有函数参数,例如

//arguments变量,代表所有可变参数
.border(@x: solid, @c: red) {
  border: 21px @arguments;
}

.div1 {
  .border();
}

编译后css样式如下

.div1 {
  border: 21px solid #ff0000;
}

五、less的嵌套及&的符号

less可以通过嵌套的方式减少代码冗余,使用&可以表示父级元素。例如

// 父元素选择器&符号
header{
  height: 200px;
  width: 300px;
  float: left;
  div{
    height: 100px;
    width: 100px;
    font-size: 18px;
    color: red;
    background: black;
    &:hover{//此处&替代父级选择器,即div
      background: red;
      color: white;
    }
    &.sondiv{//此处&替代父级选择器,即div
      border-radius: 10px 10px 10px 10px;
      background: yellow;
      color: black;
    }
  }
}
main, p, span, a{
  display: inline-block;
  width: 300px;
  height: 200px;
  border: 5px solid blue;
  background: green;
  & &{//此处会组合所有可能
    border-top: none;
  }
}

编译后的css样式

header {
  height: 200px;
  width: 300px;
  float: left;
}
header div {
  height: 100px;
  width: 100px;
  font-size: 18px;
  color: red;
  background: black;
}
header div:hover {
  background: red;
  color: white;
}
header div.sondiv {
  border-radius: 10px 10px 10px 10px;
  background: yellow;
  color: black;
}
main,
p,
span,
a {
  display: inline-block;
  width: 300px;
  height: 200px;
  border: 5px solid blue;
  background: green;
}
/*此处使用了 & &组合了所有的可能*/
main main,
main p,
main span,
main a,
p main,
p p,
p span,
p a,
span main,
span p,
span span,
span a,
a main,
a p,
a span,
a a {
  border-top: none;
}

结合html效果如下

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet/less" href="less/match.less">
    <link rel="stylesheet/less" href="less/nesting.less">
    <script src="js/less.min.js"></script>
</head>
<body>
    <header>父元素选器,<div>子元素<div class="sondiv">子子元素</div></div></header>
    <main>
        <p>中间的一段<a>我说a标签</a><span>标签<a>我说a标签</a></span></p>
    </main>
    <footer>less的匹配模式例子</footer>
</body>
</html>

blob.png

 3   0
 相关评论

zyw327

姓名:  
zyw327
QQ号码:  
327523057
职位:  
NODEJS
GITHUB主页:  
个性签名:  
宝剑锋从磨砺出,梅花香自苦寒来

关注     私信