CSS停止文本包装在图像下

Nic*_*ick 78 css css3 word-wrap css-float

我有以下标记:

<li id="CN2787">
  <img class="fav_star" src="images/fav.png">
  <span>Text, text and more text</span>
</li>
Run Code Online (Sandbox Code Playgroud)

我想要它,这样如果文本换行,它就不会进入图像的"列".我知道我可以用table(我正在做的)这样做但是由于这个原因这是不可行的.

我试过以下但没有成功:

li span {width: 100px; margin-left: 20px}
.fav_star {width: 20px}
Run Code Online (Sandbox Code Playgroud)

我也试过了float: right.

谢谢.

编辑:我希望它看起来像这样:

IMG   Text starts here and keeps going... and
      wrap starts here.
Run Code Online (Sandbox Code Playgroud)

不是这样的:

IMG   Text starts here and keeps going... and 
wrap starts in the space left for the image.
Run Code Online (Sandbox Code Playgroud)

Joe*_*lin 241

这个问题的答案非常简单,似乎抓住了很多人:

<img src="url-to-image">
<p>Nullam id dolor id nibh ultricies vehicula ut id elit.</p>

    img {
        float: left;
    }
    p {
        overflow: hidden;
    }
Run Code Online (Sandbox Code Playgroud)

参见示例:http://jsfiddle.net/vandigroup/upKGe/132/

  • 这是这个问题的正确答案.此技术不需要为段落设置固定宽度.更简单,更容易的解决方案.即使在IE8中也能完美运行. (10认同)
  • 这不是我期望的行为,但这太棒了. (6认同)
  • 嗯,实际上如果包含文本的元素是`span`(OP的情况),这将不起作用.`span`需要`display:block`.但是,除此之外,我同意这是一个更优雅的解决方案.如果有人想知道`overflow:hidden`背后的魔力是什么,请参阅下面的答案. (4认同)
  • 作为记录,这个答案是在我打勾的 8 个月之后出现的:) (2认同)
  • 哇.工作得很完美.我不敢相信我以前从来不知道这一点. (2认同)
  • @JoeConlin - 抱歉,重新阅读我自己的评论,我可以看出这是多么不清楚;我知道 `overflow` 只适用于块元素。我的意思是,从 CSS 规范中并不清楚溢出会导致它不会环绕浮点数。https://www.w3.org/TR/CSS21/visufx.html#overflow-clipping 和 https://www.w3.org/TR/css-overflow-3 并没有特别提到。这只是似乎很少有人知道的那些有趣的 CSS 行为之一。 (2认同)

Dan*_*Dan 31

由于这个问题获得了很多意见,这是公认的答案,我觉得有必要添加以下免责声明:

这个答案特定于OP的问题(在示例中设置了宽度).虽然它有效,但它要求您在每个元素,图像和段落上都有一个宽度.除非这是您的要求,否则我建议使用Joe Conlin的解决方案,该解决方案将作为此问题的另一个答案发布.

span元素是一个内联元素,你不能在CSS改变它的宽度.

您可以将以下CSS添加到跨度中,以便您可以更改其宽度.

display: block;
Run Code Online (Sandbox Code Playgroud)

另一种通常更有意义的方法是使用<p>元素作为你的父元素<span>.

<li id="CN2787">
  <img class="fav_star" src="images/fav.png">
  <p>
     <span>Text, text and more text</span>
  </p>
</li>
Run Code Online (Sandbox Code Playgroud)

由于<p>是一个block元素,您可以使用CSS设置其宽度,而无需更改任何内容.

但在这两种情况下,由于您现在有一个块元素,因此您需要浮动图像,以使文本不会全部位于图像下方.

li p{width: 100px; margin-left: 20px}
.fav_star {width: 20px;float:left}
Run Code Online (Sandbox Code Playgroud)

PS而不是float:left在图像上,您也可以穿上float:right,li p但在这种情况下,您还需要text-align:left正确地重新对齐文本.

PSS如果您继续使用第一个不添加<p>元素的解决方案,那么您的CSS应如下所示:

li span{width: 100px; margin-left: 20px;display:block}
.fav_star {width: 20px;float:left}
Run Code Online (Sandbox Code Playgroud)

  • 如果你打算使用`display:block`你也可以使用`div`,因为它就是它的用途(或者你也建议使用`p`).没有必要对文本进行双重包装 - 如果你使用的是`p`,你可能会丢失`span`. (2认同)

hqc*_*ova 24

对于那些想要一些背景信息的人,这里有一篇简短的文章解释了为什么overflow: hidden有效.它与所谓的块格式化上下文有关.这是W3C规范的一部分(即不是黑客),基本上是由具有块类型流的元素占用的区域.

每次应用它时,overflow: hidden都会创建一个新的块格式化上下文.但它并不是唯一能够触发这种行为的财产.引自悉尼Web Apps Group的Fiona Chan 的演讲:

  • float:左/右
  • 溢出:隐藏/自动/滚动
  • display:table-cell和任何与表相关的值/ inline-block
  • 位置:绝对/固定