Word wrap a link so it doesn't overflow its parent div width
HtmlCssWidthWord WrapHtml Problem Overview
I have this piece of code:
div#permalink_section {
width: 960px
}
<div id='permalink_section'>
<a href="here goes a very long link">here goes a very very long link</a>
</div>
The link text can be very long and it overflows the div when it's length does exceed the div width. Is there a way to force the link to break and go on the next line when its width exceeds the div width?
Html Solutions
Solution 1 - Html
The following is a cross browser compatible solution:
> #permalink_section
> {
> white-space: pre-wrap; /* CSS3 /
> white-space: -moz-pre-wrap; / Mozilla, since 1999 /
> white-space: -pre-wrap; / Opera 4-6 /
> white-space: -o-pre-wrap; / Opera 7 /
> word-wrap: break-word; / Internet Explorer 5.5+ */
> }
Check working example here.
Solution 2 - Html
If you're okay with CSS3, there's a property for that:
word-wrap:break-word;
Solution 3 - Html
Works for Internet Explorer 8+, Firefox 6+, iOS 4.2, Safari 5.1+ and Chrome 13+.
CSS
.word-wrap {
/* Warning: Needed for oldIE support, but words are broken up letter-by-letter */
-ms-word-break: break-all;
word-break: break-all;
/* Non standard for webkit */
word-break: break-word;
-webkit-hyphens: auto;
-moz-hyphens: auto;
-ms-hyphens: auto;
hyphens: auto;
}
Source: kenneth.io
SCSS
@mixin word-wrap() {
word-break: break-word;
-webkit-hyphens: auto;
-moz-hyphens: auto;
hyphens: auto;
}
Source: css-tricks.com
Solution 4 - Html
div#permalink_section
{
width:960px;
overflow:hidden;
}
or
div#permalink_section
{
width:960px;
word-wrap:break-word
}
or use javascript to truncate the length of the link's text, replacing the end with "..."
Working example of the JS method: http://jsfiddle.net/fhCYX/3/
Solution 5 - Html
wrap link inside another div with smaller width
<html>
<head><title></title>
<style type="text/css">
div#permalink_section { width: 960px }
</style>
</head>
<body>
<div id='permalink_section'>
<div id="linkwrap" style="width:100px">
<a href="here goes a very long link">here goes a very very long link</a>
</div>
</div>
</body>
</html>
Solution 6 - Html
I didn't have much luck with the solution in the accepted answer, so I tried a different approach. On load, I pad all slashes in the anchor text with spaces: "/" --> " / ". Most links don't have slashes and so this does nothing, and most links that do have them are hyperlinks, and these look okay with this substitution, and then the links do wrap correctly.
$('a').each(function ()
{
//get the content
var content = $(this).html();
//a regex to find all slashes
var rgx = new RegExp('/', 'g');
//do the replacement
content = content.replace(rgx, " / ")
//the previous step also affects http:// (where present), so fix this back up
content = content.replace('http: / / ', 'http://');
//set the content back into the element
$(this).html(content);
});
Solution 7 - Html
overflow:hidden
seems to be the key to making an element of size:auto
break-word
correctly
<ul class="list">
<li class="item">
<div class="header">
<div class="content"></div>
</div>
<div class="body ">
<p>Loremipsumdolorsitametconsecteturadipisicingelitseddoeiusmodtemporincididuntutlaboreetdoloremagnaaliqua.</p>
</div>
</li>
</ul>
.list {
border: 1px solid black;
margin: 50px;
}
.header {
float:left;
}
.body {
overflow: hidden;
}
.body p {
word-wrap: break-word;
}
.header .content {
background: #DDD;
width: 80px;
height: 30px;
}
That example includes a left float as I was trying to achieve a media-object like layout.
Unfortunately if you try to use table-cell
elements it breaks again :(