【问题标题】:CSS: how to override property?CSS:如何覆盖属性?
【发布时间】:2013-12-16 05:16:59
【问题描述】:

我为表格定义了以下样式

table tbody.center tr td {
    text-align: center;
}

其目的是让 tbody 类等于 'center' 的表格单元格的内容居中对齐。

一些单元格仍然需要左对齐,所以我想要一个额外的样式

table tbody tr td.left {
    text-align: left;
}

但这并不完全符合我的需要:

<table>
    <tbody class="center">
        <tr>
            <td class="left">Should be left aligned, but is not</td>
            <td>Center aligned</td>
        </tr>
        <tr>
            <td>long text to stretch the table to be big enough to see the alignment</td>
            <td>long text to stretch the table to be big enough to see the alignment</td>
        </tr>
    </tbody>
</table>

在此标记中,“td”对象对齐实际上具有由“table tbody.center tr td”定义的样式。

为了解决这个问题我需要引入一个额外的样式:

table tbody.center tr td.left 
{
    text-align: left;
}

但我不想为我的每个自定义引入“左”。

有什么方法可以更有效地解决问题并指定样式的优先级?

谢谢。

【问题讨论】:

  • 你当前的 CSS 对我来说很好用:jsfiddle.net/d4uKb
  • "但我不想为我的每个自定义项引入 'left'。"你显然不是白痴。不过,我完全不明白你的意思是获得额外的优势。必须有一些方法来区分自定义。
  • 我想我的意思是请定义您想要自动覆盖的模式。如果这是您所要求的某种 jQuery 方式或 CSS 可能性,这将更加清楚。
  • 你当前的 CSS 对我来说也很好用!您在哪个浏览器中检查?你定义了一个文档类型吗?
  • 如果您的 .center 定义出现在您的 .left 定义之后,那么如果您切换两者,很可能会解决您的问题。

标签: html css


【解决方案1】:

您只需在属性声明的末尾,分号之前添加!important

这是因为 CSS 级联,优先级分配给您的选择器。 在您的情况下,第一个选择器比第二个更具体,因此它具有更高的优先级并覆盖它。

在您的情况下,两个选择器具有相同的特异性(0,0,1,4),因此后者获胜。如 cmets 中所述,您可以将后一个规则移到第一个之前(并且可能添加注释以记住为什么该规则必须在另一个之前,以免再次出现问题)。

所有声明为important 的属性都比普通 属性具有更高的优先级。更多详情请看规格:http://www.w3.org/TR/CSS21/cascade.html#cascade

【讨论】:

  • 避免使用!important,除非确实需要。 CSS 是级联的,尝试使用这种行为。
  • 同意 - 我几乎建议此时只使用内联 CSS。
  • 同意 Shivan...重要会覆盖其他内容,但它没有遵循适当的扩展...使用重要告诉浏览器“进行渲染,然后检查我的重要语法”...这不是一个好方法......它类似于在其他编程语言中使用“goto”......除非你能找出属性没有获得优先权的根本原因,否则不要使用它。
  • 我不认为这种情况是对!important 的滥用,因为我们在td 元素的text-align 属性上指定了它,该元素具有left类> (并且是 th 的后代,依此类推)。如果作者将类 left 赋予此特定元素,我认为他不需要覆盖它或具有不同的对齐方式。
  • !important 存在是有原因的。伙计们不要害怕使用它。
【解决方案2】:

如果您能提供帮助,请不要使用!important。你最终会让以后更难以覆盖该样式。

有许多资源可用于 css 优先级,但这里有一个快速复习:

Universal selectors
Type selectors
Class selectors
Attributes selectors
Pseudo-classes
ID selectors
Inline style

更具体的选择器将应用于不太具体的选择器。并且尽量不要因为链接它们而发疯,否则会损害浏览器布局页面的性能。

更新 不确定整个解决方案的具体细节,但您可以通过将 id 添加到表格并将 .left 添加到 td 来有效地覆盖单元格。

table tbody.center tr td {
    text-align: center;
}

#some_id td.left {
    text-align: left;
}


<table id="some_id">
    <tbody class="center">
        <tr>
            <td class="left">Should be left aligned, but is not</td>
            <td>Center aligned</td>
        </tr>
        <tr>
            <td>long text to stretch the table to be big enough to see the alignment</td>
            <td>long text to stretch the table to be big enough to see the alignment</td>
        </tr>
    </tbody>
</table>

祝你好运!

【讨论】:

  • 除了复习之外,您可能还想提供一个解决方案 - 尽管这是一个好点。
猜你喜欢
  • 1970-01-01
  • 2022-01-06
  • 2012-06-10
  • 2015-02-03
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
  • 2022-01-14
相关资源
最近更新 更多