【问题标题】:Apply rules to list of parent classes将规则应用于父类列表
【发布时间】:2021-12-07 13:25:44
【问题描述】:

我有下面的 LESS 样式表,我知道必须有更好的方法来组织它。创建包含类和 mixin 的地图是否可能是重复样式的唯一选择?

// child div is injected by JS
    .ddemrcontent > span, .blocksmarttemplate > span, .blocktoken > span {
        display: inline-flex;
        align-items: center;
        min-height: 1.7rem;
        margin-top: 0.2rem;
        padding-left: 0.2rem;
    }

    .ddfreetext {
        display: flex;
        min-height: 1.7rem;
        margin-top: 0.2rem;
    }

    .ddemrcontent > span:hover, .blocksmarttemplate > span:hover, .blocktoken > span:hover {
        text-decoration: underline;
        cursor: pointer;
    }

    .ddemrcontent > span {
        border-left: 4px solid cadetblue;
    }

    .blocksmarttemplate > span {
        border-left: 4px solid burlywood;
    }

    .blocktoken > span {
        border-left: 4px solid #8a7090;
    }

    .ddfreetext {
        border: 1px dashed black;
    }

更新 这是我能想到的最好的。由于 & 父选择器不适用于每个不同的父选择器(以逗号分隔),我想我不得不使用 mixin 并调用它来为我拥有的每个父选择器应用规则。 很想知道是否还有更好的方法。

.dyndoccontent(@color) {
    & > span {
        display: inline-flex;
        align-items: center;
        min-height: 1.7rem;
        margin-top: 0.2rem;
        padding-left: 0.2rem;
        border-left: 4px solid @color;

        &:hover {
            text-decoration: underline;
            cursor: pointer;
        }
    }
}

// child div is injected by JS
.ddemrcontent {
    .dyndoccontent(cadetblue);
}
.blocksmarttemplate {
    .dyndoccontent(burlywood);
}
.blocktoken {
    .dyndoccontent(#8a7090);
}

.ddfreetext {
    display: flex;
    min-height: 1.7rem;
    margin-top: 0.2rem;
    border: 1px dashed black;
}

【问题讨论】:

    标签: less


    【解决方案1】:

    如果您的 less 文件中有多个使用相同样式的部分,我绝对会推荐 mixin。 以你为例,我会采用更嵌套的方式:

    // child div is injected by JS
    .ddemrcontent, .blocksmarttemplate, .blocktoken {
        & > span {      
            display: inline-flex;
            align-items: center;
            min-height: 1.7rem;
            margin-top: 0.2rem;
            padding-left: 0.2rem;
            
            &:hover {
                text-decoration: underline;
                cursor: pointer;
            }
        }
    }
    
    .ddfreetext {
        border: 1px dashed black;
        display: flex;
        min-height: 1.7rem;
        margin-top: 0.2rem;
    }
    
    .ddemrcontent > span {
        border-left: 4px solid cadetblue;
    }
    
    .blocksmarttemplate > span {
        border-left: 4px solid burlywood;
    }
    
    .blocktoken > span {
        border-left: 4px solid #8a7090;
    }
    

    【讨论】:

    • 我尝试过类似的方法,但问题是在使用 & 父选择器时,LESS 似乎没有“扩展”以逗号分隔的父类。相反,它按原样使用整个父选择器。因此,我想到循环遍历 Map 以将类应用于 Map 中的每个选择器。请参阅我的 OP,了解我目前的想法。
    • 动态颜色的好主意!我在 codepen 中尝试了我的嵌套部分,它可以正常工作codepen.io/deibl31/pen/LYjRLRZ
    • 感谢您的验证。一定是由于我们使用的构建系统使用的 LESS (2.7.1) 版本。 CodePen 使用它出现的 3.10.0(在撰写本文时)
    • 很高兴知道,但这能解决您的问题吗?
    猜你喜欢
    • 1970-01-01
    • 2016-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多