我导入了两个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
坏。时期
如果你遇到这样的问题,这表明你的项目需要重构,在某种程度上它不必使用!important
s。
为了回答这个问题,您试图覆盖的选择器具有(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;}