75

我有一个导航菜单,似乎无法在元素margin: 3px;之间添加空格() 。<li>

你可以在这个jsfiddle或下面看到 HTML 和 CSS 代码。

你会看到我添加了一个border-bottom: 2px solid #fff;#access li模拟元素之间的空间,但这不起作用,因为在导航菜单下我会有一堆不同的颜色。如果我添加margin-button: 2px它不起作用。

这是 HTML:

<nav id="access" role="navigation">
    <div class="menu-header-menu-container">
        <ul id="menu-header-menu" class="menu">
            <li id="menu-item-41" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-41">
                <a href="http://localhost:8888/fullstream/?page_id=5">About Us</a>
            </li>
            <li id="menu-item-35" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-35">
                <a href="http://localhost:8888/fullstream/?page_id=7">Services</a>
            </li>
            <li id="menu-item-34" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-34">
                <a href="http://localhost:8888/fullstream/?page_id=9">Environmental Surface Cleaning</a>
            </li>
            <li id="menu-item-33" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-33">
                <a href="http://localhost:8888/fullstream/?page_id=11">Regulations</a>
            </li>
            <li id="menu-item-32" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-32">
                <a href="http://localhost:8888/fullstream/?page_id=13">Contact Us</a>
            </li>
       </ul>
</div>

这是CSS:

#access {
    background: #0f84e8; /* Show a solid color for older browsers */
    display: block;
    margin: 0 auto 6px 55px;
    position: absolute;
    top: 100px;
    z-index: 9999;
}
#access ul {
    font-size: 13px;
    list-style: none;
    margin: 0 0 0 -0.8125em;
    padding-left: 0;
}
#access li {
    position: relative;
    padding-left: 11px;
}
#access a {
    border-bottom: 2px solid #fff;
    color: #eee;
    display: block;
    line-height: 3.333em;
    padding: 0 10px 0 20px;
    text-decoration: none;
}

#access li:hover > a,
#access ul ul :hover > a,
#access a:focus {
    background: #efefef;
}
#access li:hover > a,
#access a:focus {
    background: #f9f9f9; /* Show a solid color for older browsers */
    background: -moz-linear-gradient(#f9f9f9, #e5e5e5);
    background: -o-linear-gradient(#f9f9f9, #e5e5e5);
    background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#f9f9f9), to(#e5e5e5)); /* Older webkit syntax */
    background: -webkit-linear-gradient(#f9f9f9, #e5e5e5);
    color: #373737;
}
#access ul li:hover > ul {
    display: block;
}
4

8 回答 8

116

2021 年更新

我最初的答案是从 2012 年开始,当时许多 3 级 CSS 选择器都不存在。为了实现这一点,我们需要 JS 或其他显式的 CSS 样式/类来实现它。正如@AlphaX 指出的那样,现在最好的解决方案就是

li.menu-item:not(:last-child) { 
   margin-bottom: 3px;  
}

旧答案

添加:

margin: 0 0 3px 0;

到你#access li和移动

background: #0f84e8; /* Show a solid color for older browsers */

#access a并取出border-bottom。然后它会工作

这里:http: //jsfiddle.net/bpmKW/4/

于 2012-08-10T14:34:37.893 回答
25

您可以使用该margin属性:

li.menu-item {
   margin:0 0 10px 0;   
}

演示:http: //jsfiddle.net/UAXyd/

于 2012-08-10T14:31:09.987 回答
15

由于您要求space between,我会在最后一项上添加一个覆盖以消除那里的额外边距:

li {
  background: red;
  margin-bottom: 40px;
}

li:last-child {
 margin-bottom: 0px;
}

ul {
  background: silver;
  padding: 1px;  
  padding-left: 40px;
}
<ul>
<li>Item 1</li>
<li>Item 1</li>
<li>Item 1</li>
<li>Item 1</li>
<li>Item 1</li>
</ul>

它的结果可能并非始终可见,因为边距折叠和其他东西......在我包含的示例片段中,我在 - 元素中添加了一个小1px padding元素ul以防止折叠。尝试删除li:last-child-rule,您会看到最后一项现在扩展了ul-element 的大小。

于 2018-05-04T11:43:31.310 回答
7

有一个强大的功能flex允许指定每个孩子之间的空间,而不必通过gap. margin我发现自己比此时更频繁地使用:

ul {
  display: flex;
  flex-direction: column;
  gap: 10px;
}

例子

li {
  background: red;
}

ul {
  background: silver;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
<ul>
  <li>Item 1</li>
  <li>Item 2</li>
  <li>Item 3</li>
  <li>Item 4</li>
  <li>Item 5</li>
</ul>

于 2021-10-16T00:00:55.783 回答
5

这里的大多数答案都不正确,因为它们也会将底部空间添加到最后<li>,因此它们不会仅在两者之间添加空间<li>

准确和最有效的解决方案如下:

li.menu-item:not(:last-child) { 
   margin-bottom: 3px;  
}

说明: 通过使用:not(:last-child)样式将应用于所有项目(li.menu-item),但最后一项。

于 2021-02-21T13:31:02.437 回答
1

简单快速。只需将 css 放入 ul 元素('gap' 属性定义 li 元素之间的空间):

display: flex;
align-items: flex-start;
flex-direction: column;
gap: 40px;
于 2021-08-29T20:28:42.160 回答
0

我只想对大家说:

只玩保证金

<li>如果您使用边距,则在两者之间添加空间会容易得多。

于 2017-06-07T23:27:24.443 回答
0
#access a {
    border-bottom: 2px solid #fff;
    color: #eee;
    display: block;
    line-height: 3.333em;
    padding: 0 10px 0 20px;
    text-decoration: none;
}

我看到你使用了 line-height 但你把它给了<a>标签而不是<ul> 试试这个:

#access ul {line-height:3.333em;}

那时你就不需要玩利润了。

于 2019-09-13T06:22:25.163 回答