Is there a way to word-wrap long words in a div?
Reading the original comment, rutherford is looking for a cross-browser way to wrap unbroken text (inferred by his use of word-wrap for IE, designed to break unbroken strings).
/* Source: http://snipplr.com/view/10979/css-cross-browser-word-wrap */
.wordwrap {
white-space: pre-wrap; /* CSS3 */
white-space: -moz-pre-wrap; /* Firefox */
white-space: -pre-wrap; /* Opera <7 */
white-space: -o-pre-wrap; /* Opera 7 */
word-wrap: break-word; /* IE */
}
I've used this class for a bit now, and works like a charm. (note: I've only tested in FireFox and IE)
How to force a line break in a long word in a DIV?
Use word-wrap:break-word;
It even works in IE6, which is a pleasant surprise.
word-wrap: break-word
has been replaced with overflow-wrap: break-word;
which works in every modern browser. IE, being a dead browser, will forever rely on the deprecated and non-standard word-wrap
instead.
Existing uses of word-wrap
today still work as it is an alias for overflow-wrap
per the specification.
How to break a long word inside a div, based on the div's parent width?
You don't need all those white-space
Instead use
.wordwrap {
word-break : break-all;
}
#parent { width: 500px; height: 500px; border: solid 1px; position: relative;}#child { top: 20px; left: 300px; border: solid 1px; position: absolute;}.wordwrap { word-break: break-all;}
<div id="parent"> <div id="child" class="wordwrap"> asfasfafafsafafasfasfafafasfadvaavasdvavdvsavsvasvsvs </div></div>
How to use word-wrap:break-word for a div without specifying width
Finally I did small change in my layout which given a standard result across all the browsers.
- Added a table inside my div (Here my table will have only one row & one column).
- Given the following styles to the table - "table-layout: fixed;width: 100%;word-wrap: break-word;"
Now user input will go into the table & it wraps the small words, breaks the long words if they are overflowing from the container.
wordwrap a very long string
This question has been asked here before:
- Who has solved the long-word-breaks-my-div problem? (hint: not stackoverflow)
- word wrap in css / js
- CSS: how can I force a long string (without any blank) to be wrapped in XUL and/or HTML
- CSS overflow with long URL
Long story short:
As far as CSS solutions go you have: overflow: scroll;
to force the element to show scrollbars and overflow:hidden;
to just cut off any extra text. There is text-overflow:ellipsis;
and word-wrap: break-word;
but they are IE only (break-word
is in the CSS3 draft, however, so it will be the solution to this 5 years from now).
Bottom line is that if it is very important for you to stop this from happening with wrapping the text over to the next line the only reasonable solution is to inject
(soft hyphen), <wbr>
(word break tag), or
(zero-width space, same effect as
minus hyphen) in your string server side. If you don't mind Javascript, however, there is the hyphenator which seems to be pretty solid.
How to prevent long words from breaking my div?
Soft hyphen
You can tell browsers where to split long words by inserting soft hyphen (
):
averyverylongword
may be rendered as
averyverylongword
or
averyvery-
longword
A nice regular expression can ensure you won't be inserting them unless neccessary:
/([^\s-]{5})([^\s-]{5})/ → $1$2
Browsers and search engines are smart enough to ignore this character when searching text, and Chrome and Firefox (haven't tested others) ignore it when copying text to clipboard.
<wbr>
element
Another option is to inject <wbr>
, a former IE-ism, which is now in HTML5:
averyvery<wbr>longword
Breaks with no hyphen:
averyvery
longword
You can achieve the same with zero-width space character
(or
).
FYI there's also CSS hyphens: auto
supported by latest IE, Firefox and Safari (but currently not Chrome):
div.breaking {
hyphens: auto;
}
However that hyphenation is based on a hyphenation dictionary and it's not guaranteed to break long words. It can make justified text prettier though.
Retro-whining solution
<table>
for layout is bad, but display:table
on other elements is fine. It will be as quirky (and stretchy) as old-school tables:
div.breaking {
display: table-cell;
}
overflow
and white-space: pre-wrap
answers below are good too.
How to break long words in CSS and HTML
@page { size: A4; margin: 1cm;}
.table,td,th { border: 1px solid #ddd; text-align: left;}
.table { border-collapse: collapse; width: 100%; table-layout: fixed;}
.table th,td { padding: 5px; text-align: center;}
.td { word-break: break-word;}
.list-group h3 { font-size: 3em;}
.list-group p { font-size: 1em;}
.table1 { width: 100%; max-width: 100%; margin-bottom: 5px; background-color: #fff; border: none; text-align: center;}
<div class="container"> <div class="card"> <table class="table1"> <td><img src="https://mytabtime.com/wp-content/uploads/2018/09/myTABtime-com-logo-240.png" alt="logo" /></td> <td> <div class="list-group"> <h3>Company Report</h3> <p>Date - {% now "jS F Y H:i" %}</p> </div> </td> </table> <br/> <table class="table"> <thead> <tr> <th>#</th> <th>Company Name</th> <th>Company Email</th> <th>Count Of Total Users</th> <th>Created Date</th> <th>Current Monthly Payment</th> <th>Is TABopts Customer</th> <th>Status</th> </tr> </thead> <tbody> {% if companies %} {% for company in companies %} <tr> <td class="td">{{ forloop.counter }}</td> <td class="td">{{ company.company_name }}</td> <td class="td">{{ company.company_email }}afsdasdfasdfasdf</td> <td class="td">{{ company.number_of_company_users }}</td> <td class="td">{{ company.company_created |date:"M d, Y" }}</td> <td class="td">{{ company.company_monthly_payment }}</td> <td class="td">{{ company.company_tab_opts }}</td> <td class="td">{{ company.company_status }}</td> </tr> {% endfor %} {% endif %} </tbody> </table> </div></div>
css word wrap that wraps whole word without breaking them?
You don't need to do anything special. Normally the text will break between words.
If that doesn't happen, then
- either the container is too wide
- the container is explicitly set to not break on spaces at all. For instance if it is a
<pre>
element, or has the csswhite-space:pre;
orwhite-space:nowrap;
. - the text contains non-breaking spaces (
Solution: use
white-space: pre-wrap;
It will make the element behave like a pre
element, except it also wraps when the line is too long. See also:
http://css-tricks.com/almanac/properties/w/whitespace/
Related Topics
Formatting Numbers (Decimal Places, Thousands Separators, Localization, etc) With CSS
Background Color of Text in Svg
How to Get the Footer to Stay At the Bottom of a Web Page
How to Force a Div Block to Extend to the Bottom of a Page Even If It Has No Content
How to Disable Margin-Collapsing
Line Before and After Title Over Image
How to Select the "Last Child" With a Specific Class Name in Css
Make Flex-Grow Expand Items Based on Their Original Size
How to Change the Cursor into a Hand When a User Hovers Over a List Item
Rotated Elements in CSS That Affect Their Parent'S Height Correctly
How to Change Whole Page Background-Color in Angular
How to Include CSS Files Using Node, Express, and Ejs
Change a Html5 Input'S Placeholder Color With Css
How to Style the Html5 Form Validation Error Messages With Css
Bootstrap Navbar With Left, Center or Right Aligned Items
Why Does Minmax(0, 1Fr) Work For Long Elements While 1Fr Doesn'T
::Slotted CSS Selector For Nested Children in Shadowdom Slot
Font Awesome 5 Shows Empty Square When Using the Js+Svg Version