yuanfan 这是一个 CSS 优先级问题。简单说来就是一句话:如果一个元素身上有多条样式规则定义了同样的样式属性,那么更细致的规则会胜出。估计这一点 CSS 基础知识你已经知道了,而这里的问题就是为啥你的文本居中规则输了,或者确切地说,你的规则输给了谁?答案是这样:默认情况下,DT 会右对齐数值类型的列。具体办法是给数值列赋一个 dt-right
的类,其 CSS 规则定义为:
table.dataTable th.dt-right, table.dataTable td.dt-right {
text-align: right;
}
这便是你的仇家——你的规则不如它细致:
.className2 {
text-align: center;
}
它是定义给带有 dataTable
类的 <table>
元素中的 th
(表头)和 td
(单元格)的,而你是定义给任意带有 className2
元素的。于是细致选择打赢了任意选择。为了翻盘,你必须要和它一样细致或更细致,锁定你要选择的对象:
table.dataTable th.className2, table.dataTable td.className2 {
min-width: 100px;
text-align: center;
}
在这里一样细致就够了,因为最终生成的 HTML 元素形如 <td class="dt-right className2">
;className2
出现的位置更靠后,后来者居上,优先级更高,所以它会赢了 dt.right
,战斗出来的结果就是文本会居中对齐。
注意这里只有多条 CSS 规则定义同一样式属性时才会引发战斗,比如大家都试图定义 text-align
属性。如果不同细致程度的规则定义不同的属性,那么就不会发生冲突。前两个 .ring
和 .className1
类都达成了它们的目的,就是因为没有其它规则来定义这些蓝框框和灰板板,否则你可能也需要啰嗦定义 table.dataTable th.ring
等等。
又及:这种问题不需要看整篇 HTML 源代码;浏览器中打开这个网页,在有问题的元素上点右键,点 Inspect 菜单(有些浏览器可能叫 Inspect Element,我不知道中文界面中是怎么翻译的),就可以查看那个元素的源码以及附属的所有 CSS 样式。你会看到 .className2
的样式有一条删除线,这就表示它被别的规则覆盖了,然后也可以看见 dt-right
的定义。