CSS - 使用display:inline属性删除列表菜单中的水平空间

时间:2011-01-17 17:49:27

标签: css inline

我是CSS的新手,并且有一套学习目标。在本月底之前在CSS中发布我的网站。

我的问题:

我正在尝试使用悬停下拉列表构建一个CSS水平菜单,但是,当我将display: inline属性与li(列表)项一起使用时,我会在{{1}之间获得水平空格(列表)栏中的项目。如何删除此空间?

这是HTML:

li

这是CSS:

<div id="tabas_menu">
    <ul>
        <li id="tabBut0" class="tabBut">Overview</li>
        <li id="tabBut1" class="tabBut">Collar</li>
        <li id="tabBut2" class="tabBut">Sleeves</li>
        <li id="tabBut3" class="tabBut">Body</li>
    </ul>
</div>

我可以使用#tabas_menu { position: absolute; background: rgb(123,345,567); top: 110px; left: 200px; } ul#tabas_menu { padding: 0; margin: 0; } .tabBut { display: inline; white-space: list-style: none; background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(255,142,190,1)),to(rgba(188,22,93,1))); background: -moz-linear-gradient(top, rgba(255,142,190,1), rgba(188,22,93,1)); font-family: helvetica, calibri, sans-serif; font-size: 16px; font-weight: bold; line-height: 20px; text-shadow: 1px 1px 1px rgba(99,99,99,0.5); -moz-border-radius: 0.3em; -moz-box-shadow: 0px 0px 2px rgba(0,0,0,0.5); -webkit-border-radius: 0.3em; -webkit-box-shadow: 0px 0px 2px rgba(0,0,0,0.5); padding: 6px 18px; border: 1px solid rgba(0,0,0,0.4); margin: 0; } 属性删除空间,但是为什么我不能通过使用display属性来达到相同的效果。

4 个答案:

答案 0 :(得分:22)

几周前我有一个remarkably similar question

水平空间非常合理。在内联元素之间,空白很重要。当您在通用样式下考虑以下标记时,这非常有意义:

<b>Label:</b> <span>content</span>

如果此内容呈现如下,您是否会感到沮丧?

标签:含量

HTML中块元素的盛行使我们忘记了空格的作用。但是我们必须记住,每当使用内联元素(包括内联块元素)时,标记中的空白实际上都很重要,因为HTML基本上是标记而不是编码语言。

你的问题有一些解决方案(假设你想出于审美原因而想要抓住HTML中的空白 - 如果这不重要,只需删除空间并完成它),最简单的方法是申请font-size: 0px到父容器,然后将字体大小恢复为font-size: 16px或每个内联元素中的任何内容。这使得它们之间的文本节点的字体大小为零。

答案 1 :(得分:4)

问题是某些浏览器会在列表项之间呈现空白区域。例如:

<li>item 1</li>
<li>item 2</li>

第一行</li>之后和下一行<li>之前有换行符(可能还有一些标签符号)。某些Web浏览器会将其渲染为空格。有两种解决方法。

一个是删除所有这些空格,如下所示:

<ul>
    <li id="tabBut0" class="tabBut">Overview</li><li id="tabBut1" class="tabBut">Collar</li><li id="tabBut2" class="tabBut">Sleeves</li><li id="tabBut3" class="tabBut">Body</li>
</ul>

这是一种丑陋的解决方案,但它确实有效。

另一种可能性就是你自己提到的 - 使用float: left。就个人而言,我总是采用浮动解决方案。

答案 2 :(得分:2)

使用float:left会使浏览器的布局计算变得复杂。如果您关心渲染速度和效率,请删除<li>项之间的所有空格。

答案 3 :(得分:0)

<html>
<head>
<style>
ul li, ul li:before,ul li:after{display:inline;  content:' '; }
</style>
</head>
<body>
<ul><li>one</li><li>two</li><li>three</li></ul>
<ul>
    <li>one</li>
    <li>tw`enter code here`o</li>
    <li>three</li>
</ul>
</body>
</html>