370

Let's say I have a string "I like big butts and I cannot lie" and I cut it with overflow:hidden, so it displays something like this:

I like big butts and I cann

cutting off the text. Is it possible to display this like this:

I like big butts and I cann...

using CSS?

Penny Liu
  • 15,447
  • 5
  • 79
  • 98
mannicken
  • 6,885
  • 4
  • 31
  • 38

11 Answers11

521

You can use text-overflow: ellipsis; which according to caniuse is supported by all the major browsers.

Here's a demo on jsbin.

.cut-text { 
  text-overflow: ellipsis;
  overflow: hidden; 
  width: 160px; 
  height: 1.2em; 
  white-space: nowrap;
}
<div class="cut-text">
I like big butts and I can not lie.
</div>
Dónal
  • 185,044
  • 174
  • 569
  • 824
Joe Phillips
  • 49,743
  • 32
  • 103
  • 159
  • This seemed to work in Firefox 15.0.1: http://www.w3schools.com/cssref/tryit.asp?filename=trycss3_text-overflow – Jace Nov 12 '12 at 07:47
  • Yes, it appears to work in newer versions. Obviously this answer is a few years old at this point. – Joe Phillips Nov 12 '12 at 14:27
  • Firefox started to support this as of version 7, which was released in the latter half of 2011. – Richard Ev Dec 28 '12 at 16:55
  • 2
    I can use my common sense to tell that this answer is "right" based on the votes and comments. However, I fail to see in reality how this answer is "right". I used both `overflow: hidden;` and `text-overflow: ellipsis;` in a `

    ` element (i.e., a block element) and found no `...` at the end (of course I am making sure that it is indeed overflowing). I also tried this without the `overflow: hidden;` part, and also with a `` element inside the `

    ` element where the `

    ` element had `overflow: hidden;` and the `` had `text-overflow: ellipsis;` No matter how I try, this is a fail..

    – VoidKing Jul 23 '13 at 15:54
  • BTW, I tried this in Chrome, and while I am getting that this rule at least used to have compatibility issues, I would certainly expect it to work in the most recent version of Chrome as of `7/23/2013`. What am I doing wrong? This seems too easy to mess up, LOL. – VoidKing Jul 23 '13 at 15:57
  • 2
    Well, I think I know the problem. I am trying to restrict the overflow based on `max-height` so I cannot have `white-space:` set to `nowrap` – VoidKing Jul 23 '13 at 16:08
  • @JoePhillips is there any to place more after dots like "hi, this is s... more" when clicking on more to show the full text – Nunna Suma Mar 02 '18 at 09:19
  • @NunnaS No clue. Good question. Probably worthy of a separate stackoverflow question – Joe Phillips May 30 '18 at 16:20
  • Anyone know how to change just the 3 dots color without change the text color? – Luan Cardoso Oct 31 '18 at 18:44
  • @m3h0w Correct. I believe you have to specify a static width – Joe Phillips Oct 27 '20 at 15:13
  • in my case, I also needed to add width: 100% to the block. – mialdi98 Sep 06 '22 at 09:30
115

Check the following snippet for your problem

div{
  width : 100px;
  overflow:hidden;
  display:inline-block;
  text-overflow: ellipsis;
  white-space: nowrap;
}
<div>
    The Alsos Mission was an Allied unit formed to investigate Axis scientific developments, especially nuclear, chemical and biological weapons, as part of the Manhattan Project during World War II. Colonel Boris Pash, a former Manhattan P
</div>
Arjun
  • 2,159
  • 1
  • 17
  • 26
45

Try this if you want to restrict the lines up to 3 and after three lines the dots will appear. If we want to increase the lines just change the -webkit-line-clamp value and give the width for div size.

div {
   display: -webkit-box;
   -webkit-line-clamp: 3;
   -webkit-box-orient: vertical;
   overflow: hidden;
   text-overflow: ellipsis;
}
Nagendra Matala
  • 461
  • 4
  • 4
29

Hopefully it's helpful for you:

.text-with-dots {
    display: block;
    max-width: 98%;
    white-space: nowrap;
    overflow: hidden !important;
    text-overflow: ellipsis;
}
<div class='text-with-dots'>Some texts here Some texts here Some texts here Some texts here Some texts here Some texts here </div>
Vu Phan
  • 553
  • 6
  • 6
24

Hide text on load and show on hover

.hide-text {
  width: 70px;
  display: inline-block;
  white-space: nowrap;
  overflow: hidden !important;
  text-overflow: ellipsis;
}

span:hover {
   white-space: unset;
   text-overflow: unset;
}
<span class="hide-text"> How to hide text by dots and show text on hover</span>
coreuter
  • 3,331
  • 4
  • 28
  • 74
Rohit Parte
  • 3,365
  • 26
  • 26
15

Yes, via the text-overflow property in CSS 3. Caveat: it is not universally supported yet in browsers.

ceejayoz
  • 176,543
  • 40
  • 303
  • 368
12

In bootstrap 4, you can add a .text-truncate class to truncate the text with an ellipsis.

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" rel="stylesheet" />
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js"></script>

<!-- Inline level -->
<span class="d-inline-block text-truncate" style="max-width: 190px;">
  I like big butts and I cannot lie
</span>
Penny Liu
  • 15,447
  • 5
  • 79
  • 98
12
<!DOCTYPE html>
<html>
<head>
<style>
.cardDetaileclips{
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 3; /* after 3 line show ... */
    -webkit-box-orient: vertical;
}
</style>
</head>
<body>
<div style="width:100px;">
  <div class="cardDetaileclips">
    My Name is Manoj and pleasure to help you.
  </div>
</div> 
</body>
</html>
manoj patel
  • 1,150
  • 12
  • 10
6
<style>
    .dots
    {
        display: inline-block;
        width: 325px;
        white-space: nowrap;
        overflow: hidden !important;
        text-overflow: ellipsis;
    }

    .dot
    {
        display: inline-block;
        width: 185px;
        white-space: nowrap;
        overflow: hidden !important;
        text-overflow: ellipsis;
    }
</style>
radbyx
  • 9,352
  • 21
  • 84
  • 127
Cuteboy_Max
  • 131
  • 1
  • 4
6
.cut-text {
  text-overflow: ellipsis;
  white-space: nowrap;
  overflow: hidden;
}
Muhammad Taha
  • 137
  • 1
  • 6
5

Most of solutions use static width here. But it can be sometimes wrong for some reasons.

Example: I had table with many columns. Most of them are narrow (static width). But the main column should be as wide as possible (depends on screen size).

HTML:

<table style="width: 100%">
  <tr>
    <td style="width: 60px;">narrow</td>
    <td>
      <span class="cutwrap" data-cutwrap="dynamic column can have really long text which can be wrapped on two rows, but we just need not wrapped texts using as much space as possible">
        dynamic column can have really long text which can be wrapped on two rows
        but we just need not wrapped texts using as much space as possible
      </span>
    </td>
  </tr>
</table>

CSS:

.cutwrap {
  position: relative;
  overflow: hidden;
  display: block;
  width: 100%;
  height: 18px;
  white-space: normal;
  color: transparent !important;
}
.cutwrap::selection {
  color: transparent !important;
}
.cutwrap:before {
  content: attr(data-cutwrap);
  position: absolute;
  left: 0;
  right: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
  color: #333;
}
/* different styles for links */
a.cutwrap:before {
  text-decoration: underline;
  color: #05c;
}
Maju
  • 616
  • 4
  • 9