html - 具有 2 个重要的 CSS 优先级
问题描述
我导入了两个 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; }
我需要添加一个规则来将 padding-top 覆盖为 5。我试过这个:
.leafspacer tr > td > label { padding-top: 5px !important; }
或者
tr > td > label { padding-top: 5px !important; }
根据我对优先级规则的理解,padding-top: 5px !important;
应该有更高的优先级并覆盖填充 7,但它不起作用。
如何根据无法编辑 HTML 并且只能编辑第一个导入的 CSS 文件的限制,用 5 覆盖填充 7?
解决方案
!important
s不好。时期。
如果遇到这样的问题,则表明您的项目需要重构,而不必使用!important
s。
要回答这个问题,您尝试覆盖的选择器具有(0,1,2)!
(0 个 ID,1 个类,2 个其他,重要)的特异性。
要覆盖该选择器,您至少需要(0,1,3)!
or (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 结构发生更改,可能会破坏您的代码。
因此,您最好的解决方法是重复该类,在(0,2,2)!
不改变行为的情况下赋予选择器特定性:
.leafspacer.leafspacer td > label { padding-top: 5px !important; }
这在所有情况下都有效,但我不能强调你应该重构代码以避免使用!important
s 如果你有任何办法这样做!
推荐阅读
- javascript - 如何排除茉莉花中的一些规范文件?
- r - 函数错误(类型、msg、asError = TRUE):无法解析主机:datamarket.accesscontrol.windows.net
- gulp - 使用 Jekyll 进行 Gulp 任务监视,gulpfile.babel.js
- c# - 使用带有 asp.net 核心的服务类
- maven - 在 maven-remote-resources-plugin 中激活过滤
- javascript - 当div滑动到结束时如何使div返回起点
- scala - 如何修复关于 asInstanceOf 使用的警告
- php - Laravel ::all() 替代方法,返回一个 Builder 对象
- java - JavaFX 的 TableView 具有突出显示的文本和省略号功能
- google-bigquery - Big Query 命令行查询和追加到表