【问题标题】:Add space between <li> elements在 <li> 元素之间添加空格
【发布时间】:2012-08-07 21:07:30
【问题描述】:

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

您可以在jsfiddle 或以下查看 HTML 和 CSS 代码。

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

【问题讨论】:

  • 应该是margin-bottom: 2px而不是margin-button: 2px?只是确保这不仅仅是一个简单的拼写错误?
  • 一堆不同的颜色 - 你是什么意思?
  • 我猜他的下拉菜单下会有他想通过空白显示的内容?

标签: css


【解决方案1】:

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>

【讨论】:

    【解决方案2】:

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

    display: flex;
    align-items: flex-start;
    flex-direction: column;
    gap: 40px;
    

    【讨论】:

      【解决方案3】:

      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/

      【讨论】:

      • 要真正元素之间而不是在最后一项之下,您可以使用li:not(:last-child)。在此处查看更多信息:stackoverflow.com/questions/2573544/…
      • 不是一个完美的解决方案,因为它也为最后一个添加了空间 - 请参阅下面的答案以获得更优雅的解决方案。
      • @AlphaX 你现在是对的。在 2012 年,这些 3 级选择器均不可用,因此您只能使用 JS 或其他 CSS 样式显式删除最终元素的边距。将在 2021 年更新我的答案
      【解决方案4】:

      大多数答案都是不正确,因为它们也会在最后一个 &lt;li&gt; 中添加底部空间,因此它们不会仅在 &lt;li&gt; 之间添加空间!

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

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

      解释: 通过使用:not(:last-child),样式将应用于除最后一项之外的所有项目(li.menu-item)。

      【讨论】:

        【解决方案5】:
        #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 但你把它给了&lt;a&gt; 标签而不是&lt;ul&gt; 试试这个:

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

        那时你就不需要玩边距了。

        【讨论】:

          【解决方案6】:

          由于您要求 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>

          由于margin-collapsing 之类的原因,它的结果可能并不总是可见的……在我包含的示例 sn-ps 中,我在ul 中添加了一个小的1px padding -element 以防止崩溃。尝试删除li:last-child-规则,您会看到最后一项现在扩展了ul-元素的大小。

          【讨论】:

            【解决方案7】:

            我只想说伙计们:

            只玩保证金

            如果您使用边距,在&lt;li&gt; 之间添加空格会容易得多。

            【讨论】:

              【解决方案8】:

              您可以使用margin 属性:

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

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

              【讨论】:

              • 这将在最后一项之间和下方添加空间,因此不是一个完美的解决方案。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-09-05
              • 2017-08-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-12-23
              • 1970-01-01
              相关资源
              最近更新 更多