LESS详解之混合(Mixins)高级

  现在已经为大家介绍了LESS之混合(Mixins)的一些用法了,相信大家也用了不少有关LESS之混合(Mixins)了。接下来将为大家介绍一些有关LESS之混合(Mixins)的另外一些使用方法,可算是比较难理解的,所以把它们放到了LESS详解之混合(Mixins)高级来为大家介绍,希望能个能对大家有所帮助。


  高级参数用法


  如果需要在 mixin 中不限制参数的数量,可以在变量名后添加“...”,表示这里可以使用 N 个参数。小例子如下


  LESS代码

/*接受 0-N 个参数*/
.mixin1 (...) {  
	padding:@arguments;
}
div {
	.mixin1(20px);
	div {
		.mixin1(20px 30px);
		div {
			.mixin1(20px 50px 203px);
			div {
				.mixin1(20px 4px 4px 8px);
			}
		}
	}
}

/*不接受任何参数*/
.mixin2 () { 
	height : 131px;
}     
span {
	.mixin2;
}

/*接受 0-1 个参数*/ 
.mixin3 (@a: #fff) { 
	color : @a;
}
h1 {
	.mixin3;
	h2 {
		.mixin3(#eee);
	}
}
/*接受 0-N 个参数*/    
.mixin4 (@a: 1, ...) {
	margin : @arguments;
}
a {
	.mixin4;
	span {
		.mixin4(32%,223em,231px,111px);
	}
}
/*接受 1-N 个参数*/ 
.mixin5 (@a, ...) {  
	margin : @arguments;
}
.meng {
	.mixin5(90px);
	span {
		.mixin5(32%,223em,231px,111px);
	}
}

  编译后的CSS代码

/*接受 0-N 个参数*/
div {
  padding: 20px;
}
div div {
  padding: 20px 30px;
}
div div div {
  padding: 20px 50px 203px;
}
div div div div {
  padding: 20px 4px 4px 8px;
}
/*不接受任何参数*/
span {
  height: 131px;
}
/*接受 0-1 个参数*/h1 {
  color: #ffffff;
}
h1 h2 {
  color: #eeeeee;
}
/*接受 0-N 个参数*/a {
  margin: 1;
}
a span {
  margin: 32% 223em 231px 111px;
}
/*接受 1-N 个参数*/.meng {
  margin: 90px;
}
.meng span {
  margin: 32% 223em 231px 111px;
}

  模式匹配与Guard表达式


  LESS 提供了通过参数值控制 mixin 行为的功能。如果要根据 @switch 的值控制 .mixin 行为,只需按照下面的方法定义。小例子如下


  LESS代码

.mixin (dark, @color) {
    color: darken(@color, 10%);
}
.mixin (light, @color) {
    color: lighten(@color, 10%);
}
.mixin (@_, @color) {
    display: block;
}

@switch: light;

.long {
    .mixin(@switch, #888);
}

@switch2 : dark;
.meng {
	.mixin(@switch, #666);
}


  编译后的CSS代码

.long {
  color: #a2a2a2;
  display: block;
}
.meng {
  color: #808080;
  display: block;
}

  传给 .mixin 的颜色将执行 lighten 函数,如果 @switch 的值是 dark,那么则会执行 darken 函数输出颜色。

        darken(@color, 10%)函数的意思是 亮度降低 10%。lighten(@color, 10%)函数的意思是 亮度增加 10%

  以下是整个过程如何发生的:

  第一个 .mixin 没有匹配,因为不满足 dark 条件;

  第二个 .mixin 可以被匹配,因为它满足了 light 条件;

  第三个 .mixin 也可以被匹配,因为它接受任何参数。

  只有满足匹配要求的混合才会被使用。混合中的变量可以匹配任何值,非变量形式的值只有与传入的值完全相等时才可以匹配成功。

  我们也可以根据参数的数量进行匹配,小例子如下


  LESS代码

.mixin (@a) {
    color: @a;
}
.mixin (@a, @b) {
    color: fade(@a, @b);
}

.meng {
    .mixin(#000);
}
.long {
    .mixin(#fff, 10%);
}

  编译后的CSS代码

.meng {
  color: #000000;
}
.long {
  color: rgba(255, 255, 255, 0.1);
}


  调用 .mixin 时,如果使用了一个参数,输出第一个 .mixin,使用了两个参数,则输出第二个。fade(@color, 10%)的意思是设定透明度为 10%。


  条件混合(guarded mixins)


  与上面匹配值或者匹配参数数量的情况不同,Guards 被用来匹配表达式 (expressions)。如果你很熟悉编程函数的用法,那么很可能你已经掌握它的用法了。

  为了尽可能地符合 CSS 的语言结构,LESS 选择使用 guard混合(guarded mixins)(类似于 @media 的工作方式)执行条件判断,而不是加入 if/else 声明。

  

       通过LESS自带的函数判断


  LESS代码

.mixin (@a) when (lightness(@a) >= 50%) {
    background-color: black;
}
.mixin (@a) when (lightness(@a) < 50%) {
    background-color: white;
}
.mixin (@a) {
    color: @a;
}

.meng { 
	.mixin(#ddd); 
}
.long { 
	.mixin(#555);
}


  编译后的CSS代码

.meng {
  background-color: black;
  color: #dddddd;
}
.long {
  background-color: white;
  color: #555555;
}

  运算符判断

    

        Guards 支持的运算符包括:> >= = =< <。说明一下,true关键字是唯一被判断为真的值,也就是这两个混合是相等的。小例子如下


  LESS代码

@IE : true;
@w : 10;

.IE (@bTure) when (@bTure){
    *display:block;
}
.IE1 (@bTure) when (@bTure){
    *margin:0;
}
.IE2 (@bTure) when (@bTure >=0){
    *padding:@bTure;
}
.IE3 (@bTure) when (@bTure >0){
    *height:20px;
}

div {
    .IE(@IE);
    .IE1(@IE);
    .IE2(@w);
    .IE3(@w);
}

  编译后的CSS代码

div {
  *display: block;
  *margin: 0;
  *padding: 10;
  *height: 20px;
}

  多个条件


        多个Guards可以通过逗号表示分隔,如果其中任意一个结果为 true,则匹配成功。这个相当于脚本中的或的意思。小例子如下


  LESS代码

@IE : true;
@w : 10;

.IE (@bTure, @b) when (@bTure), (@b < -10){
    *display:block;
}
.IE1 (@bTure, @b) when (@bTure = false), (@b < -10){
    *width:20px;
}
.IE2 (@bTure, @b) when (@bTure = true), (@b < -10){
    *height:20px;
}

div {
    .IE(@IE, @w);
    .IE1(@IE, @w);
    .IE2(@IE, @w);
}

  编译后的CSS代码

div {
  *display: block;
  *height: 20px;
}

  参数之间比较


  参数之值得注意的是不同的参数之间也可以比较,而参与比较的也可以一个参数都没有间判断。小例子如下


  LESS代码

@h : 20;
@w : 10;

.mixin (@h, @w) when (@h < @w){
	width:@h;
}
.mixin1 (@h, @w) when (@h > @w){
	height:@w;
}

div {
	.mixin(@h, @w);
	.mixin1(@h, @w);
}


  编译后的CSS代码

div {
  height: 10;
}

  guard 中的and


  LESS代码

@h : 20;
@w : 10;
@true : true;

.mixin (@h, @w) when (@h > @w) and (@true) {
	width:@h;
}

div {
	.mixin(@h, @w);
}

  编译后的CSS代码

div {
  width: 20;
}

  guard 中的not


  LESS代码

@h : 20;

.mixin (@h) when not(@h < 0) {
	width:@h;
}

div {
	.mixin(@h);
}

  编译后的CSS代码

div {
  width: 20;
}



  上面就是今天为大家介绍的有关LESS详解之混合(Mixins)高级的相关内容,主要为大家介绍了高级参数用法、模式匹配与Guard表达式和条件混合(guarded mixins)。希望能为大家在LESS的学习道路上有所帮助。


  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
在 Vue 中,混合mixins)是一种可以复用组件选项的方式。通过混合,我们可以将多个组件选项合并为一个组件选项,从而提高代码的复用性。 混合可以包含任意组件选项,如 data、methods、computed、watch、生命周期钩子等。当多个组件需要共享相同的选项时,我们可以使用混合来减少代码冗余。 使用混合非常简单,只需要定义一个混合对象,然后在组件中使用 mixins 选项将混合对象添加到组件选项中即可。例如: ``` // 定义一个混合对象 var myMixin = { created: function () { console.log('混合对象的 created 钩子被调用') } } // 使用混合对象 Vue.component('my-component', { mixins: [myMixin], created: function () { console.log('组件的 created 钩子被调用') } }) ``` 在上面的代码中,我们定义了一个混合对象 myMixin,其中包含了一个 created 生命周期钩子。然后在组件中使用 mixins 选项将 myMixin 添加到组件选项中。最终,组件的 created 钩子和混合对象的 created 钩子都会被调用。 需要注意的是,当混合对象和组件选项中含有同名选项时,混合对象的选项会覆盖组件选项的同名选项。如果混合对象中的选项是钩子函数,那么它们会在组件对应的钩子函数之前调用。 另外,混合对象可以被其他混合对象所继承,从而实现更复杂的代码复用。如果多个混合对象中含有同名选项,那么它们会按照混合对象的顺序依次调用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值