CSS - 获取跨度

问题描述:

,没有固定的宽度之间

我试图仿效与HTMLCSS - 获取跨度

标签栏,我想每个标签的宽度根据文本长度(也就是被设定摆脱空间),并在情况下自动换行超过屏幕宽度

我已经几乎实现了它

<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> 

但是,有易拉环的图像和关闭一个之间一个非常恼人的空间...

正如你可以看到我已经尝试填充,间距和边界,没有运气...

- 编辑 我试图用一个小表(一行,三个TD)替换跨度,但它是同样,只有两者之间的空间较小...

+0

尝试添加空格:NOWRAP; – ant 2010-03-25 22:36:56

+0

试了一下,它是一样的... – opensas 2010-03-25 23:18:51

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

<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中计为空格。

难以测试没有图像,但我添加了背景颜色和显示:内联到根标签。请试试这个:

<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> 
+0

不错的尝试,但空间仍然存在,在第一个选项卡上的红色和第二个绿色... – opensas 2010-03-25 23:16:57

标签中间,左边和右边也需要向左浮动。

njbair的回答是正确的。

另一种选择是使用一个表,border-collapse: collapse;属性。

另一个问题:在Internet Explorer 6.0中,第一种方法(跨度)无法按预期工作。当调整窗口大小时,IE会缠住跨度,打破选项卡,同时使用表格方法甚至IE向下发送整个选项卡。

的另一种方式,除了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> 

...这看起来更好:)

当然,不要忘了定义制表符的真实字体大小。

编辑
有摆脱空间的另一种方式:通过添加注释。

实施例:

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

这应该是公认的答案,因为它是做什么的OP是请求。 OP想要跨度之间的空间不被看到,并且接受的答案是从html中删除它。 – 2014-03-06 11:24:06

+3

@HectorOrdonez人们一直在问meta是否应该有一个社区接受的答案,但它被拒绝了,主要是因为它是哪个答案适合OP最多而不是社区,但是社区答案是最有利的一个。所以不要打扰哪一个应该是被接受的答案;) – 2014-04-23 07:03:11

+0

好评如潮。很难挑选哪个是两个弊端中较小的一个:CSS hack需要重复字体大小信息或HTML hack,这就像改变内容以实现所需的样式。 – 2014-07-17 23:02:44

另一种选择是使用性否定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