CSS优先级有2个重要项



我导入了两个CSS文件。我可以更改第一个导入的CSS文件,但不能修改第二个。我也不能编辑HTML,只能编辑CSS。

我有一个元素:

<tr id="mad3161b5-co_0" role="presentation" control="true" class="  multiparttext leafspacer verticalSpacer" style="vertical-align:top;">
<td id="mad3161b5-co2_0" role="presentation" nowrap="nowrap" class="  multiparttext leafspacer verticalSpacer" style="">
<label id="mad3161b5-lb" ctype="label" noclick="1" targetid="mad3161b5-lb" class="text label  " style="display:block;margin-top: 5px;" for="mad3161b5-tb">some text</label>
</td>
</tr>

在第二个不可编辑的CSS文件中有:

.leafspacer td > label { padding-top: 7px !important; }

我需要添加一个规则来覆盖填充顶部到5。我试过这个:

.leafspacer tr > td > label { padding-top: 5px !important; }

tr > td > label { padding-top: 5px !important; }

根据我对优先级规则的理解,padding-top: 5px !important;应该有更高的优先级并覆盖padding7,但它不起作用。

如何根据我不能编辑HTML和只能编辑第一个导入的CSS文件的限制,用5覆盖填充7?

!important坏。时期

如果你遇到这样的问题,这表明你的项目需要重构,在某种程度上它不必使用!importants。


为了回答这个问题,您试图覆盖的选择器具有(0,1,2)!的特异性(0个ID,1个类,2个其他,重要(。

要覆盖该选择器,您至少需要(0,1,3)!(0,2,0)!

通过查看您所做的尝试,您可能会看到

.leafspacer tr > td > label { padding-top: 5px !important; }

具有(0,1,3)!的特异性,因此它应该起作用。但是,它也会更改选择器的行为(要求tr.leafspacer中为,但事实并非如此(,因此它不匹配。

你做的另一个尝试(0,0,3)!的特异性更低,所以它不起作用。


要解决问题,您可以更改第一次尝试以匹配元素:

tr.leafspacer > td > label { padding-top: 5px !important; }

然而,这与不可更改的CSS(需要tr(的行为仍然不同,如果HTML结构发生变化,CSS可能会破坏代码。

因此,最好的解决方法是重复该类,在不改变行为的情况下为选择器提供(0,2,2)!特异性:

.leafspacer.leafspacer td > label { padding-top: 5px !important; }

这在所有情况下都会起作用,但我再怎么强调也不为过,如果有办法的话,你应该重构代码以避免使用!important

.leafspacer td>label.label{padding-top:5px!important;}

最新更新