如何从css换行,不使用<br />?

Jit*_*yas 373 html css css3

输出:

你好
,你好吗?

码:

<p>hello <br> How are you </p>
Run Code Online (Sandbox Code Playgroud)

如何实现相同的输出<br>

Vin*_*ert 355

不可能使用相同的HTML结构,你必须要区分HelloHow are you.

我建议使用spans然后你将显示为块(就像<div>实际上一样).

HTML:

<p><span>hello</span><span>How are you</span></p>
Run Code Online (Sandbox Code Playgroud)

CSS:

p span 
{
    display: block;
}
Run Code Online (Sandbox Code Playgroud)

  • 还要注意还有多少额外标记 - "<br />"元素存在是有充分理由的.如果你想要换行,因为它们是单独的段落,那么只需将它们标记为单独的段落. (33认同)
  • 绝对使用<p>元素.不应将<span>元素设置为display:block,<span>的整个点是它的内联.我会这样做:<div> <p>你好</ p> <p>你好吗</ p> </ div>.没有想要的CSS需要. (16认同)
  • 这个答案是错误的,请看css-only [以下答案](http://stackoverflow.com/a/2703609/681538). (10认同)
  • 您可能需要结构化线条而不实际使用段落.例如,标记一首诗,一首歌或一个地址 (8认同)
  • 请注意,将display:block赋值给元素会强制前后换行,因此与一个换行符完全相同. (7认同)
  • @VincentRobert对,但是一首诗是```是正确标记的典型例子.诗歌的跨度将是"错误的". (2认同)

Joe*_*ams 320

您可以使用white-space: pre;以使元素行为<pre>,保留换行符.例:

<style>
 p {
  white-space: pre;
 }
</style>
<p>hello
How are you</p>
Run Code Online (Sandbox Code Playgroud)

请注意,这在IE6或IE7中不起作用.我不知道IE8.

  • 通常比'pre`更好的是'pre-line`,它允许包装. (124认同)
  • 有关pre-line和pre-wrap之间差异的更多信息,请访问https://developer.mozilla.org/en-US/docs/Web/CSS/white-space (12认同)
  • 在我的例子中我更喜欢 pre,因为我还可以使用文本溢出 (2认同)
  • 请注意,这不适用于 React,因为文本最终会被捆绑并放置在同一行,这不会触发 `white-space` CSS 规则。 (2认同)

Sim*_*ver 113

<br/>正常使用,但display: none在不需要时隐藏它.

我希望大多数人发现这个问题想要使用CSS /响应式设计来决定是否在特定的地方出现换行符.(并且没有任何个人反对<br/>)

虽然不是很明显,你可以实际应用display:none<br/>标签隐藏它,这使得串联使用媒体查询的语义BR标签.

 <div>
   The quick brown fox<br />
   jumps over the lazy dog
 </div>

 @media screen and (min-width: 20em) 
 {
    br 
    { 
       display: none;   // hide the BR tag for wider screens (i.e. disable the line break)
    }
 }
Run Code Online (Sandbox Code Playgroud)

这在响应式设计中非常有用,您需要在完全中断时将文本强制为两行.

http://jsfiddle.net/nNbD3/1/

  • 请注意,对于会导致单词一起运行的情况,您可以使用类似`display:inline-block; width:1em;`而不是`none`. (8认同)
  • 西蒙,你的位置 - 你所说的例子就是我研究这个问题的确切原因,`display:none`解决方案是迄今为止最合适和最有用的. (5认同)
  • 另一个“我为什么没有想到这一点?!” 回答。`&lt;br/&gt;` 非常擅长它的功能;无需重新发明轮子。谢谢! (3认同)
  • 如果你需要更多控制但是不要太疯狂,你甚至可以将一个类应用于`<br class='foo'>` (2认同)
  • @amh15 他没有说为什么他想这样做。或者说 BR 出了什么问题。它是来自天气预报网络服务的预格式化文本,还是响应式设计问题。在回答时,所有预/自动换行答案已经存在。你是对的,细节很重要,但我的回答帮助了很多根据关键词找到这个问题的人,所以我不明白你为什么必须如此挑剔。我很想知道他真正想做什么。但我也不在乎。 (2认同)

pet*_*ner 94

有几个选项可用于定义空格和换行符的处理.如果可以将内容放在例如<p>标签中,那么很容易得到任何想要的东西.

为了保留换行符而不是空格,请使用pre-line(不pre)像:

<style>
 p {
     white-space: pre-line; /* collapse WS, preserve LB */
   }
</style>

<p>hello
How are you</p>
Run Code Online (Sandbox Code Playgroud)

如果需要另一个行为,请选择其中一个(WS = WhiteSpace,LB = LineBreak):

     white-space: normal;   /* collapse WS, wrap as necessary, collapse LB */
     white-space: nowrap;   /* collapse WS, no wrapping,       collapse LB */
     white-space: pre;      /* preserve WS, no wrapping,       preserve LB */
     white-space: pre-wrap; /* preserve WS, wrap as necessary, preserve LB */
     white-space: inherit;  /* all as parent element */
Run Code Online (Sandbox Code Playgroud)

消息来源:W3学校

  • 完善.应该是选定的答案. (4认同)

小智 64

CSS中的"\ a"命令生成回车符.这是CSS,而不是HTML,所以它应该更接近你想要的:没有额外的标记.

在blockquote中,下面的示例显示标题和源链接,并使用回车符("\a")分隔两个:

blockquote[title][cite]:after {
    content:attr(title)"\a"attr(cite)
}
Run Code Online (Sandbox Code Playgroud)

  • +1,因为它只有CSS,并且不建议使用pre,br标签,也不建议将显示模式更改为阻塞(这会增加不同的行为,如果父项在`display:flex`中可能会中断,因此这是一个hack上下文).它不是幻想,真的,只是一种现代技术.如果你想要完全相同的标记,但实际上有不同的反应,那就是要走的路. (15认同)
  • 如果有一些HTML并且可能是一个小提琴来帮助想象你正在做什么,我会投票. (3认同)
  • 卓见。请注意“”——不要使用简单的引号“'”,因为您希望允许“\a”被解析为特殊字符。 (2认同)
  • 我想给 +1,但它在 chrome 55 上对我不起作用 (2认同)

bur*_*noh 29

在CSS使用代码

p {
    white-space: pre-line;
}
Run Code Online (Sandbox Code Playgroud)

使用此代码css,每个在P标签内输入都将是html的断行.

  • 这正是我一直在寻找的!非常适合从 JS 生成的元素内容(例如,AJAX 查询、角度模式表单等的 JSON 结果),通过转义/清理传递(例如,不使用 ngBindHtml 时的正常 AngularJS 转义行为) (2认同)

小智 28

基于之前的说法,这是一个有效的纯CSS解决方案.

<style>
  span {
    display: inline;
  }
  span:before {
    content: "\a ";
    white-space: pre;
  }
</style>
<p>
  First line of text. <span>Next line.</span>
</p>
Run Code Online (Sandbox Code Playgroud)


Syn*_*ror 9

要使元素之后有换行符,请指定它:

display:block;

块级元素之后的非浮动元素将出现在下一行.许多元素,例如<p>和<div>已经是块级元素,因此您可以使用它们.

但是,虽然这很有用,但这实际上更多地取决于您的内容的上下文.在您的示例中,您不希望使用CSS强制换行.<br />是合适的,因为在语义上,p标签最适合您正在显示的文本.只需要将CSS挂起来就可以使用更多标记.从技术上讲它不正是一个段落,但没有<问候>标签,所以用你所拥有的.用HTMl很好地描述你的内容更为重要 - 在你拥有它之后再弄清楚如何让它看起来漂亮.

  • 但这使它成为容器的整个宽度,这可能是不需要的副作用(尤其是当项目是锚点/链接时)。 (2认同)

T.T*_*dua 9

<pre> <---------------------------------------
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
</pre> <--------------------------------------
Run Code Online (Sandbox Code Playgroud)

要么

<div style="white-space:pre">  <-----------------------------------
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
</div>                         <-----------------------------------
Run Code Online (Sandbox Code Playgroud)

来源:https://stackoverflow.com/a/36191199/2377343


Alo*_*hci 7

对于一个糟糕的问题,这是一个糟糕的解决方案,但是从字面上看这个简短的问题:

p {
    width : 12ex;
}

p:before {
    content: ".";
    float: right;
    padding-left: 6ex;
    visibility: hidden;
}
Run Code Online (Sandbox Code Playgroud)

  • @marczking - [相对单位`ex`定义为"等于第一个可用字体的使用x高度."](http://www.w3.org/TR/css3-values/#ex-unit ) (6认同)
  • 拼写错误或者“ex”应该是什么?`p` 和 `e` 在键盘上并不那么接近,这就是我问的原因 (2认同)

Den*_*Pat 7

使用overflow-wrap: break-word; 如下:

.yourelement{
  overflow-wrap: break-word;
}
Run Code Online (Sandbox Code Playgroud)


Dor*_*ian 5

也许有人会和我有同样的问题:

我在一个元素中,display: flex所以我不得不使用flex-direction: column.


Bee*_*jor 5

对于链接列表

其他答案提供了一些添加换行符的好方法,具体取决于具体情况.但应该注意的:after是,由于下面提到的原因,选择器是对链接列表(和类似的东西)进行CSS控制的更好方法之一.

这是一个例子,假设一个目录:

<style type="text/css">
    .toc a:after{ content: "\a"; white-space: pre; }
</style>

<span class="toc">
    <a href="#a1">Item A1</a> <a href="#a2">Item A2</a>
    <a href="#b1">Item B1</a> <a href="#b2">Item B2</a>
</span>
Run Code Online (Sandbox Code Playgroud)

这是Simon_Weaver的技术,它更简单,更兼容.它不会将样式和内容分开,需要更多代码,并且可能存在您希望在事后添加中断的情况.仍然是一个很好的解决方案,特别是对于旧IE.

<style type="text/css">
    .toc br{ display: none; } /* comment out for horizontal links */
</style>

<span class="toc">
    <a href="#a1">Item A1</a><br/> <a href="#a2">Item A2</a><br/>
    <a href="#b1">Item B1</a><br/> <a href="#b2">Item B2</a><br/>
</span>
Run Code Online (Sandbox Code Playgroud)

注意上述解决方案的优点:

  • 无论HTML中的空白,输出都是相同的(vs. pre)
  • 没有额外的填充添加到元素中(参见NickG的display:block评论)
  • 您可以使用某些共享CSS在水平和垂直链接列表之间轻松切换,而无需进入每个HTML文件以进行样式更改
  • floatclear影响周围内容的样式
  • 风格与内容分开(与硬编码中断<br/>pre与硬编码中断)
  • 这也适用于使用a.toc:after和的松散链接<a class="toc">
  • 您可以添加多个中断甚至前缀/后缀文本


小智 5

我喜欢非常简单的解决方案,这里还有一个:

<p>hello <span>How are you</span></p>
Run Code Online (Sandbox Code Playgroud)

和CSS:

p {
  display: flex;
  flex-direction: column;
}
Run Code Online (Sandbox Code Playgroud)