如何将样式同时应用到多个类?

我想要两个不同名称的类在CSS中具有相同的属性。我不想重复代码。

.abc {
margin-left:20px;
}
.xyz {
margin-left:20px;
}
<a class="abc">Lorem</a>
<a class="xyz">Ipsum</a>

由于两个类都在做同样的事情,我应该能够将它们合并为一个类。我该怎么做呢?

452666 次浏览
.abc, .xyz { margin-left: 20px; }

就是你要找的。

你可以对相同的属性有多个CSS声明,用逗号分隔它们:

.abc, .xyz {
margin-left: 20px;
}

不要重复你的CSS

 a.abc, a.xyz{
margin-left:20px;
}

 a{
margin-left:20px;
}

如果你按照以下方法使用,你的代码会比你写的更有效。

.abc, .xyz {
margin-left:20px;
width: 100px;
height: 100px;
}

a.abc, a.xyz {
margin-left:20px;
width: 100px;
height: 100px;
}

a {
margin-left:20px;
width: 100px;
height: 100px;
}

只需用逗号分隔类名。

.a,.b{
your styles
}

如果你之前和他们的父母设置过这些类,你应该和他们的父母设置一次(每次重复),如下所示:

parent .abc, parent .xyz

还有一种方法可以使用@extend来实现SCSS。

使用CSS伪类:is(以前是:任何:匹配)和:where,你可以使用逗号来匹配任何级别上的多个类。

在根级,:is(.abc, .xyz).abc, .xyz的功能几乎相同。然而,:只允许匹配选择器的一部分,而不需要多次复制整个选择器。

例如,如果你想匹配.root .abc .child.root .xyz .child,你可以这样写代码:

.root :is(.abc, .xyz) .child {
margin-left: 20px;
}  
<div class="root">
<a class="abc">
<span class="child">Lorem</span>
</a>
<a class="xyz">
<span class="child">Ipsum</span>
</a>
</div>

::的区别在于,在计算选择器的特异性时,:会被忽略:

  • .root :is(.abc, .xyz) .child的特异性= .root .abc .child的特异性
  • .root :where(.abc, .xyz) .child的特异性= .root .child的特异性

这两个伪类都接受宽容选择器列表,这意味着如果一个选择器解析失败(由于不支持的语法,要么太新,要么太旧,要么不正确),其他选择器仍然可以工作。这使得:即使在根级也很有用,因为它允许使用现代CSS特性组合选择器,而不用担心一个选择器会破坏其他选择器。

附注:这个问题回答了这个问题的一个更困难的变化,但是谷歌在太多的查询时返回这个页面,所以我认为这个信息在这里是相关的。