Reputation:
How can I prevent text in a div block from overflowing in CSS?
div {
width: 150px;
/* what to put here? */
}
<div>This div contains a VeryLongWordWhichDoesNotFitToTheBorder.</div>
Upvotes: 200
Views: 496535
Reputation: 866
You can use the CSS property text-overflow to truncate long texts.
#greetings
{
width: 100px;
border: 1px red solid;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis; // This is where the magic happens
}
<div id="greetings">
Hello universe!
</div>
<div id="greetings">
Hello universe! 12345678901234567890
</div>
reference: http://makandracards.com/makandra/5883-use-css-text-overflow-to-truncate-long-texts
Upvotes: 64
Reputation: 17944
Simply use:
word-wrap: break-word;
white-space: pre-wrap;
word-break: break-word;
word-wrap
Allows long words to be able to break and wrap onto the next line.
Possible values:
normal
: Break words only at allowed break pointsbreak-word
: Allows unbreakable words to be brokendiv {
width: 150px;
border: 2px solid #ff0000;
}
div.normal {
word-wrap: normal;
}
div.break {
word-wrap: break-word;
}
<h2>word-wrap: normal</h2>
<div class="normal"> This div contains a VeryLongWordWhichDoesNotFitToTheBorder.</div>
<h2>word-wrap: break-word</h2>
<div class="break"> This div contains a VeryLongWordWhichDoesNotFitToTheBorder.</div>
white-space
Specifies how white-space inside an element is handled.
Possible values:
nowrap
: Text will never wrap to the next line.pre-wrap
: Whitespace is preserved by the browser. Text will wrap when necessary, and on line breaksdiv {
width: 150px;
border: 2px solid #ff0000;
}
div.nowrap {
white-space: nowrap;
}
div.pre-wrap {
white-space: pre-wrap;
}
<h2>white-space: nowrap</h2>
<div class="nowrap">This div contains a very long but normal paragraph with so many words and nothing else.</div>
<h2>white-space: pre-wrap</h2>
<div class="pre-wrap">This div contains a very long but normal paragraph with so many words and nothing else.</div>
word-break
Specifies how words should break when reaching the end of a line.
Possible values:
normal
: default line break rules.break-word
: To prevent overflow, word may be broken at arbitrary points.div {
width: 150px;
border: 2px solid #ff0000;
}
div.normal {
word-break: normal;
}
div.break-word {
word-break: break-word;
}
<h2>word-break: normal (default)</h2>
<div class="normal"> This div contains a VeryLongWordWhichDoesNotFitToTheBorder.</div>
<h2>word-break: break-word</h2>
<div class="break-word"> This div contains a VeryLongWordWhichDoesNotFitToTheBorder.</div>
For browser-specific versions of white-space
, use:
white-space: pre-wrap; /* CSS3 */
white-space: -moz-pre-wrap; /* Firefox */
white-space: -pre-wrap; /* Opera <7 */
white-space: -o-pre-wrap; /* Opera 7 */
Upvotes: 98
Reputation: 35
!! Hard coded tradoff ahead !! Depending on the surrounding code and the screen resolution this could lead to different / unwanted behaviour
If hidden overflow is out of the question and correct hyphenation is needed you could use the soft hyphen HTML entity where you want the word / text to break. This way you are able to predetermine a breaking point manually.
­
The hyphen will only appear when the word needs to break to not overflow its surrounding container.
Example:
<div class="container">
foo­bar
</div>
Result if the container is wide enough and the text would not overflow the container:
foobar
Result if the container is to small and the text would actually overflow the container:
foo-
bar
.container{
background-color: green;
max-width: 30px;
}
Example 1 - container to small => text overflows container:
<div class="container">
foobar
</div>
Example 2 - using soft hyphen => text breaks at predetermined break point:
<div class="container">
foo­bar
</div>
Example 3 - using soft hyphen => text still overflowing because the text before the soft hyphen is to long:
<div class="container">
foobar­foo
</div>
Further information: https://en.wikipedia.org/wiki/Soft_hyphen
Upvotes: 0
Reputation: 21695
.NonOverflow {
width: 200px; /* Need the width for this to work */
overflow: hidden;
}
<div class="NonOverflow">
Long Text
</div>
Upvotes: 2
Reputation: 3160
I guess you should start with the basics from w3
https://www.w3schools.com/cssref/css3_pr_text-overflow.asp
div {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
Upvotes: 5
Reputation: 11267
Recommendations for how to catch which part of your CSS is causing the issue:
1) set style="height:auto;"
on all the <div>
elements and retry again.
2) Set style="border: 3px solid red;"
on all the <div>
elements to see how wide of an area your <div>
's box is taking up.
3) Take away all the css height:#px;
properties from your CSS and start over.
So for example:
<div id="I" style="height:auto;border: 3px solid red;">I
<div id="A" style="height:auto;border: 3px solid purple;">A
<div id="1A" style="height:auto;border: 3px solid green;">1A
</div>
<div id="2A" style="height:auto;border: 3px solid green;">2A
</div>
</div>
<div id="B" style="height:auto;border: 3px solid purple;">B
<div id="1B" style="height:auto;border: 3px solid green;">1B
</div>
<div id="2B" style="height:auto;border: 3px solid green;">2B
</div>
</div>
</div>
Upvotes: 1
Reputation: 1499
You can just set the min-width in the css, for example:
.someClass{min-width: 980px;}
It will not break, nevertheless you will still have the scroll-bar to deal with.
Upvotes: 1
Reputation:
Try adding this class in order to fix the issue:
.ellipsis {
text-overflow: ellipsis;
/* Required for text-overflow to do anything */
white-space: nowrap;
overflow: hidden;
}
Explained further in this link http://css-tricks.com/almanac/properties/t/text-overflow/
Upvotes: 6
Reputation: 28205
You can try:
<div id="myDiv">
stuff
</div>
#myDiv {
overflow:hidden;
}
Check out the docs for the overflow property for more information.
Upvotes: 89
Reputation: 2148
there is another css property :
white-space : normal;
The white-space property controls how text is handled on the element it is applied to.
div {
/* This is the default, you don't need to
explicitly declare it unless overriding
another declaration */
white-space: normal;
}
Upvotes: 15
Reputation: 4429
If you want the overflowing text in the div to automatically newline instead of being hidden or making a scrollbar, use the
word-wrap: break-word
property.
Upvotes: 223
Reputation: 473
If your div has a set height in css that will cause it to overflow outside of the div.
You could give the div a min-height if you need to have it be a minimum height on the div at all times.
Min-height will not work in IE6 though, if you have an IE6 specific stylesheet you can give it a regular height for IE6. Height changes in IE6 according to the content within.
Upvotes: 1
Reputation: 773
You can control it with CSS, there is a few options :
Hope it helps.
Upvotes: 20