较少混合重复属性

用户名

使用LESS时,我发现有用的是混合类,以便基于其他类属性创建新类,但是有时我需要覆盖它们。

喜欢:

.btn {
  border-radius: 10px;
  background-color: blue;
  font-size:10px;
}

.btn_warning {
  .btn;
  background-color: yellow;
  font-size: 12px;
}

输出具有重复的属性:

.btn {
    border-radius: 10px;
    background-color: blue;
    font-size:10px;
}

.btn_warning {
    border-radius: 10px;
    background-color: blue; 
    font-size:10px; 
    background-color: yellow;
    font-size: 12px;
}

我知道有很多方法,例如dom上的多个类,甚至@extend可以构建多个选择器,但导航器仍在运行时覆盖属性。

混合时是否有任何重复相同属性的理由?似乎是制作“独立”属性组的简单方法,但如果值重复,就不好了。

斯科特

LESS不占一个块中去除重复的属性,至少在因为这样的原因一部分在这里说(报价略有修改语法修正):

问题在于人们经常使用多个属性来为较旧的浏览器提供后备功能。一般而言,删除属性不是一件好事。

由程序员决定不对其进行重复编程。您可以设置基本的mixin,例如Danny Kijkov在回答中指出的内容,或者...

解决方案1(复杂,但功能强大,可以完全定义)

您可以详细介绍如何构建主按钮生成器mixin。像这样的东西:

LESS (Mixin)

.makeBtn(@ext: null; @rad: 10px; @color: blue; @size: 10px;) {
  .set-extension() when (@ext = null) {
    @class-extension: ~'';
  }
  .set-extension() when not (@ext = null) {
    @class-extension: ~'_@{ext}';
  }
  .set-extension();

  .btn@{class-extension} {
    border-radius: @rad;
    background-color: @color;
    font-size: @size;

    //define various addtions based on extensions here
    .specialExtensionProps() when (@ext = danger) {
      border: 3px solid red;
    }
    .specialExtensionProps() when (@ext = someExtName) {
      my-special-prop: yep;
    }
    .specialExtensionProps();
  }  
}

较少(以各种方式使用Mixin)

.makeBtn(); //makes base button
.makeBtn(warning; @color: yellow; @size: 12px); //makes modified button 
.makeBtn(danger; @color: red;); //makes modified button
.makeBtn(someExtName, 15px); //makes modified button

CSS输出

.btn {
  border-radius: 10px;
  background-color: #0000ff;
  font-size: 10px;
}
.btn_warning {
  border-radius: 10px;
  background-color: #ffff00;
  font-size: 12px;
}
.btn_danger {
  border-radius: 10px;
  background-color: #ff0000;
  font-size: 10px;
  border: 3px solid red;
}
.btn_someExtName {
  border-radius: 15px;
  background-color: #0000ff;
  font-size: 10px;
  my-special-prop: yep;
}

如果您不知道,请注意上面展示的LESS功能,即仅设置mixin变量集中的一些变量。因此,对于前两个专门的.makeBtn()调用,我仅通过显式调用要设置的变量名称(例如@color: yellow来设置一些变量(与mixin顺序不符)。这使我可以“跳过”设置@size在最后一个示例中,我仅设置了前两个值,因此不需要放置任何变量名。

我不知道上面的内容是否可以帮助您获得所需的内容,但是它确实提供了减少代码大小的另一种方法。

解决方案#2

您提到了:extend(),可以在这里很好地使用它来避免重复:

较少的

.btn {
  border-radius: 10px;
  background-color: blue;
  font-size:10px;
}

.btn_warning {
  &:extend(.btn);
  background-color: yellow;
  font-size: 12px;
}

CSS输出

.btn,
.btn_warning {
  border-radius: 10px;
  background-color: blue;
  font-size: 10px;
}
.btn_warning {
  background-color: yellow;
  font-size: 12px;
}

解决方案#3

在您的情况下,如果所有按钮都是类.btn.btn_SOMETHING表单,并且.btn_除了按钮之外,您不使用其他任何东西,那么您可以只使用CSS级联来应用样式并防止CSS代码重复,就像这样(无需特殊的LESS):

LESS和CSS输出

.btn, [class *= btn_] {
  border-radius: 10px;
  background-color: blue;
  font-size:10px;
}

.btn_warning {
  background-color: yellow;
  font-size: 12px;
}

具有该类的任何htmlbtn_warning首先将从属性选择器中获取基本按钮样式,[class *= btn_]而实际的btn_warning类将覆盖设置为要覆盖的内容。

解决方案#4

如果您在html中拆分类名(class="btn warning"而不是class="btn_warning"),则可以避免重复:

LESS和CSS输出

.btn {
  border-radius: 10px;
  background-color: blue;
  font-size:10px;
}

.btn.warning {
  background-color: yellow;
  font-size: 12px;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

较少混合重复属性

来自分类Dev

Orchard CMS 1.x [文档存储]-混合支持记录和较少记录的属性

来自分类Dev

较少的列表作为混合参数

来自分类Dev

较少-混合附加到父级的类

来自分类Dev

带有较少混合的JQuery .addClass()

来自分类Dev

较少的自定义功能/混合

来自分类Dev

较少的递归混合功能无法正常工作

来自分类Dev

混合中的条件变量更改较少

来自分类Dev

较少的递归混合功能无法正常工作

来自分类Dev

删除空值较少的重复项

来自分类Dev

较少用逗号而不是句点解析我的网格混合

来自分类Dev

较少继承悬停和焦点的确切属性

来自分类Dev

在属性选择器中使用较少的参数

来自分类Dev

较少继承悬停和焦点的确切属性

来自分类Dev

sqlalchemy,混合属性案例声明

来自分类Dev

通过样式属性以减少混合

来自分类Dev

在sqlalchemy中加入的混合属性

来自分类Dev

在sqlalchemy中加入的混合属性

来自分类Dev

混合无线网络重复

来自分类Dev

角度重复-动态属性

来自分类Dev

重复属性的熊猫总和

来自分类Dev

查找重复的id属性

来自分类Dev

重复属性说明

来自分类Dev

如何在Swift中用较少重复的代码进行连续的方法调用?

来自分类Dev

导入使用Mixins的文件较少时,是否可以避免重复的CSS?

来自分类Dev

较少-将mixin分配给变量并重复使用

来自分类Dev

较少的寻呼机程序,能够重复前N行

来自分类Dev

“命令|较少”与“较少<(命令)”

来自分类Dev

“命令|较少”与“较少<(命令)”