You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Less中实现带嵌套条件的when判断

解决Less中when条件内嵌套判断不生效的问题

我明白你的问题了——你在Less的when守卫混合宏里尝试嵌套类似传统编程语言的if语句,但这些嵌套条件完全不生效,对吧?其实问题出在Less本身的条件语法上,它并不支持这种写法。

问题根源

Less 没有像 JavaScript 那样的if {} else {}块级条件语法,你写的if (@han_fa_version == 'v4'){ ... }属于无效语法,所以这部分代码根本不会被Less解析执行。Less的条件逻辑主要依赖守卫混合宏(Guarded Mixins)和内置if()函数来实现。

解决方案1:用嵌套守卫分支拆分逻辑

你可以在主混合宏的when条件内,再针对不同的@han_fa_version值添加嵌套的守卫分支,这是Less中实现多条件判断的标准方式:

@han_cart_icon: 'fa-shopping-cart';
@han_fa_version: 'v5';

// 主混合宏:先判断购物车图标的条件
.change_basket_icon() when (@han_cart_icon = 'fa-shopping-cart') {
    // 嵌套守卫:匹配FontAwesome v4版本的逻辑
    & when (@han_fa_version = 'v4') {
        i.ty-icon-moon-commerce, .ty-icon-basket {
            font-family: FontAwesome;
            &:before {
                content: "\f07a";
            }
        }
    }

    // 嵌套守卫:匹配FontAwesome v5版本的逻辑(v5需要指定字体权重)
    & when (@han_fa_version = 'v5') {
        i.ty-icon-moon-commerce, .ty-icon-basket {
            font-family: 'Font Awesome 5 Free';
            font-weight: 900; // v5实心图标需要设置900权重
            &:before {
                content: "\f07a";
            }
        }
    }
}

// 调用混合宏生效
.change_basket_icon();

解决方案2:用内置if()函数简化属性级判断

如果只是针对单个属性值做条件切换,使用Less内置的if()函数会更简洁,它适合简单的二元判断:

@han_cart_icon: 'fa-shopping-cart';
@han_fa_version: 'v5';

.change_basket_icon() when (@han_cart_icon = 'fa-shopping-cart') {
    i.ty-icon-moon-commerce, .ty-icon-basket {
        // 根据版本动态切换字体族
        font-family: if(@han_fa_version = 'v4', FontAwesome, 'Font Awesome 5 Free');
        // v5需要额外设置字体权重,v4不需要
        font-weight: if(@han_fa_version = 'v5', 900, normal);
        &:before {
            content: "\f07a";
        }
    }
}

.change_basket_icon();

注意事项

  • FontAwesome v5 区分实心、空心等图标样式,所以需要指定font-weight(实心图标用900,空心用400),这是v4和v5的重要区别,别漏了。
  • Less的守卫条件支持and、or、not等逻辑运算符,比如你可以写& when (@han_fa_version = 'v4') and (@han_cart_icon = 'fa-shopping-cart')来组合多条件。

内容的提问来源于stack exchange,提问作者James

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 08:15:49