【问题标题】:How do I get rid of white spaces between spans without manipulating the HTML?如何在不操作 HTML 的情况下摆脱跨度之间的空白?
【发布时间】:2012-06-29 09:54:38
【问题描述】:

这是我的下拉菜单代码。我从产生这个的教程中提取了代码:http://www.webdesigndev.com/wp-content/uploads/2009/07/fancydropdown.html

但是我有图像而不是文本导航,正如您在附加到跨度 ID 的 CSS 中看到的那样。使用此代码,我正确地为每个跨度提供了下拉菜单,我只是无法摆脱它们之间的空白。

我知道 HTML 中 div/span 之间的新行会创建空格,但我想知道在 CSS 中消除它们的方法。

<div id="menu">
<ul class="tabs">
<li class="hasmore"><a href="#"><span id="bird"></span></a>
    <ul class="dropdown">
        <li><a href="#">Menu item 1</a></li>
        <li><a href="#">Menu item 2</a></li>
        <li class="last"><a href="#">Menu item 6</a></li>
    </ul></li><li class="hasmore"><a href="#"><span id="wild"></span></a>
    <ul class="dropdown">
        <li><a href="#">Menu item 1</a></li>
        <li><a href="#">Menu item 2</a></li>
        <li class="last"><a href="#">Menu item 6</a></li>
    </ul>
</li>

</ul>
</div>

这是一些适用的 CSS:

#menu ul
{
margin: 0 auto;
}

ul.tabs
{
display: table;
margin: 0;
padding: 0;
list-style: none;
position: relative;
}

ul.tabs li
{
margin: 0;
padding: 0;
list-style: none;
display: table-cell;
float: left;
position: relative;
}

ul.tabs a
{
position: relative;
display: block;
}

#bird {
background-image:url(images/birdingnav.png);
width:80px;
height: 20px;
text-indent:-9009px;
font-size: 0px;
border: 0;
}

#wild {
background-image:url(images/wildernessnav.png);
width:119px;
height: 20px;
text-indent:-9009px;
font-size:0px;
border: 0;
}

我需要对 CSS 中的这段代码做些什么来消除跨度图像之间出现的空白?

【问题讨论】:

  • 你可以让这些 spans 浮动块元素
  • 我应该如何具体实现浮动/块属性?

标签: css whitespace html


【解决方案1】:

这是一个常见问题。 inline-blockinline 更常见,因为 inline 通常意味着它在文本流中,其中空白是相关的。有了inline-block,人们用它来布局,留白就成了问题。

有一个新的 CSS 属性专门试图处理这个问题 - white-space:collapse;white-space-collapse: discard;,但遗憾的是它还没有得到任何主要浏览器的支持。所以这不是一个选择。

如果没有这个,这个问题的解决方案往往有点老套。

一种常见的解决方案是将容器元素设置为font-size:0;。这有效地使空白变得无关紧要;它仍然存在,但不占用任何空间。这里的缺点是您需要再次为内部元素设置字体大小。如果您使用基于em 的字体大小的动态布局,这可能很难处理。

将布局切换到float:left 布局将消除此问题,但会引入其他问题。就我个人而言,我从不喜欢使用 float,但它可能是某些情况下的答案。

您也可以使用 Javascript 来删除空格,但这确实是一种 hack。

除此之外,重新排列 HTML 代码以删除空格是最可能的最佳解决方案。我知道这不是你想要的。

【解决方案2】:

尝试在图像元素上设置display: inline-block。跨度应该是内联的,所以最好的解决方案是根本不使用跨度,但是既然你说不要更改 html...

看看这个小提琴中的图像之间是如何没有空格的:http://jsfiddle.net/rVTZc/

【讨论】:

  • inline-block 有同样的问题。事实上,inline-block 出现问题比inline 更常见,因为inline 通常是文本的一部分,其中空白是相关的。
  • 我更改了 CSS 中的跨度以在顶部添加显示,但它仍然无法正常工作。是否还有其他可能对代码做出反应的东西?
【解决方案3】:

来自这种风格:

#menu ul li a:hover span {
    background: url("images/topselectionright.png") repeat scroll right top transparent;
}

删除

right top

【讨论】:

  • 我找到了解决方案,我复制粘贴的 CSS 中添加了 padding-left 属性 :)
【解决方案4】:

如果我理解正确,也许ul { font-size:0 } 会有所帮助?

【讨论】: