我是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属性来达到相同的效果。
答案 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>