覆盖没有默认值的CSS属性

时间:2012-04-17 21:05:10

标签: css css3 inheritance css-cascade

如果该属性没有默认值,是否可以在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属性?

2 个答案:

答案 0 :(得分:19)

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

目前无法将其重置为浏览器用作给定元素默认值的任何值。最接近的是CSS3 initial keyword,它根据规范将属性重置为其初始值/默认值,而不是根据浏览器的定义:

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

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

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

答案 1 :(得分:4)

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

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

以下是一些关于它的规范:

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

编辑:

在jmbertucci发表评论之前,我并没有想到我是如何做到这一点的,

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

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

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

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

div {
    top: 100px;
    <?php print DEFAULT_WIDTH; ?>
}