Reputation: 40
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.
Upvotes: 0
Views: 976
Reputation:
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:
Array.prototype.slice.call(document.querySelectorAll("p")).forEach(function(el) {
el.innerHTML = el.innerText.match(/(\S+\s*){1,10}/g).join("<br>");
// ^^ 10 - 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.
Really, I wrote it across three lines, but it is just one line of JavaScript.
Upvotes: 1
Reputation:
It's difficult to wrap every 25 words, but you can set a specific width to wrap at:
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:
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 with25
.
Upvotes: 2
Reputation: 341
you need to specify the p width or put it within a container that has a defined width
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>
Upvotes: -1