10

如果该属性没有默认值,是否可以在 CSS 中覆盖该属性?

例如,假设您的主样式表为特定元素定义了边框:

#element {
  border: 1px solid #000;
}

如果你想禁用辅助样式表的边框,你可以这样做:

#element {
  border: none;
}

假设第二个样式表是在第一个样式表之后加载的,则该border: none规则将优先并删除边框。

但是如果你试图覆盖一个没有默认值或空值的属性呢?

#element {
  position: absolute;
  left: 0;
}

现在说,在您的辅助样式表中,您想这样做:

#element {
  right: 0;
  top: 0;
}

而且您不希望left. 没有这样的东西left: none;,所以......你如何“取消声明”left主样式表中分配的属性?

4

2 回答 2

20

如果我正确阅读了您的问题,您是否想在一个样式表中“删除”您在另一个样式表中的声明,以便该属性将计算为默认值?

目前无法将其重置为浏览器用作给定元素的默认值的任何值。您可以获得的最接近的是CSS3initial关键字,它根据规范而不是根据浏览器的定义方式将属性重置为其初始/默认值:

#element {
  left: initial;
  right: 0;
  top: 0;
}

除了 Safari/Chrome 和 Firefox (as) 之外,没有太多浏览器支持它-moz-initial,所以你的下一个最佳选择是查找初始值并对其进行硬编码。对于left属性,它是auto(而且我相信它是所有浏览器中任何元素的这个值),所以:

#element {
  left: auto;
  right: 0;
  top: 0;
}
于 2012-04-17T21:07:13.803 回答
4

每个 CSS 属性都有依赖于浏览器的默认值,因此没有没有默认值的 CSS 属性。

正如 BoltClock 所说,initial是最好的选择。

以下是有关它的一些规格:

http://www.w3.org/TR/css3-cascade/

编辑:

在 jmbertucci 发表评论之前,我并不认为我一直是如何做到这一点的,

通过使用 CSS 重置,您可以定义自己的默认值,而不依赖于使用的浏览器。如果您left: 10px;在自己的 reset.css 中定义,则可以在需要恢复默认值时使用相同的值。

例如,我经常从我的 reset.css 中查找字体大小,并使用它们来进行取决于文本高度的高度计算。

如果使用 PHP 或其他一些预处理,您也可以始终将其用于 CSS 文件:

<?php
define('DEFAULT_WIDTH', 'width: 100px;');
?>

div {
    top: 100px;
    <?php print DEFAULT_WIDTH; ?>
}
于 2012-04-17T21:13:49.040 回答