如何在没有 <br>
的情况下实现相同的输出?
你好
你好吗
输出:
hello How are you
您可以使用 white-space: pre;
使元素的行为类似于 <pre>
,保留换行符。例子:
p { 空白:pre; }
你好吗
请注意 IE,这仅适用于 IE8+。
不可能使用相同的 HTML 结构,您必须有一些东西来区分 Hello
和 How are you
。
我建议使用 span
,然后将其显示为块(实际上就像 <div>
)。
p跨度{显示:块; }
你好你好吗
<br />
元素的存在是有充分理由的。如果因为它们是单独的段落而需要换行符,那么只需将它们标记为单独的段落。
<br>
是正确的标记时,一首诗是典型的例子。一首诗的跨度是“错误的”。
元素。 元素不应该被制作成 display:block, 的全部意义在于它是内联的。我会这样做: hello 你好吗
像平常一样使用
,但是当你不想要它时,用 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) */
}
}
这在响应式设计中很有用,在这种设计中,您需要将文本强制分到两行中。
display: none
解决方案是迄今为止最合适和最有用的解决方案。
display: inline-block; width: 1em;
而不是 none
。
<br class='foo'>
应用一个类!
<br/>
擅长它的工作;无需重新发明轮子。谢谢!
有几个选项可用于定义空格和换行符的处理。如果可以将内容放在例如 <p>
标记中,那么很容易获得任何想要的内容。
对于保留换行符但不保留空格,请使用 pre-line
(不是 pre
),例如:
<style>
p {
white-space: pre-line; /* collapse WS, preserve LB */
}
</style>
<p>hello
How are you</p>
如果需要另一种行为,请在以下之一中进行选择(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 */
CSS 中的“\a”命令生成一个回车符。这是 CSS,而不是 HTML,所以它应该更接近你想要的:没有额外的标记。
在 blockquote
中,以下示例同时显示标题和源链接,并用回车符 ("\a"
) 将两者分开:
blockquote[title][cite]:after {
content:attr(title)"\a"attr(cite)
}
display:flex
中可能会中断,因此在这种情况下是一种黑客攻击) .它并不花哨,真的,只是一种现代技术。如果您想要完全相同的标记,但实际上反应不同,那就是要走的路。
"
– 不要使用简单的引号 '
,因为您希望将 \a
解析为特殊字符。
在 CSS 中使用代码
p {
white-space: pre-line;
}
使用此 CSS,P
标记内的每个输入都将成为 HTML 的换行符。
基于之前所说的,这是一个可以工作的纯 CSS 解决方案。
<style>
span {
display: inline;
}
span:before {
content: "\a ";
white-space: pre;
}
</style>
<p>
First line of text. <span>Next line.</span>
</p>
:before
上的多行 input type='text', wrapping the input, and then laying the text over it with a wrapper
div. That also requires
pointer-events:none;` 以便仍然能够点击下面的按钮。
要使元素之后有换行符,请分配它:
display:block;
块级元素之后的非浮动元素将出现在下一行。许多元素,例如
和
但是,虽然这很高兴知道,但这实际上更多地取决于您的内容的上下文。在您的示例中,您不希望使用 CSS 强制换行。
是合适的,因为在语义上 p 标记最适合您显示的文本。更多的标记只是为了挂起 CSS 是不必要的。从技术上讲,它不完全是一个段落,但没有
<pre> <---------------------------------------
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
</pre> <--------------------------------------
或者
<div style="white-space:pre"> <-----------------------------------
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
lorem ipsum
</div> <-----------------------------------
来源:https://stackoverflow.com/a/36191199/2377343
对于一个糟糕的问题,这是一个糟糕的解决方案,但它确实符合简报:
p {
width : 12ex;
}
p:before {
content: ".";
float: right;
padding-left: 6ex;
visibility: hidden;
}
ex
应该是什么? p
和 e
在键盘上不是那么接近,这就是我问的原因
ex
is defined as "Equal to the used x-height of the first available font."
像这样使用 overflow-wrap: break-word;
:
.yourelement{
overflow-wrap: break-word;
}
也许有人会和我有同样的问题:
我在一个带有 display: flex
的元素中,所以我不得不使用 flex-direction: column
。
对于链接列表
根据情况,其他答案提供了一些添加换行符的好方法。但应该注意的是,对于 CSS 控制链接列表(以及类似的东西),:after
选择器是更好的方法之一,原因如下所述。
这是一个示例,假设有一个目录:
<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>
这是 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>
请注意上述解决方案的优点:
无论 HTML 中的空格如何,输出都是相同的(与 pre 相比)
没有向元素添加额外的填充(参见 NickG 的 display:block 注释)
您可以使用一些共享的 CSS 在水平和垂直链接列表之间轻松切换,而无需进入每个 HTML 文件进行样式更改
没有影响周围内容的浮动或清晰样式
样式与内容是分开的(相对于
,或带有硬编码中断的 pre)
这也适用于使用 a.toc:after 和 的松散链接
您可以添加多个中断甚至前缀/后缀文本
将 br
标记设置为 display: none
很有帮助,但您最终可以使用 WordsRunTogether。我发现用空格字符替换它更有帮助,如下所示:
HTML:
<h1>
Breaking<br />News:<br />BR<br />Considered<br />Harmful!
</h1>
CSS:
@media (min-device-width: 1281px){
h1 br {content: ' ';}
h1 br:after {content: ' ';}
}
br
设置为 display: inline-block; width: 1em;
,这样可以防止单词在水平移动时一起运行。
<pre>
标签怎么样?
来源:http://www.w3schools.com/tags/tag_pre.asp
<pre>
中使用空格,这样它就换行了。如果你想有常规的空格怎么办?
您需要在 <span class="class_name"></span>
中声明内容。之后,这条线将被打破。
\A
表示换行符。
.class_name::after {
content: "\A";
white-space: pre;
}
我喜欢非常简单的解决方案,这里还有一个:
<p>hello <span>How are you</span></p>
和 CSS:
p {
display: flex;
flex-direction: column;
}
代码可以是:
<div class="text-class"><span>hello</span><span>How are you</span></div>
CSS将是:
.text-class {
display: flex;
justify-content: flex-start;
flex-direction: column;
align-items: center;
}
例如,您可以添加大量填充并强制将文本拆分为新行
p {
padding-right: 50%;
}
在响应式设计的情况下对我来说效果很好,只有在一定的宽度范围内才需要拆分文本。
文森特罗伯特和乔伊亚当斯的答案都是有效的。但是,如果您不想更改标记,您可以使用 javascript 插入 <br />
。
在不更改标记的情况下,无法在 CSS 中做到这一点。
:after
或 :before
来做到这一点。
在我的例子中,我需要一个输入按钮在它之前有一个换行符。我将以下样式应用于按钮并且它有效:
clear:both;
万一这对某人有帮助...
你可以这样做:
<p>This is an <a class="on-new-line">inline link</a>?</p>
有了这个CSS:
a.on-new-line:before {
content: ' ';
font-size:0;
display:block;
line-height:0;
}
.on-new-line:before {content: ""; display: block;}
使用
而不是空格将防止中断。
<span>I DONT WANT TO BREAK THIS LINE UP, but this text can be on any line.</span>
我猜你不想使用断点,因为它总是会断线。那是对的吗?如果是这样,如何在您的文本中添加断点 <br />
,然后给它一个类似 <br class="hidebreak"/>
的类,然后使用媒体查询在您希望它中断的大小上方隐藏 <br />
,使其以特定宽度中断但保持在该宽度之上。
HTML:
<p>
The below line breaks at 766px.
</p>
<p>
This is the line of text<br class="hidebreak"> I want to break.
</p>
CSS:
@media (min-width: 767px) {
br.hidebreak {display:none;}
}
https://jsfiddle.net/517Design/o71yw5vd/
"Tip: The <br> tag is useful for writing addresses or poems."
这适用于 Chrome:
p::after {
content: "-";
color: transparent;
display: block;
}
使用 white-space
将不起作用 对于没有空格的长句,如 HiHowAreYouHopeYouAreDoingGood...etc
来解决此问题,请考虑改用 word-wrap: break-word;
它是为了让长词能够中断并换行到下一行。它被 Facebook、Instagram 和我使用😆
例子
#container { 宽度:40%;背景颜色:灰色;溢出:隐藏;边距:10px; } #container p{ white-space: pre-line;背景颜色:绿色; } .flex{ 显示:弹性; } #wrap { 宽度:30%;背景颜色:灰色;溢出:隐藏;边距:10px; } #wrap p{ word-wrap: break-word;背景颜色:绿色; }
示例文本1 示例文本1示例文本 1 示例文本 1 示例文本 1 示例文本 1 示例文本 1
HiHowAreYouHopeYouAreDoingGoodHiHowAreYouHopeYouAreDoingGoodHiHowAreYouHopeYouAreDoingGood
p>示例文本 1 示例文本 1 示例文本 1 示例文本 1 示例文本 1 示例文本 1 示例文本 1
HiHowAreYouHopeYouAreDoingGoodHiHowAreYouHopeYouAreDoingGoodHiHowAreYouHopeYouAreDoingGoodHiHowAreYouHopeYouAreDoingGood
在 CSS-tricks,Chris Coyier
测试了很多选项,最后一个非常简洁的选项是使用 display:table
,每个选项都有自己的问题,当您在 span 上使用 background-color
时您会发现!
身体{填充:20px; font-family: 'Open Sans', sans-serif; } h1 { 字体粗细:300;字体大小:24px;行高:1.6;背景:#eee;填充:20px;边距:5px 0 25px 0;文本对齐:居中; } h1 跨度 { 颜色:白色;字体粗细:900; } h1 span { 背景:黑色;填充:1px 8px;显示:表格;边距:自动; }
您可以在此处查看 codepen
上的所有其他选项:
pre
更好的是pre-line
,它允许包装。white-space
CSS 规则。