为什么此列表中的文本不正确地浮动?

问题描述:

我有一个列表。列表中的每个项目包含一个图标跨度和文本范围,像这样:为什么此列表中的文本不正确地浮动?

<ul id="features"> 
    <li> 
     <span class="icon"></span> 
     <span class="text">blah blah blahlrceoahuoa steohuasnoet huntaoheu saoetnhu saoetuhsaoe tuhsaoetnhu saoehtuasoetnhu saou</span> 
    </li>    
</ul> 

使用下面的CSS

#features { list-style-type: none; } 
#features li { overflow: auto;} 
#features li span { float: left; } 
#features .icon { background: #000; height: 55px; width: 55px; display: inline-block;} 
#features .text { margin-left: 24px; display: inline-block; } 

我认为此代码应生产出下一个浮动的图标文本,并自动调整其宽度相应。但情况并非如此see jsfiddle.

为什么文本不会浮在图标旁边?

+0

这是你想要的吗? http://jsfiddle.net/dwZaN/6/ – 2013-03-11 16:02:10

嗯,努力使固定和流体宽度和谐共处......一个老问题。

这里有一个更新的拨弄解决方案:http://jsfiddle.net/dwZaN/11/

#features { list-style-type: none; margin-top: 24px; margin-right: 24px; } 
#features li { margin-bottom: 24px; overflow: auto; width: 100%; } 

#features li span { } 
#features .icon { background: #000; height: 55px; width: 55px; float: left; } 
#features .text { padding-left: 75px; display: block; } 

基本上...

  • 浮法您的固定宽度的图标
  • 不浮动的可变宽度的元素,但给它填充剩下足够的空间来解释你的图标和一些缓冲空间(这会自动给它100%并减去你指定的任何填充)
  • 这两个元素都应该是块级别的。你实际上并不需要指定图标什么,但你的文本范围必须display: block(或者你可以切换到DIV的它们已经块级)

此外,因为您指定的右边距在您的父母UL中,添加width: 100%会使其扩展到浏览器窗口之外并创建一个水平滚动条。只需删除它。

+0

实际上,你在jsfiddle上的解决方案对我来说并不奏效,但你的建议确实如此。你确定小提琴的作品吗? – willdanceforfun 2013-03-11 17:48:34

+1

确实,我不小心使用了jsfiddle的一个旧版本作为调整。更新了链接和代码示例。很高兴它的工作! – Justin 2013-03-11 19:59:11

width: auto将根据其内容指示文本跨度根据需要承担尽可能多的宽度。这是当该空间不可用时导致整个跨度缠绕的原因。

+0

啊......但我没有宽度更新的jsfiddle(和问题):汽车,我仍然看到图标 – willdanceforfun 2013-03-11 15:44:56

+0

@cosmicbdog下面的div.text: 'width:auto'是默认行为,所以简单地移除'width'将会产生相同的效果。您需要手动指定宽度。 – 2013-03-11 15:46:22

+0

感谢您的解释。也许我是在做梦,但我记得有一个显示器2×跨度:inline-block的应自动调整以适应对方 - 我在这里努力了可扩展的解决方案,而固定宽度。有关于此的任何想法? – willdanceforfun 2013-03-11 15:51:59

您应该在内部元素中使用CSS背景并将LI浮动。您不需要图标的单独元素。

#features li { float left } 

#features li span { 
     display:block; 
     background-image: url(...); 
     background-repeat:no-repeat; 
     height:25px; 
     padding-left:30px; 
} 

请参阅我的教程:I love lists

如果你想使用的字体,而不是图像,你可以使用position:relative,您LI并添加:

li:before { 
    content: "\25A0"; <--- this is a UTF-8 square 
    left: -1em; 
    position: absolute; 
    top: 0.1em; 
} 

(相应地调整你的间距值)

+0

我通常会这样做,但是我在当前场景中使用字体图标,而不是图像:(除非您知道用字体制作背景的方法吗? – willdanceforfun 2013-03-11 15:47:44

+0

是的,您当然可以这样做。我的答案包括这个 – 2013-03-11 15:52:12

+0

这是有创意的,我从来没有想过要做到这一点,这是一个很好的选择,谢谢 – willdanceforfun 2013-03-11 18:02:02