CSS可以在元素中的每个单词后强制换行吗?

Ben*_*Ben 144 css line-breaks

我正在建立一个多语言网站,主人帮我翻译一些.一些显示的短语需要换行符以维护网站的样式.

不幸的是,所有者不是计算机人员,所以如果他看到他foo<br />bar有机会在他翻译时以某种方式修改数据.

是否有一个CSS解决方案(除了更改宽度)以应用于每个单词后会破坏的元素?

(我知道我可以用PHP做到这一点,但我想知道在CSS中是否有一个非常好的技巧来完成同样的事情,也许是在CJK功能中.)

编辑

我将尝试绘制正在发生的事情:

----------------          ----------------
| Short Word   |          | Gargantuan   |
|              |          | Word         |
----------------          ----------------
Run Code Online (Sandbox Code Playgroud)

长字会自动断开,短字则不会.我希望它看起来像这样:

----------------          ----------------
| Short        |          | Gargantuan   |
| Word         |          | Word         |
----------------          ----------------
Run Code Online (Sandbox Code Playgroud)

小智 244

使用

.one-word-per-line {
    word-spacing: <parent-width>; 
} 
.your-classname{
   width: min-intrinsic;
   width: -webkit-min-content;
   width: -moz-min-content;
   width: min-content;
   display: table-caption;
   display: -ms-grid;
   -ms-grid-columns: min-content;
 }
Run Code Online (Sandbox Code Playgroud)

其中<parent-width>是父元素的宽度(或不适合一行的任意高值).这样你可以确定在一个字母之后甚至还有一个换行符.适用于Chrome/FF/Opera/IE7 +(甚至可能是IE6,因为它也支持字间距).

  • @ToniMichelCaubet答案很难解释,但他的意思是:`.parent {word-spacing:100px; ``where`100px`是父元素的宽度.问题是如果你有一个流动的父母,这个解决方案不起作用. (28认同)
  • 只需为字间距设置一个非常高的值,例如`word-spacing:100000px`,你就不必担心父级在宽度方面是流动的.设置100%的单词间距是有意义的(它应该是父宽度的100%),但是该css属性不支持以百分比表示的值. (4认同)

Dee*_*dav 102

@HursVanBloob给出的答案仅适用于固定宽度的父容器,但在流体宽度容器的情况下失败.

我尝试了很多属性,但没有按预期工作.最后我得出结论,给出word-spacing一个非常巨大的价值非常好.

p { word-spacing: 9999999px; }
Run Code Online (Sandbox Code Playgroud)

或者,对于现代浏览器,您可以使用CSS vw单位(视觉宽度,以屏幕大小的百分比表示).

p { word-spacing: 100vw; }
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很好的解决方案! (2认同)
  • 快速,肮脏,容易;这样就完成了工作。 (2认同)
  • 好吧,它对我来说不起作用,使容器的流体宽度变得非常高. (2认同)

小智 35

通过应用于元素,在每个行的单独句子上描述了另一种解决方案display:table-caption;


Nas*_*ass 32

尝试使用white-space: pre-line;.它会在代码中出现换行符时创建换行符,但忽略额外的空格(制表符和空格等).

首先,在代码中的单独行中写下您的单词:

<div>Short
Word</div>
Run Code Online (Sandbox Code Playgroud)

然后将样式应用于包含单词的元素.

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

但要小心,元素内部代码中的每个换行符都会产生换行符.因此,编写以下内容将导致在第一个单词之前和最后一个单词之后额外换行:

<div>
    Short
    Word
</div>
Run Code Online (Sandbox Code Playgroud)

有一篇关于CSS技巧的文章解释了其他的空白属性.

  • 那篇关于[CSS Tricks]的文章(http://css-tricks.com/almanac/properties/w/whitespace/)完全解释了这一点,所以我认为链接就足够了,而不是试图在这里反复回答. (2认同)

小智 19

<span>是一个内联元素,我添加一个display: inline-block来给元素提供宽度max-width: min-content;,min-content是文本/句子中最小单词的值/宽度。

如果您使用min-content,“宽度”将是您最长的单词。在这种情况下Example,你的词更长。但是,如果您有不同的单词,例如and if或几个 2/3 字符的单词,那么这些单词将适合在同一行。

如果您想保持文字行为,您可以指定固定宽度,例如5px。

在CodePen中查看更多示例。

.wrapWord {
  display: inline-block;
  max-width: min-content;
}
Run Code Online (Sandbox Code Playgroud)
<div>
  <span class="wrapWord">
   Example Word
  </span>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 这是对我有用的解决方案。独立的,可以与 Flexbox 完美配合。 (4认同)

Mr *_*ter 8

如果您希望能够从不同的解决方案中进行选择,那么除了给出的答案外...

另一种方法是使容器的宽度为0并确保可见溢出。然后,每个单词将从其溢出,并排成一行。

div {
  width: 0;
  overflow: visible;
}
Run Code Online (Sandbox Code Playgroud)
<div>Short Word</div>
<hr>
<div>Gargantuan Word</div>
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用这些新提议的width值之一,前提是在阅读本文时这些值仍然存在。

div {
  width: min-intrinsic;       /* old Chrome, Safari */
  width: -webkit-min-content; /* less old Chrome, Safari */
  width: -moz-min-content;    /* current Firefox */
  width: min-content;         /* current Chrome, Safari; not IE or Edge */
}
Run Code Online (Sandbox Code Playgroud)
<div>Short Word</div>
<hr>
<div>Gargantuan Word</div>
Run Code Online (Sandbox Code Playgroud)


小智 7

最好的解决方案是word-spacing房产。

将其添加<p>到具有特定尺寸的容器中(例如300px),然后必须将该大小添加为字间距中的值。

超文本标记语言

<div>
 <p>Sentence Here</p>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

div {
 width: 300px;
}

p {
 width: auto;
 text-align: center;
 word-spacing: 300px;
}
Run Code Online (Sandbox Code Playgroud)

这样,你的句子将始终被分解并设置在一个列中,但段落的with将是动态的。

这是一个 Codepen示例


Mar*_*ark 5

你不能在 CSS 中定位每个单词。但是,使用一些 jQuery 您可能可以。

使用 jQuery,您可以将每个单词包装在 a 中<span>,然后使用 CSS 设置 span 将display:block其放在自己的行中。

当然理论上:P