CSS:LI元素之间的额外间隙[重复]

Posted

技术标签:

【中文标题】CSS:LI元素之间的额外间隙[重复]【英文标题】:CSS: extra gap between LI elements [duplicate] 【发布时间】:2016-09-30 06:52:02 【问题描述】:

在this site,,当您将鼠标悬停在大页脚菜单中的菜单项上时,蓝色li:hover 的左侧和前一个li 的边框右侧有一个间隙(由下面的红色部分):

我已放大 200% 并检查了该区域,但看不到导致此差距的原因。

你可以吗?

【问题讨论】:

【参考方案1】:

使用 flexbox 非常简单

.home .footer-menu 
    display: flex;
    align-items: stretch;
    justify-content: center;

现在,只需调整按钮的文本垂直对齐方式

【讨论】:

谢谢。 Looks like only IE > 11 has some support. 这不能回答问题。 OP 在问为什么会有差距。【参考方案2】:

你可以改变css

.home .footer-menu 
    border-bottom: 1px solid #EEE;
    border-top: none;
    margin-bottom: 0;

这样可以解决问题

  .home .footer-menu 
    border-bottom: 1px solid #EEE;
    border-top: none;
    margin-bottom: 0;
    font-size: 0; // Added this line

【讨论】:

这不能回答问题。 OP 在问为什么会有差距。 谢谢。如果我添加它,水平间隙将被删除,但现在li 顶部有一个间隙,请再次查看live site。 正如我所说,你没有回答这个问题。问题是“为什么会出现”,而不是“我该如何解决”。 @Steve 你注意到第一项没有空格吗? 是世锦。我们如何确保所有项目没有间隙?谢谢。【参考方案3】:

您必须在您的li 中添加<!-- -->,请参阅下面的代码。

<ul class="footer-menu" id="menu-primary-menu"><li class="first-menu-item menu-item-type-post_type menu-item-object-page menu-item-38" id="menu-item-38"><a href="http://staging.venusanddiamonds.com/about-us">About Us</a></li><!--
--><li class="last-menu-item menu-item-type-post_type menu-item-object-page menu-item-39" id="menu-item-39"><a href="http://staging.venusanddiamonds.com/shopping">Shopping</a></li><!--
--><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-40" id="menu-item-40"><a href="http://staging.venusanddiamonds.com/shipping">Shipping</a></li><!--
 --><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-41" id="menu-item-41"><a href="http://staging.venusanddiamonds.com/jewellery">Jewellery</a></li><!--
--><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-42" id="menu-item-42"><a href="http://staging.venusanddiamonds.com/black-diamonds">Black Diamonds</a></li><!--
--><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-43" id="menu-item-43"><a href="http://staging.venusanddiamonds.com/bespoke">Bespoke</a></li><!-- 
--><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-44" id="menu-item-44"><a href="http://staging.venusanddiamonds.com/coming-soon">Coming Soon</a></li>
</ul>

【讨论】:

【参考方案4】:

出现的空格是内联块标签之间的实际空格。如果你有

<ul>
    <li>a</li>
    <li>b</li>
    <li>c</li>
</ul>

那么空格将出现在行内块之间,就像你键入的单词之间出现空格一样。

如果你把它改成

<ul>
    <li>a</li><li>b</li><li>c</li>
</ul>

然后您将不再看到项目之间的空格。

一种轻松证明正在发生这种情况的方法是,您实际上可以突出显示这些空格,然后剪切和粘贴它们。

为了防止这种情况发生,可以设置

.footer-menu ul, .footer-menu-links ul 
    font-size:0px;

但这可能会影响子元素而没有简单的方法来纠正它,所以你也可以使用

.footer-menu ul, .footer-menu-links ul 
    word-spacing:-.25em;


.footer-menu ul *, .footer-menu-links ul * 
    word-spacing:normal;

或者在 html5 文档中,您可以简单地跳过结束标签来完全避免这个问题,因为它根本不关心。

如果这不可行,您还可以使用 cmets 像这样“屏蔽”空白:

<ul><!-- Comment tags can also be used to block off the whitespace
    --><li>a</li><!--
    --><li>b</li><!--
    --><li>c</li><!--
--></ul>

这允许您将元素分开,以提高每行一个项目的易读性,但阅读起来有点混乱。

【讨论】:

这是正常的浏览器行为吗?我以为浏览器会忽略这些空格。 浏览器会忽略 HTML 代码中的空格,但设置为 display:block 的 就像任何其他块元素一样。如果您在其中键入一个不在任何其他标签内的空格,它将呈现该空格。 例如,为了理解行为,将block 元素视为替换为&lt;div&gt;,将inline-block 视为替换为&lt;span&gt; 我用过.footer-menu ul, .footer-menu-links ul font-size:0px; ,但现在有a gap at the top of each li 尝试我提出的最后一种方式,使用 word-spacing 属性,或者将 font-size 设置回之前的 &lt;ul&gt; 标签的所有子级,或者按照我的建议删除&lt;li&gt; 元素的结束标签。【参考方案5】:

这是空白。如果你这样写你的清单:

<li id="menu-item1">
    <a>Link</a>
</li><li id="menu-item2">
    <a>Link</a>
</li>

<li id="menu-item1">
    <a>Link</a>
</li><!--
--><li id="menu-item2">
    <a>Link</a>
</li>

而不是

<li id="menu-item1">
    <a>Link</a>
</li>
<li id="menu-item2">
    <a>Link</a>
</li>

它将消除间隙。

【讨论】:

【参考方案6】:

希望对你有帮助。

display: inline-block ; 从左侧获取默认边距,所以 您可以使用负 4px o 边距将元素滑回原位(可能需要根据父级的字体大小进行调整)。 显然,这在较旧的 IE(6 和 7)中是有问题的, 但如果你不关心那些浏览器,至少你可以保持代码格式干净。

For your clarification i attached the Fiddle also:

https://jsfiddle.net/hehrvjhx/1/

【讨论】:

以上是关于CSS:LI元素之间的额外间隙[重复]的主要内容,如果未能解决你的问题,请参考以下文章

CSS中 li 之间的间隔如何取消?

Bootstrap 缩略图网格中额外项目之间的间隙

css将列表以行内块显示时怎么把他们之间的间隙去掉?在<li>标签上设置margin:0也没有用

列表项和嵌套子菜单列表之间的间隙导致悬停状态丢失

将数字 1 - 100 打印到屏幕上,在 li 开头添加了额外的空白列表元素

删除图像标签 HTML/CSS 之间的水平间隙 [重复]