css进阶成预编译less语法规则

本文介绍了Less语法的特性,包括设置变量以避免代码重复、实现主题色切换;混合模式有直接引入、带参数和带默认值三种形式;匹配模式类似if - else,可实现不同样式选择;嵌套结构能减少CSS层级递进的重复代码。最后提到Less需用koala编译。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决第一个问题,怎么能让代码中不出现重复项,比如一个主色,到处写?

1、变量

less中可以设置变量,然后引用使用

旧:

a{
color:#000
}
b{
color:#000
}
c{
color:#000
}

less:

@maincolor:#000;
a{
color:@maincolor
}
b{
color:@maincolor
}
c{
color:@maincolor
}

这样的话,只需要更改参数maincolor就可以实现主题色切换了,其实写代码的人基本上都不会像出现复制粘贴的情况,所以变量很有必要。

 

解决第二个问题,一个样式块重复调用,同样,作为一个写代码的,我是不允许你复制粘贴的,所以使用

2、混合模式

2.1,直接引入他!

如果有一个常用项,很多都要用比如:

.b{
border-bottom:1px solid #000
}

.a{
color:#888;
border-bottom:1px solid #000
}

.c{
color:#222;
border-bottom:1px solid #000
}

a、c都重复调用了b的样式,所以不要复制粘贴,就是这样

less

.b{
border-bottom:1px solid #000
}

.a{
color:#888;
.b
}

.c{
color:#222;
.b
}

额,是的就是这么简单,相当于把b当成了一个方法直接引入即可,是的我说的是方法,没说是变量,原因是什么的,就是他丫的还能传参数!!!

继续看!

如果a、c也是引用border-bottom,但是可能大家的某个参数不一样,比如颜色对吧,那b就不能用了,除非b里面的参数,让你自定义,好的,他来了,他来了!!

 

2.2 带参数的混合

.b(@color){
bottom-border:1px solid @color
}

.a{
color:#000;
.b(#656)
}

.c{
background-color:#999;
.b(#999)
}

看到了,b的样子是不是像极了方法。

既然他像方法了,那么你一定能想到

 

2.3 带默认值的混合

是的,方法的化,当然可以设置默认值啦

.b(@color:#456){
bottom-border:1px solid @color
}

.a{
color:#000;
.b()
}

.c{
background-color:#999;
.b(#999)
}

b里面有默认值,a里面可以不传,那就调用默认的,c里面同样可以上传你要的颜色

 

 

变量有了,方法有了,怎么会没有选择分支结构呢?来吧if else大法!

 

3、匹配模式

用法类似于if -else

比如,在写css的时候,会存在针对一个dom我写多个样式,比如,一个是只改颜色,一个是该背景色,一个是改边框

这样的话,只要给对应dom添加不用class就可以实现不同效果

css

.a1{
color:#000;
}
.a2{
background:#000;
}
.a3{
border:1px solid #000;
}

b{
a1
}

这样的话看起来不错了,b调用不同的a,但是我觉得还不够,因为a1、a2、a3都是b的可用样式,其实都是给b准备的,b只需要选择即可,是不是有点if  else的感觉了

less

.a1(top,@w:5px,@c:#000) {
  border-width: @w;
  border-color: @c;
}

.a1(bottom,@w:10px,@c:#fff) {
  border-width: @w;
  border-color: @c;
}
//这个A1比较特殊,@_代表不管你选择哪一个a1都会带上这个a1的样式
.a1(@_,@w:15px,@c:#777){
  border-width: @w;
  border-color: @c;
}
.a2{
  .a1(top,100px,#345);
}

这里面a2  传入不同的第一个参数,top、bottom 就可以调用不同的a1,if-else或switc-case附体了吧。

 

还有一个点就是@__这个就默认你选择谁都会调用,额使用场景你动下脑子吧。

 

4、嵌套结构

好了,上面两个其实都是让你少写重复样式,这样其实你就可以在写之前,把要用的样式否单独写出来,在针对每个dom去调用

 

但是,css还有一个恶魔的重复,就是层级递进

 

css

<div class="list">
<ul>
<li><a>1</a></li>
<li><a>2</a></li>
<li><a>3</a></li>
</ul>
</div>


<style>
.list{}
.list ul{}
.list ul li{}
.list ul li a{}
</style>

则会中如果结构比较深,这个重复写啊!

 

所以来看less的嵌套!

 

<div class="list">
<ul>
<li><a>1</a></li>
<li><a>2</a></li>
<li><a>3</a></li>
</ul>
</div>


<style>
.list{
   color:#000;
   ul{
     color:#999
     li{
       width:10px
       a{
          display:block
        }
     }
   }
 }
</style>

好啦!,你看到了,就是按照他的html结构写进去就可以了,代码量减少了好多的。

 

最后。less是不能直接用到html中的,建议使用koala 编译即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值