用inline-block换行吗?


75

我想删除<br />并通过CSS进行换行。如果我将跨度更改为display:block宽度,则宽度将为100%,并且我需要宽度像现在一样准确地是文本的长度。有什么建议?

<div class="fullscreen">
    <p class="text">
        <span class="medium">We</span> <br />
        <span class="large">build</span> <br />
        <span class="medium">the</span> <br />
        <span class="large">Internet</span>
    </p>
</div>

.text span {
   background:rgba(165, 220, 79, 0.8);
   display:inline-block;
   padding:7px 10px;
   color:white;
}
.fullscreen .large {  font-size:80px }

混蛋



1
=ARRAYFORMULA(UNIQUE(TEXT(INDIRECT("A1:A"&COUNTA(A1:A)), "mmm-yyyy")))- i.stack.imgur.com/lvbzL.png
player0

@ player0感谢花花公子
同上

Answers:


119

删除所有br标签并使用display: table

.text span {
   background: rgba(165, 220, 79, 0.8);
   display: table;
   padding: 7px 10px;
   color: white;
}
.fullscreen .large { font-size: 80px }

说明:该表默认情况下包装其内容的宽度,而不设置宽度,但是仍然是块级元素。您可以通过将宽度设置为其他块级元素来获得相同的行为:

<span style="display:block;border:1px solid red;width:100px;">Like a default table.</span>
<code>null</code>

请注意,该<code>元素不会<span>像通常那样内联地流动。使用开发工具中的计算样式进行检查。您会在的右侧看到伪边距<span>。无论如何,这与表相同,但是表具有始终按其内容的宽度形成表格的额外好处。


8
我认为这个答案比公认的答案更相关。display:table的作用与行内元素相同,它的宽度与表中内容的宽度相同,但也可以通过在AND元素之前添加换行符来作为block元素。浮动元素不会在元素后添加换行符。
Pascalculator 2014年

添加border-collapse也是有用的:有填充工作
arekk 2015年

5
display: table;行为超出换行符,可能会破坏某些CSS。我知道height而且width不会工作
robisrob

4
这个答案将受益于更多的解释。
保罗·鲁尼

1
@PaulRooney刚刚在他的问题中添加了解释。
点点的

37

使用float: left;clear: left;

http://jsfiddle.net/rtM6J/

.text span {
   background: rgba(165, 220, 79, 0.8);
   float: left;
   clear: left;
   padding: 7px 10px;
   color: #fff;
}

1
因为inline-block不会让OP实现他想要的功能,所以float:left仍会执行他使用inline-block的功能(使元素包装文本而不是全角)。我本来可以离开显示:inline-block但float:离开也看不见地将显示设置为block,干净的代码比混乱的代码更好。我想您不知道这一点,是您决定拒绝投票的原因。毕竟,我的答案是一个可能的正确答案(我敢肯定还有其他方法可以实现这一目标),并且无法满足Google索引的需求……
Luca 2014年

1
要显示的任何浮动集:块。这就是为什么我认为在询问内联块时在此处使用float会产生误导。在搜索的过程中,下降投票获得了很高的排名,但是并没有帮助。我以为我以前的评论确实解释了这一点。对不起,如果不清楚。
hakre 2014年

1
@hakre-不太正确。由于它们不再与父对象处于同一流程中,因此块宽度会像显示时一样折叠:inline-block,这实际上是OP想要的。这对我来说很好,可以解决相同的问题。
Don McCurdy 2015年

1
@Luca Might还应该指出,您可能需要跨度的父级上的clearfix,例如.text { clear: left; overflow: auto; }
Don McCurdy

13

将项目放入display: inline并使用:after

.text span { display: inline }
.break-after:after { content: '\A'; white-space:pre; }

并将类添加到您的html spans中:

<span class="medium break-after">We</span>

1
需要调整行高以克服某些填充重叠…但是做得很好
dj.cowan

好答案。这是在我的特定情况下对我有用的唯一答案。
wp-overwatch.com

这是最好的答案,因为它不会破坏行内跨距的任何样式(例如边框底部)
lueenavarro

8

这是另一个解决方案(仅列出了相关的声明):

.text span {
   display:inline-block;
   margin-right:100%;
}

当用百分比表示边距时,该百分比取自父节点的宽度,因此100%表示与父节点一样宽,这将导致下一个元素“推送”到新行。


这不是答案的一部分,但我认为应该做一些解释。我想设置<pre>块的样式,使其具有边界,仅与内容一样宽,但不比父节点宽,并且每个出现在新行上。由于种种原因(如果有人感兴趣,我可以详细说一下),对于我而言,上述解决方案都不令人满意,因此我提出了自己的解决方案。当父节点的宽度和overflow: visible;有限时,它看起来不错。否则可能会导致不必要的水平滚动条或空白。
极快的人

8

我认为,截至2018年,做到这一点的最佳方法是使用flexbox。

.text {
  display: flex;
  flex-direction: column;
  align-items: flex-start;
}
/* same as original below */
.text span {
   background:rgba(165, 220, 79, 0.8);
   display:inline-block;
   padding:7px 10px;
   color:white;
}
.fullscreen .large {  font-size:80px }
<div class="fullscreen">
    <p class="text">
        <span class="medium">We</span> 
        <span class="large">build</span> 
        <span class="medium">the</span> 
        <span class="large">Internet</span>
    </p>
</div>


最适合我。我需要将项目左对齐,居中对齐或右对齐。所以,我可以使用align-items: flex-startalign-items: centeralign-items: flex-end
Rehmat

3

我认为浮点数在这里可能对您最有效,如果您不希望该元素占据整条线,则将其左移的浮点数应该会起作用。

.text span {
       background:rgba(165, 220, 79, 0.8);
       float: left;
       clear: left;
       padding:7px 10px;
       color:white;
    }

注意:<br/>在使用此偏离路线之前,请先删除。


2

如果您可以不使用<p>s(仅<div>s和<span>s)可以,则该解决方案甚至可以让您将inline-blocks的中心或右边对齐(如果您愿意)(或者只是按照最初的要求保留它们的左边)。尽管该解决方案可能仍可与一起使用<p>,但我认为生成的HTML代码并不十分正确,但还是由您自己决定。

诀窍是<span>用对应的包裹每个<div>。我们利用所造成的断行的这样<div>display: block(默认值),同时仍保持视觉绿色框紧到文本的限制(使用您的display: inline-block声明)。

.text span {
   background:rgba(165, 220, 79, 0.8);
   display:inline-block;
   padding:7px 10px;
   color:white;
}
.large {  font-size:80px }
<div class="text">
  <div><span class="medium">We</span></div>
  <div><span class="large">build</span></div>
  <div><span class="medium">the</span></div>
  <div><span class="large">Internet</span></div>
</div>


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.