如何取消上游CSS声明?

时间:2013-12-04 14:47:47

标签: css

以下声明在我的CSS文件顶部阻止:

* {
  margin: 0;
  padding: 0;
  border: 0;
}

... 几乎我想要的东西,但并不完全。更接近标记的将是以下“幻想CSS”:

* {
  margin: 0;
  padding: 0;
}

(?!button) * {   /* i.e. "everything except button" */
  border: 0;
}

我试图用

模拟这个幻想
* {
  margin: 0;
  padding: 0;
  border: 0;
}

button {
  border: initial;
}

......无济于事。 (我认为,至少对于buttoninitial属性的border值实际上是0,或者是有效的等价物。)

当然,在没有border声明的情况下,我可以找出buttonborder: 0;的价值,然后显式重置此值; e.g。

* {
  margin: 0;
  padding: 0;
  border: 0;
}

button {
  border: 2px outset rgb(240, 240, 240);
}

...但是取消早期的border: 0;声明肯定与不一样。首先,button { border: ...; }声明的实际值必然会因浏览器,操作系统等而异。

有没有办法真正取消早期的CSS声明? IOW,有没有什么方法可以在CSS(或其他方式实现)中表达语义上等同于到我上面展示的“幻想CSS”的东西?


(当然,我发现我总是可以放弃*作为border: 0;声明的选择器,只需使用包含button以外的每个html5标记的选择器,但是这不能回答我的问题,它只能绕过它。因此,严格来说,这个解决方法除了这个帖子之外还有其他方面。除此之外,我还有一些狡辩。)

2 个答案:

答案 0 :(得分:3)

只需使用:not()选择器(隐含*):

:not(button) {
    margin: 0; /* applied to all elements except <button> */
}

https://developer.mozilla.org/en/docs/Web/CSS/:not

了解详情

答案 1 :(得分:0)

只是多余。 而不是*,使用:

    html, body, body div, span, object, iframe,
    h1, h2, h3, h4, h5, h6, p, blockquote, pre,
     abbr, address, cite, code, del, dfn, em, img, ins, kbd, q, samp,
     small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li,
        fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td,
        article, aside, canvas, details, figcaption, figure,
        footer, header, hgroup, menu, nav, section, summary,
        time, mark, audio, video {
                  margin: 0;
                  padding: 0;
                 border: 0;
                  font-size: 100%;
          vertical-align: baseline;
}

您可以添加或删除其他标签。

对于更复杂的inicialitazions,我建议你使用html5doctor.com重置样式表,你可以在这里找到html5doctor.com/html-5-reset-stylesheet/