覆盖用户代理CSS样式表规则的最佳方法是什么,该规则为无序列表提供1em余量?

Joh*_*ohn 20 css overriding

我正在开发一个网络应用程序,其topBar类似于顶部的facebook蓝色栏.我在该栏的div中有一个无序列表,列出了一些项目,如收件箱,通知等.UL有一个1em边距,由浏览器的用户代理样式表定义.这是一个问题,因为它正在推动我的topBar下降1em.如何覆盖它以使ul = 0的边界?我已经读过,覆盖用户代理样式表是一个坏主意,所以我很想知道什么是最好的.谢谢.

编辑:这是CSS文件:

body {

margin:0px;
padding:0px;
}

#topBar{
    background-color:#CCCCCC;
    height: 50px;
    width:100%;
    z-index:-1;

}

#mainNav{
    margin:0 auto;
    width:900px;
}
#logo{
    float:left;
}

#mainNav ul li{
    float:left;
    border:0px; 
    margin:0;
    padding:0;
    font-size:10px
}
Run Code Online (Sandbox Code Playgroud)

和HTML:

<!DOCTYPE html>
<html>
    <head>
        <title>ff</title>
        <%= stylesheet_link_tag :all %>
        <%= javascript_include_tag :defaults %>
        <%= csrf_meta_tag %>
    </head>
    <body>
        <div id="topBar">
            <div id="mainNav">
                <div id="logo"><%=image_tag("livecove.jpg") %></div>
                <ul>
                    <li>Inbox</li>
                </ul>
            </div>
        </div>

        <%= yield %>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

ben*_*e89 11

不,这不对.使用Meyers CSS重置:) http://meyerweb.com/eric/tools/css/reset/

  • 虽然重置是好的,但它没有做任何你自己的样式表不能做的事情.如果他自己的样式表不起作用,重置将无法修复它. (3认同)

Mic*_*son 10

如果您能够编辑违规样式表

如果用户代理样式表的样式导致它应该修复的浏览器出现问题,那么您可以尝试删除有问题的样式并对其进行测试,以确保其他地方没有任何意外的负面影响.

如果没有,请使用修改后的样式表.修复浏览器怪癖是这些表的用途 - 它们修复问题,它们不应该引入新的.

如果你是不能够编辑违规样式表

如果您无法编辑包含违规行的样式表,则可以考虑使用该!important关键字.

一个例子:

.override {
    border: 1px solid #000 !important;
}

.a_class {
    border: 2px solid red;
}
Run Code Online (Sandbox Code Playgroud)

和HTML:

<p class="a_class">content will have 2px red border</p>
<p class="override a_class">content will have 1px black border</p>
Run Code Online (Sandbox Code Playgroud)

实例

尽量!important只在你真正需要的地方使用- 如果你可以重新组织你的风格而不需要它,那就更好了.

  • 我们正在谈论后者......我想我已经弄清楚了..在CSS文件的最后一个div声明中,ul和li之间需要一个逗号. (2认同)

小智 7

我不明白为什么没有人指出具体问题,一些答案完全是误导,特别是接受的答案.问题是OP没有选择可能覆盖用户代理(UA)直接在ul标签上设置的margin属性的规则.让我们考虑OP使用的具有保证金属性的所有规则.

body {

margin:0px;
...
}
Run Code Online (Sandbox Code Playgroud)

body元素在DOM中向上,UA规则与下面的元素匹配,因此UA获胜.这是继承的工作方式.继承是一种手段,在没有CSS级联应用的任何源的任何特定声明的情况下,元素的属性值从其父元素获得.父元素的特异性是无用的,因为UA规则直接匹配元素.

#mainNav{
    margin:0 auto;
    ...
}
Run Code Online (Sandbox Code Playgroud)

这是一个更好的尝试,一个更具体的选择器#mainNav,它匹配DOM中较低的mainNav元素,但同样的原则适用,因为该ul元素仍然在DOM中的这个元素下面.

#mainNav ul li{
    ...
    margin:0;
    ...
}
Run Code Online (Sandbox Code Playgroud)

这在DOM中太过分了!现在,选择器匹配li元素下面的ul元素.

因此,假设UA规则使用了选择器ul而不是!important,这很可能就是这种情况,解决方案本来就很简单ul { margin: 0; },但是如果更加具体则更安全#mainNav ul { margin: 0 }.