摆脱跨度之间的空间

Posted

技术标签:

【中文标题】摆脱跨度之间的空间【英文标题】:Get rid of spaces between spans 【发布时间】:2011-01-31 23:20:15 【问题描述】:

我正在尝试用 html 模拟标签栏。

我希望根据文本长度(即没有固定宽度)设置每个选项卡的宽度,并在超出屏幕宽度的情况下自动换行。

我几乎做到了:

<html>
<head>

<style type="text/css">
    #myTabs .tab 
    float: left;
    

    #myTabs .tab_middle 
        margin: 0;
        padding: 0;
        border: none;
    background-image:url('images/tabs/tab_middle.png');
    

    #myTabs .tab_left 
        margin: 0;
        padding: 0;
        border: none;
        background-image:url('images/tabs/tab_left.png');
    

    #myTabs .tab_right 
        margin: 0;
        padding: 0;
        border: none;
    background-image:url('images/tabs/tab_right.png');
    

</style>

</head>

<body>

<div id="myTabs">
  <div class='tab'>
        <span class='tab_left'>&nbsp;</span>
        <span class='tab_middle'>very very looong</span>
        <span class='tab_right'>&nbsp;</span>
    </div>
  <div class='tab'>
        <span class='tab_left'>&nbsp;</span>
        <span class='tab_middle'>another loooong tab</span>
        <span class='tab_right'>&nbsp;</span>
    </div>
    <div style='clear:both'></div>
</div>

</body>
</html>

但是,在打开的标签图片和关闭的标签之间有一个非常烦人的空间。

如您所见,我尝试了填充、间距和边框,但没有成功。

编辑: 我尝试用一​​张小桌子(一行,三个&lt;td&gt;s)替换span,但都是一样的,只是之间的空间更小了。

【问题讨论】:

【参考方案1】:

另一种选择是使用否定的letter-spacing:-10px - 这对格式的影响较小。

<div id="tabs" style="letter-spacing:-10px;">
    <span id="mytab1" style="letter-spacing:1px;">Tab 1</span>
    <span id="mytab2" style="letter-spacing:1px;">Tab 2</span>
    <span id="mytab3" style="letter-spacing:1px;">Tab 3</span>
</div>

感谢this answer获得这个想法

【讨论】:

【参考方案2】:

njbair 的回答是正确的。

另一种选择是使用带有border-collapse: collapse; 属性的表格。

另一个问题:在 Internet Explorer 6.0 中,第一种方法(跨度)无法按预期工作。调整窗口大小时,IE 自动换行,打破标签页,而使用表格方法,IE 甚至会向下发送整个标签页。

【讨论】:

【参考方案3】:

除了 njbair 的另一种方法是将font-size: 0 添加到父元素。 我更喜欢这个,因为它更适合标签设计。

而不是这个:

<div id="tabs">
    <span id="mytab1">Tab 1</span><span id="mytab2">Tab 2</span><span id="mytab3">Tab 3</span>
</div>

...我们可以使用这个:

<div id="tabs" style="font-size: 0;">
    <span id="mytab1">Tab 1</span>
    <span id="mytab2">Tab 2</span>
    <span id="mytab3">Tab 3</span>
</div>

...看起来更好:)

当然,不要忘记为标签定义实际字体大小。

编辑: 还有另一种去除空格的方法:添加 cmets。

例子:

<div id="tabs">
    <span id="mytab1">Tab 1</span><!--
    --><span id="mytab2">Tab 2</span><!--
    --><span id="mytab3">Tab 3</span>
</div>

【讨论】:

这应该是公认的答案,因为它可以满足 OP 的要求。 OP 希望不显示跨度之间的空格,并且接受的答案只是将其从 html 中删除。 @HectorOrdonez 人们一直在询问 meta 是否应该有社区接受的答案,但被拒绝了,主要是因为哪个答案最适合 OP 而不是社区,社区答案是然而,最赞成的一个。所以不要担心哪个应该是公认的答案;) 关于 cmets 的好建议。很难选择两个弊端中较小的一个:需要复制字体大小信息的 CSS hack 或感觉就像更改内容以实现所需样式的 HTML hack。 只是作为接受答案的作者插话。您会注意到 OP 每个选项卡使用 3 个跨度:一个用作左边缘,一个用作中间部分,一个用作右边缘。在这种情况下,他仍然可以将每个选项卡放在一个新行上,而不是在组成同一选项卡的跨度之间。 添加 cmets 会发生什么?【参考方案4】:

摆脱跨度之间的换行符。示例:

<div class='tab'>
  <span class='tab_left'>&nbsp;</span><span class='tab_middle'>very very looong</span><span class='tab_right'>&nbsp;</span>
</div>

换行符在 HTML 中算作空格。

【讨论】:

【参考方案5】:

Tab 中、左、右也需要向左浮动。

【讨论】:

【参考方案6】:

没有图像很难测试,但我在根选项卡中添加了背景颜色和 display:inline。请试试这个:

<html>
<head>

<style type="text/css">
    #myTabs .tab 
        float: left;
        display:inline;
    

    #myTabs .tab_middle 
        margin: 0;
        padding: 0;
        border: none;
    background-image:url('images/tabs/tab_middle.png');
    

    #myTabs .tab_left 
        margin: 0;
        padding: 0;
        border: none;
        background-image:url('images/tabs/tab_left.png');
    

    #myTabs .tab_right 
        margin: 0;
        padding: 0;
        border: none;
    background-image:url('images/tabs/tab_right.png');
    

</style>

</head>

<body>

<div id="myTabs">
  <div class='tab' style="background-color:Red;">
        <span class='tab_left'>&nbsp;</span>
        <span class='tab_middle'>very very looong</span>
        <span class='tab_right'>&nbsp;</span>
    </div>
  <div class='tab' style="background-color:Green;">
        <span class='tab_left'>&nbsp;</span>
        <span class='tab_middle'>another loooong tab</span>
        <span class='tab_right'>&nbsp;</span>
    </div>
    <div style='clear:both'></div>
</div>

</body>
</html>

【讨论】:

不错的尝试,但空间仍然存在,第一个选项卡为红色,第二个选项卡为绿色...

以上是关于摆脱跨度之间的空间的主要内容,如果未能解决你的问题,请参考以下文章

QT如何摆脱小部件与其父母之间的空间

导航栏和内容之间的空间

如何摆脱 UITableViewStyleGrouped 部分上方的额外空间?

如何摆脱UITabBar中第一个和最后一个项目之前和之后的空间?

使用 .grouped tableview 时,摆脱在我的标题中添加的空间

如何摆脱div元素中svg下方的额外空间