如何用另一种风格扩展css类?

时间:2017-01-13 13:22:36

标签: css

我有近30个课程,我想将这些课程应用到我的按钮元素。我不想为每个按钮元素添加class属性。有没有办法创建一个新的按钮类,如;

.button{
        .rounded-corner
        .corner
        .button-effective
        //another 20 classes
}

6 个答案:

答案 0 :(得分:14)

您必须使用CSS预处理器才能执行此操作。

SASS

<强> extend

.rounded-corner {}
.corner {}
.button-effective {}

.button {
  @extend .rounded-corner;
  @extend .corner;
  @extend .button-effective
  // Continue with other classes.
}

编译为:

.rounded-corner, .button {}
.corner, .button {}
.button-effective, .button {}

<强> mixin

@mixin rounded-corner {}
@mixin corner {}
@mixin button-effective {}

.button {
  @include .rounded-corner;
  @include .corner;
  @include .button-effective
  // Continue with other classes.
}

编译为:

.button {
  /* rounded-corner styles here */
  /* corner styles here */
  /* button-effective styles here */
}

LESS

LESS与SASS有类似的sytanx,并且还有扩展 mixin ,但如果你想添加一个类,那么LESS会更宽容。风格到另一个。虽然我认为仍然在LESS中考虑使用mixin,但您可以像下面这样添加一个类样式,而不必使用关键字。

.rounded-corner {}
.corner {}
.button-effective {}

.button {
  .rounded-corner;
  .corner;
  .button-effective;
  // Continue with other classes.
}

编译为:

.button {
  /* rounded-corner styles here */
  /* corner styles here */
  /* button-effective styles here */
}

答案 1 :(得分:5)

CSS4中可以实现:

 :root {
  --toolbar-theme: {
    border-radius: 4px;
  };
  --toolbar-title-theme: {
    color: green;
  };
}

.toolbar {
  @apply --toolbar-theme;
  @apply --toolbar-title-theme;
}

目前,您需要使用Sass / Less预处理器。

答案 2 :(得分:3)

您可以使用属性选择器并连接您的类;它仍然需要在你的按钮元素中添加一个长类:

<button class="button-rounded-corner-effective">Your button</button>

OR

<button class="button rounded corner effective">Your button</button>
/* Which is exactly what you did not want to do,
   but the CSS below will apply all the same.
   This example to clarify, then. */

...然后你的CSS将是:

[class*="button"]{/*Generic button styles*/}
[class*="rounded"]{/*Rounded styles*/}
[class*="corner"]{/*Corner styles*/}
[class*="effective"]{/*Effective styles*/}

你需要注意命名空间 - 通配符选择器将匹配任何匹配字符串的类。

例如:

[class*="round"]{/*Will match rounded*/}

答案 3 :(得分:1)

是的,您可以使用Less或Sass。对我来说,Less is&#34;更容易&#34;要集成到您的项目中,您将获得以下代码:

.button{
    .rounded-corner
    .corner
    .button-effective
}
.secondClass{
    .button;
    // your style code
}
.thirdClass{
    .button;
    // your style code
}

答案 4 :(得分:1)

您正在描述mixinextends,如果您使用像LESS或SASS这样的CSS预处理器,目前可能会这样做。 CSS预处理器允许您编写具有额外功能的非CSS,然后通过预处理器运行它以将其转换为提供给浏览器的常规CSS。

在常规CSS中无法完成您所描述的内容。

答案 5 :(得分:1)

通过 CSS modules,您可以使用 composes

.className {
  color: green;
  background: red;
}

.otherClassName {
  composes: className;
  color: yellow;
}