如何打破CSS继承?

时间:2012-08-07 16:57:13

标签: css css3

我创建了一个Web小部件。我的客户放入他们的网站。基本上在加载时,它调用webservice并加载特定于客户端的数据。

结果看起来像:

<div class="widget">
   <div class="container">
   </div>
</div>

动态地将CSS样式应用于我的widget类。与我们的企业风格保持一致。

问题是当客户端应用程序样式覆盖我应用运行时的样式时。

例如,如果客户端有,它会覆盖我的样式:

body {
  margin: 0 auto;
  padding: 0;
  width: 90%;
  font: 70%/1.4 Verdana, Georgia, Times, "Times New Roman";
}

有没有办法打破继承?只是说类窗口小部件样式的div没有继承父样式。

5 个答案:

答案 0 :(得分:8)

我不认为你可以破解CSS继承,但你可以尝试通过遵循CSS特异性规则来规避它。

一篇很好的专业性文章

http://coding.smashingmagazine.com/2007/07/27/css-specificity-things-you-should-know/

尝试将!important添加到窗口小部件中的样式,使其具有比默认样式更高的特异性。

#myWidget{
    font: 100%/1 "Times New Roman", Serif !important;
}

修改

如果客户端也在使用!important,则可能会导致问题。如果您可以通过示例设置jsFiddle.com,我们可以帮助您找到问题。

我希望有所帮助!

<强> EDIT2

请注意,添加!important的路线应该是最后的选择,因为它是样式规则的“王牌”。

答案 1 :(得分:2)

您不能强制元素不继承父样式。

但是,您可以覆盖不想更改的所有可能样式。如果您的CSS特异性高于客户特异性,那么您的样式将在页面上占主导地位/表达。

请参阅:

CSS Specificity via css-tricks.com

根据您的示例,使用下面的代码将比body声明更具体,因此覆盖:

.widget .container {
    font-family: Arial;
}

答案 2 :(得分:1)

您不能破坏样式继承,但是您可以确保您的样式更重要或以正确的顺序加载,以便您的样式出现在最前面。

查看!important标记。

或者,如果您在他们的样式表之后加载您的样式表,您的样式表将采用先例(除非他们是内联的)。你可以在身体加载后使用Javascript来加载你的样式(但是你会得到一个&#34;闪烁&#34;效果)。

答案 3 :(得分:1)

您也可以尝试inline styling。内联样式具有最高优先级。如果客户端覆盖使用导入的样式表,这将起作用。

与其他人提到的一样,另一种选择是!important

您还可以在http://www.w3.org/TR/CSS2/cascade.html阅读相关规范,其中详细描述了它们的级联方式。如果上面提到的技巧不起作用,也许规格会给你一个线索,或者你肯定会知道这是不可能的。

答案 4 :(得分:1)

使用!important css属性被认为是一种不好的做法。因为它引入了优先级冲突的可能性,并且从长远来看使得对css进行故障排除非常困难。

对此问题采用较少侵入性的方法是使用id分隔窗口小部件,并在样式表中使用&#34; universal&#34;重置一些最重要的样式声明。选择器,例如:

#myWidget *{
  margin: 0;
  padding: 0;
  background: none;
  border: none;
}

例如。然后,专门定义覆盖。