我的网页包含:
<link href="/Content/Site.css" rel="stylesheet" type="text/css" />
<style type="text/css">
td {
padding-left:10px;
}
</style>
引用的样式表包含:
.rightColumn * {margin: 0; padding: 0;}
我在rightcolumn
ID中有一个表格,我希望单元格有一点填充。但是,引用的样式表优先于内联样式。我通过视觉和Firebug看到了这一点。如果我关闭Firebug中的padding:0
指令,则左边的填充生效。
如何让padding-left
工作?
答案 0 :(得分:41)
大多数答案都是正确的,说这是一个特殊性问题,但在解释特异性规则时不正确或不完整。
基本上在你的情况下,.rightColoumn *
比td
“更具体”,因此即使它更早出现,该规则也会获胜。
The CSS 2.1 rules are located here。这些规则是:
连接四个数字a-b-c-d(在具有大碱基的数字系统中)给出了特异性。
因此,在您的情况下,您有两个规则:
.rightColumn * {} /* a = 0, b = 0; c = 1, d = 0 : Specificity = 0010*/
td {} /* a = 0, b = 0, c = 0, d = 1 : Specificity = 0001 */
0001低于0010,因此第一条规则获胜。
有两种方法可以解决这个问题:
!important
使规则更“重要”。我会避免这样做,因为当你有很多规则散布在几个文件上时会让人感到困惑。示例:
<style>
.rightColomn * { padding: 0; } /* 0010 */
td#myUnpaddedTable { padding: 10px; } /* 0101 */
td.anUnpaddedTable { padding: 10px; } /* 0011 */
</style>
修改:修正*的特异性规则。大卫的评论促使我重新阅读规范,这确实表明*选择器对特异性得分没有贡献。
答案 1 :(得分:19)
正如其他人所说,你有一个特殊性问题。在确定优先选择哪两个规则时,CSS引擎会计算每个选择器中#id
的数量。如果有一个比另一个更多,它就被使用了。否则,它会以相同的方式继续比较.class
es和tag
。在这里,您在样式表规则上有一个类,但在内联规则上没有,因此样式表优先。
你可以用!important
来覆盖它,但这是一个非常大的锤子在这里使用。您最好改善内联规则的特异性。根据您的描述,听起来您的.rightColumn
元素是或包含table
,并且您希望该表中的单元格具有额外的间距?如果是这样,您正在寻找的选择器是“.rightColumn td
”,它比样式表规则更具体,并且优先。
答案 2 :(得分:4)
让它工作的最简单方法是在CSS中添加“!important”以保证其优先级(除非你有多个重要的规则):
td {
padding-left: 10px !important;
}
如果您正在寻找没有!重要的答案,您应该阅读CSS specificity specifications。链接网站对其工作方式有一个很好的解释,但基本上它从最重要到最不重要,其中id选择器最重要,类选择器第二,元素选择器第三。
答案 3 :(得分:1)
请改为尝试:
td.rightColumn * {margin: 0; padding: 0;}
外部样式表中的td
更具体,因此胜出。如果您使用元素名称限定rightColumn
类,则将应用页面级样式。
答案 4 :(得分:1)
您可以尝试添加!你的内联css的重要标志。
e.g。
{填充左:10px!重要; }
另外,有关css规则排序的一般规则,请看一下:
答案 5 :(得分:1)
这样做:
.rightColumn *,
td.rightColumn * {
margin: 0;
padding: 0;
}
CSS的优先级如下:
示例:
<style type="text/css">
#myid{
padding: 10px;
}
.class{
padding: 20px;
}
</style>
<div id="myid" class="class"></div>
虽然您的div同时具有ID和类,但ID规则将覆盖.class规则。
要了解有关CSS规则优先级的更多信息,我建议http://www.w3.org/TR/CSS2/cascade.html#specificity。
答案 6 :(得分:1)
好吧,我承认我在这里玩游戏的时间已经很晚了......但是3年后我猜我仍然可以为第一名的答案拍摄..
在我的回答中,额外的酱汁是有一个2级的班级名称的css exexple ..
在下面的示例中,您可以看到没有类的'td'获得“.interval td”样式,带有“indragover”类的td获得“table.interval td.indragover”样式..
(这个代码来自html拖放,所以有一些javascript将'indragover'类应用于dragenter中的td,dragleave事件)
// put this in a css file
.interval {
height: 100%;
width: 100%;
background: #FFFFCC;
border: 2px solid #000000;
border-collapse: collapse;
}
table.interval tr td {
border: 2px solid black;
color:#112ABB;
background: #FFFFCC;
height: 20px;
}
table.interval td.indragover {
background: #AAAA00;
}
// put this in a html file
<table class="interval">
<tr><td>blah</td><td class="indragover">blah</td></tr>
<tr><td class="indragover">blah</td><td>blah</td></tr>
</table>
答案 7 :(得分:-1)
1.div p.bio {font-size: 14px}
#sidebar p {font-size: 12px}
乍一看CSS的第一行可能看起来更具体,但实际上上面的第二行更符合段落的字体大小。
id
比class
更具体,2.p {font-size: 12px}
p.bio {font-size: 14px}
比元素更具体。
p.bio
第二行CSS(class="bio"
)比class
段中的第一行更具体。
p
的优先级高于HtmlHelper.Raw
元素。