css 在元素之间添加空格< li>

smtd7mpg  于 2023-06-07  发布在  其他
关注(0)|答案(9)|浏览(213)

我有一个导航菜单,似乎我不能在<li>元素之间添加空格(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;
}
baubqpgj

baubqpgj1#

更新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/

2w2cym1i

2w2cym1i2#

您可以使用margin属性:

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

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

ff29svar

ff29svar3#

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>
eaf3rand

eaf3rand4#

由于您要求**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和东西...在我包含的示例片段中,我向ul-元素添加了一个小的1px padding,以防止崩溃。尝试删除li:last-child-规则,您将看到最后一项现在扩展了ul-元素的大小。

tnkciper

tnkciper5#

这里的大多数答案都是不正确的,因为它们也会在最后一个<li>上添加底部空间,所以它们不是只在<li>之间添加空间!
最准确和最有效的解决方案如下:

li.menu-item:not(:last-child) { 
   margin-bottom: 3px;  
}
  • 解释:* 通过使用:not(:last-child)的样式将applie所有项目(li.menu-item),但最后一个.
pu82cl6c

pu82cl6c6#

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

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

whitzsjs7#

#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;}
你不需要玩利润。

9w11ddsr

9w11ddsr8#

可以使用网格布局及其间隙属性。与flex相比,使用grid可以多保存一行CSS。

ul {
  display: grid;
  gap: 1em;
}

运行下面的代码片段并尝试一下!

/* base */

ul {
  background: gray;
  list-style: none;
  padding: 1em;
}

li {
  background: green;
  text-align: center;
  padding: 1em;
}

/* UL Gap Adjustment */

ul {
  display: grid;
  gap: 1em;
}
<ul>
  <li>item 1</li>
  <li>item 2</li>
  <li>item 3</li>
</ul>
nwlqm0z1

nwlqm0z19#

我只想说伙计们:
只玩保证金
如果使用margin,则在<li>之间添加空格要容易得多。

相关问题