如标题所述,我正在寻找有关LESS
中mixin
和extend
之间区别的清晰解释。
欢迎提供代码示例和实时演示(例如在codepen.io上)。
在讲述区别之前,了解一下 mixins
和 extend
是什么非常重要。
Mixins
Mixins
是通用的规则集合,您可以定义并在任何其他规则集合中使用它们,例如:
.highlighted-text {
color: #CCCCCC;
}
.normal-text:hover {
.highlighted-text;
font-size: 14px;
}
.another-text {
.highlighed-text;
}
.highlight-text {
color: #CCCCCC;
}
.normal-text:hover {
color: #CCCCCC;
font-size: 14px;
}
.another-text {
color: #CCCCCC;
}
.highlighted-text
混合到我们认为适合的任何其他规则集中。.bordered
,并将其混合到您想要有边框的所有元素中。这有助于您保持代码的DRY,并且要在页面上跨多个带边框的元素更改样式,您只需要在一个地方进行更改即可。.bordered {
border: 1px solid black;
}
.rounded {
border-radius: 5px;
}
.bordered-and-rounded {
.bordered;
.rounded;
}
最后,mixin也可以定义为带有参数的函数,因此您可以拥有类似以下内容的东西:
.translucent(@opacity) {
opacity: @opacity;
}
.medium-translucence {
.translucent(0.5);
}
.high-translucence {
.translucent(0.25);
}
扩展
扩展的工作方式与面向对象编程(OOP)非常相似。您定义一个父规则集,并建立继承链以继承相同的样式。考虑以下示例:
.black-text {
color: #000000;
}
.title {
&:extend(.black-text);
font-size: 24px;
}
您刚刚通过继承规则将.black-text
的行为“扩展”到标题,并添加了自己的规则。
结果的CSS将会是:
.title {
font-size: 24px;
}
.black-text,
.title {
color: #000000;
}
extend
示例的结果。在接下来的几天里,我会进一步阅读和实验,然后再决定是否接受你的答案,因为目前我的知识还相当有限。 - Adriano
叹气
- Achrome