如何为id提供CSS类优先级?

Sha*_*deh 3 html css css-selectors css-specificity

我有这样一个元素:

#idname{
  border: 2px solid black;
}

.classname{
  border: 2px solid gray;
}
Run Code Online (Sandbox Code Playgroud)
<div id = "idname" class="classname">it is a test</div>
Run Code Online (Sandbox Code Playgroud)

我想给它的CSS类而不是CSS id赋予更大的优先级.可能吗?(换句话说,我想将gray-color 设置为border)

t.n*_*ese 22

不要使用,!important因为它是最糟糕的解决方案,如果你想切换样式然后这样做.

#idname{
  border: 2px solid black;
}

#idname.classname {
  border: 2px solid gray;
}
Run Code Online (Sandbox Code Playgroud)
<div id = "idname" class="classname">it is a test</div>
Run Code Online (Sandbox Code Playgroud)

如果你想要与类同时使用其他元素,classname那么不仅仅是#idname 使用:

#idname.classname, .classname {
  border: 2px solid gray;
}
Run Code Online (Sandbox Code Playgroud)


Mic*_*l_B 13

你真正要问的是如何赋予一个比ID 更高的特异性.

ID具有相对较高的特异性100.类具有10的特异性.

有许多方法可以提高选择器的特异性.

以下是一些方法:

#idname.classname
Run Code Online (Sandbox Code Playgroud)

现在这个选择器的特异性为110.


div#idname.classname
Run Code Online (Sandbox Code Playgroud)

现在这个选择器的特异性为111(因为一个元素的特异性为1).


div[class="classname"]
Run Code Online (Sandbox Code Playgroud)

此选择器将无法覆盖ID选择器,因为属性选择器的特异性为10,并且选择器的总特异性仅为11.


!important注解

虽然特异性适用于选择器,但!important注释适用于声明.它有权覆盖所有特异性点.

.classname { ...  !important; }
Run Code Online (Sandbox Code Playgroud)

您可以认为!important具有10000的特异性,如此特异性网站所示.虽然技术上!important不参与特异性.


更多信息:


Bos*_*h99 5

你是在倒退。CSS 规则具有权重,您应该利用这些规则来正确地级联样式。

element = 1 pt
class = 10 pt
id = 100 pt
inline = 1000 pt
!important = 10,000 pt
Run Code Online (Sandbox Code Playgroud)

考虑这篇关于特异性的文章

!important条款虽然确实有效,但在您的级联规则中建立了不灵活性,并且很容易以相互竞争的指令结束。

我的基本原则是“一般”避免ID在 CSS 中使用 s,并且仅在需要覆盖现有类/元素规则时才使用它们。

最终,你是作者。将不太具体的规则写为 a class,并用ID.

从我 14 年以上的网络构建经验来看:如果您必须使用!important条款,那您就做错了。我觉得它很臭。

也就是说有时它会发生。你继承了别人糟糕的 css,这很难避免。