简体   繁体   English

在CSS / JS中,如何在第n个单词处自动换行?

[英]In CSS/JS, how to word-wrap at every nth word?

I want to add a paragraph to my web page but when I write, the text fills the full width of the screen. 我想在网页上添加一个段落,但是在编写时,文本会填满整个屏幕。

<p>Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text </p>

I want, for example, to specify that only 25 words can fit on each line with css or JavaScript, before wrapping to next line. 例如,我想指定css或JavaScript在每一行中只能容纳25个单词,然后再包装到下一行。

It's difficult to wrap every 25 words , but you can set a specific width to wrap at: 每25个单词很难换行,但是您可以设置一个特定的换行宽度:

 p { max-width: 400px; } 
 <p>Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text </p> 

But, you can still do it every n words, it just might lead to inconsistencies as words can be different lengths: 但是,您仍然可以每n单词执行一次,这可能会导致不一致,因为单词的长度可能不同:

 var p = document.getElementById("paragraph").innerText; p = p.match(/(\\S+ ){1,10}/g).join("<br>"); document.getElementById("paragraph").innerHTML = p; 
 <p id="paragraph">Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text </p> 

Note: I've wrapped every 10 words, but you could just as easily wrap after as many words as you want, just replace the 10 in the match regex with 25 . 注意:我每10个字就换行了,但是您可以根据需要轻松换行,只要将匹配正则表达式中的10换成25

This is actually surprisingly easy, I'd suggest wrapping at a certain width, but because you stated specifically you want to wrap every 25 words, here you go: 这实际上非常容易,我建议以一定的宽度换行,但是由于您特别声明要每25个字换行,因此您可以执行以下操作:

 Array.prototype.slice.call(document.querySelectorAll("p")).forEach(function(e){ e.innerHTML = e.innerText.match(/(\\S+ ){1,10}/g).join("<br>"); // ^^ number of words to wrap at }); 
 <p>Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text</p> 

Since 25 words is too wide for stack overflow, I wrapped at ten words instead, but you can do whatever. 由于25个单词的宽度太大而不能导致堆栈溢出,因此我换成了10个单词,但是您可以执行任何操作。

Really, I wrote it across three lines, but it is just one line of JavaScript. 确实,我是用三行代码编写的,但这只是JavaScript的一行。

you need to specify the p width or put it within a container that has a defined width 您需要指定p宽度或将其放入具有定义宽度的容器中

 p.longtext { width:200px; } 
 <p class='longtext'>Some long text Some long text Some long text Some long text Some long text Some long text Some long text Some long text </p> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM