Teks melimpah elipsis pada dua baris

117

Saya tahu Anda dapat menggunakan kombinasi aturan CSS untuk membuat teks diakhiri dengan elipsis (...) ketika waktunya meluap (keluar dari batas orang tua).

Apakah mungkin (jangan ragu untuk mengatakan, tidak) untuk mencapai efek yang sama, tetapi biarkan teks membungkus lebih dari satu baris?

Berikut demo nya .

div {
  width: 300px; 
  height: 42px; 
  overflow: hidden; 
  text-overflow: ellipsis; 
  white-space: nowrap;
}

Seperti yang Anda lihat, teks diakhiri dengan elipsis saat lebih lebar dari lebar div. Namun, masih ada cukup ruang bagi teks untuk dibungkus pada baris kedua dan dilanjutkan. Ini terganggu oleh white-space: nowrap, yang diperlukan agar elipsis berfungsi.

Ada ide?

PS: Tidak ada solusi JS, CSS murni jika memungkinkan.

Tony Bogdanov
sumber
Apa yang menentukan "ada ruang"? Apakah semuanya termasuk tinggi font dalam piksel yang ditetapkan? Apa yang akan terjadi jika pengguna akhir meningkatkan ukuran font di browser mereka?
Joel Etherton
@JoelEtherton Saya kira itu terserah browser untuk memutuskan dan ya, semuanya dalam piksel dalam kasus saya.
Tony Bogdanov
Ini bisa menjadi solusi yang baik: stackoverflow.com/questions/6222616/…
ivy
Ini adalah bacaan yang sangat bagus hackingui.com/front-end/…
anandharshan

Jawaban:

31

Saya tidak yakin apakah Anda telah melihat INI , tetapi CSS-Tricks.com Chris Coyier yang luar biasa memposting tautan ke ini beberapa waktu lalu dan ini adalah solusi CSS murni yang menyelesaikan apa yang Anda cari.

(Klik untuk Melihat di CodePen)

HTML:

<div class="ellipsis">
    <div>
        <p>
            Call me Ishmael. Some years ago – never mind how long precisely – having
            little or no money in my purse, and nothing particular to interest me on
            shore, I thought I would sail about a little and see the watery part of the
            world. It is a way I have of driving off the spleen, and regulating the
            circulation. Whenever I find myself growing grim about the mouth; whenever it
            is a damp, drizzly November in my soul; whenever I find myself involuntarily
            pausing before coffin warehouses, and bringing up the rear of every funeral I
            meet; and especially whenever my hypos get such an upper hand of me, that it
            requires a strong moral principle to prevent me from deliberately stepping
            into the street, and methodically knocking people's hats off – then, I account
            it high time to get to sea as soon as I can.
        </p>
    </div>
</div>

CSS:

html,body,p {
    margin: 0;
    padding: 0;
    font-family: sans-serif;
}
.ellipsis {
    overflow: hidden;
    height: 200px;
    line-height: 25px;
    margin: 20px;
    border: 5px solid #AAA;
}
.ellipsis:before {
    content: "";
    float: left;
    width: 5px;
    height: 200px;
}
.ellipsis > *:first-child {
    float: right;
    width: 100%;
    margin-left: -5px;
}
.ellipsis:after {
    content: "\02026";
    box-sizing: content-box;
    -webkit-box-sizing: content-box;
    -moz-box-sizing: content-box;
    float: right;
    position: relative;
    top: -25px;
    left: 100%;
    width: 3em;
    margin-left: -3em;
    padding-right: 5px;
    text-align: right;
    background-size: 100% 100%;/* 512x1 image,gradient for IE9. Transparent at 0% -> white at 50% -> white at 100%.*/
    background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgAAAAABCAMAAACfZeZEAAAABGdBTUEAALGPC/xhBQAAAwBQTFRF////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////AAAA////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////wDWRdwAAAP90Uk5TgsRjMZXhS30YrvDUP3Emow1YibnM9+ggOZxrBtpRRo94gxItwLOoX/vsHdA2yGgL8+TdKUK8VFufmHSGgAQWJNc9tk+rb5KMCA8aM0iwpWV6dwP9+fXuFerm3yMs0jDOysY8wr5FTldeoWKabgEJ8RATG+IeIdsn2NUqLjQ3OgBDumC3SbRMsVKsValZplydZpZpbJOQco2KdYeEe36BDAL8/vgHBfr2CvTyDu8R7esU6RcZ5ecc4+Af3iLcJSjZ1ivT0S/PMs3LNck4x8U7wz7Bv0G9RLtHuEq1TbJQr1OtVqqnWqRdoqBhnmSbZ5mXapRtcJGOc4t2eYiFfH9AS7qYlgAAARlJREFUKM9jqK9fEGS7VNrDI2+F/nyB1Z4Fa5UKN4TbbeLY7FW0Tatkp3jp7mj7vXzl+4yrDsYoVx+JYz7mXXNSp/a0RN25JMcLPP8umzRcTZW77tNyk63tdprzXdmO+2ZdD9MFe56Y9z3LUG96mcX02n/CW71JH6Qmf8px/cw77ZvVzB+BCj8D5vxhn/vXZh6D4uzf1rN+Cc347j79q/zUL25TPrJMfG/5LvuNZP8rixeZz/mf+vU+Vut+5NL5gPOeb/sd1dZbTs03hBuvmV5JuaRyMfk849nEM7qnEk6IHI8/qn049hB35QGHiv0yZXuMdkXtYC3ebrglcqvYxoj1muvC1nDlrzJYGbpcdHHIMo2FwYv+j3QAAOBSfkZYITwUAAAAAElFTkSuQmCC);
    background: -webkit-gradient(linear,left top,right top,
        from(rgba(255,255,255,0)),to(white),color-stop(50%,white));
        background: -moz-linear-gradient(to right,rgba(255,255,255,0),white 50%,white);
        background: -o-linear-gradient(to right,rgba(255,255,255,0),white 50%,white);
        background: -ms-linear-gradient(to right,rgba(255,255,255,0),white 50%,white);
        background: linear-gradient(to right,rgba(255,255,255,0),white 50%,white);
    }

Tentu saja, menjadi solusi CSS murni berarti itu juga cukup rumit, tetapi bekerja dengan rapi dan elegan. Saya akan berasumsi bahwa Javascript tidak mungkin dilakukan karena ini jauh lebih mudah dicapai (dan bisa dibilang lebih terdegradasi) dengan Javascript.

Sebagai bonus tambahan, ada file zip yang dapat diunduh dari proses lengkap (jika Anda ingin memahaminya dan semua), tetapi juga file mixin SASS sehingga Anda dapat melipatnya ke dalam proses Anda dengan mudah.

Semoga ini membantu!

http://www.mobify.com/blog/multiline-ellipsis-in-pure-css/

dashard
sumber
Saya baru saja mengklik tautan Codepen Anda di ponsel Android dan berfungsi di Firefox. Platform / browser apa yang tidak berfungsi?
dashard
uploady.com/#!/download/kAwBXv1CqXg/PU68wrP6QzGgydlS Saya menggunakan chrome dan tidak ada elipsis di pratinjau. Terus tambahkan baris teks, tidak ada yang terjadi. Setelah berapa banyak baris akan mulai menampilkan elipsis?
coding_idiot
Di link upload yang Anda posting, teks tersebut jelas belum meluap dari penampung. Teks harus terlalu banyak untuk penampung tetap untuk ditampilkan sebelum elipsis muncul. Terus tambahkan teks untuk melihat efeknya.
dashard
@ MarcosPérezGude - tidak mengejutkan saya. Disinggung dengan itu dengan >> "Tentu saja, menjadi solusi CSS murni berarti itu juga cukup rumit…" <<
dashard
137

Properti CSS yang mudah dapat melakukan triknya. Berikut ini adalah untuk elipsis tiga baris.

display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
pxthxk
sumber
15
ini tidak berfungsi di firefox. hanya chrome, safari, dan opera
anyavacy
1
menurut caniuse , dikatakan bahwa "tidak mungkin browser lain akan mendukung properti sebagaimana adanya". Jadi pergilah.
Matan Bobi
teman halus .. sangat membantu
Valentino Pereira
4
Bekerja gr8 di firefox juga
Nisharg Shah
4
Tampaknya mendapat dukungan besar sekarang: caniuse.com/#search=line-clamp
Joao
52

Lihatlah versi css murni ini: http://codepen.io/martinwolf/pen/qlFdp

display: -webkit-box;
max-width: 400px;
height: 109.2px;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden;
text-overflow: ellipsis;
line-height: 1.625;
amcdnl.dll
sumber
7
Itu sangat keren, sayang sekali itu hanya webkit. Berikut artikel menarik tentang masalah ini: css-tricks.com/line-clampin
Tony Bogdanov
Mengapa Anda menyatakan dua text-overflowdan displayaturan?
j08691
WoooW yang besar. Saya belum pernah melihat sebelumnya penjepit garis
Mike Aron
1
Untuk diketahui, ini juga berfungsi dengan baik di Firefox hari ini. Solusi bagus!
Athoxx
hanya 1 pertanyaan, ketika saya memiliki satu baris atau dua baris teks saya ingin mereka berada di tengah, bagaimana cara melakukannya, jika saya menambahkan display flex saya kehilangan elipsis, sepertinya ini hanya berfungsi jika display: -webkit box disetel
PirateApp
10

Css di bawah harus melakukan triknya.

Setelah baris kedua, teks akan berisi ...

line-height: 1em;
max-height: 2em;
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;
anandharshan
sumber
ini bekerja dengan baik tetapi saya harus menambahkanoverflow:hidden
timhysniu
3

Gunakan ini jika di atas tidak berfungsi

 display: block;
 display: -webkit-box;
 max-width: 100%;
 margin: 0 auto;
 -webkit-line-clamp: 2;
 /* autoprefixer: off */
 -webkit-box-orient: vertical;
 /* autoprefixer: on */
 overflow: hidden;
 text-overflow: ellipsis;
Vikas Verma
sumber
2

Solusi saya menggunakan kembali salah satu amcdnl, tetapi fallback saya terdiri dari penggunaan ketinggian untuk wadah teks:

.my-caption h4 {
    display: -webkit-box;
    margin: 0 auto;
    -webkit-line-clamp: 2;
    -webkit-box-orient: vertical;
    overflow: hidden;
    text-overflow: ellipsis;

    height: 40px;/* Fallback for non-webkit */
}
VincentPerrin.com
sumber
-webkit-line-clamptidak berfungsi untuk IE11, Edge, atau Firefox.
Gaʀʀʏ
@ Garry, Anda benar, pada saat Anda akan membutuhkan perbaikan JS, tetapi sekarang berfungsi dengan baik. caniuse.com/#search=webkit-line-clamp
VincentPerrin.com
1

Berdasarkan jawaban yang saya lihat di stackoveflow, saya membuat mixin KURANG ini ( gunakan tautan ini untuk menghasilkan kode CSS ):

.max-lines(@lines: 3; @line-height: 1.2) {
  overflow: hidden;
  text-overflow: ellipsis;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: @lines;
  line-height: @line-height;
  max-height: @line-height * @lines;
}

Pemakaian

.example-1 {
    .max-lines();
}

.example-2 {
    .max-lines(3);
}

.example-3 {
    .max-lines(3, 1.5);
}
Nabil Kadimi
sumber
1

Tampaknya lebih elegan menggabungkan dua kelas. Anda dapat membatalkan two-lineskelas jika hanya satu baris yang perlu dilihat:

.ellipse {
          white-space: nowrap;
          display:inline-block;
          overflow: hidden;
          text-overflow: ellipsis;
       }
      .two-lines {
          -webkit-line-clamp: 2;
          display: -webkit-box;
          -webkit-box-orient: vertical;
          white-space: normal;
      }
      .width{
          width:100px;
          border:1px solid hotpink;
      }
        <span class='width ellipse'>
          some texts some texts some texts some texts some texts some texts some texts
       </span>

       <span class='width ellipse two-lines'>
          some texts some texts some texts some texts some texts some texts some texts
       </span>

Pemuda terbalik
sumber
1

Membatasi beberapa baris akan berfungsi di hampir semua browser, tetapi elipsis (3 titik) tidak akan ditampilkan di Firefox & IE. Demo - http://jsfiddle.net/ahzo4b91/1/

div {
width: 300px;
height: 2.8em;
line-height: 1.4em;
display: flex;
-webkit-line-clamp: 2;
display: -webkit-box;
-webkit-box-orient: vertical;
overflow: hidden; 
}
Nikith Reddy
sumber
0
          text-overflow: ellipsis;
          overflow: hidden;
          text-overflow: ellipsis;
          display: -webkit-box;
          line-height: 36px;
          max-height: 18px;
          -webkit-line-clamp: 2;
          -webkit-box-orient: vertical;

Saya telah menemukan kombinasi kerja penjepit garis dan tinggi garis: D

jimmyNames
sumber
0

Di aplikasi sudut saya, gaya berikut bekerja untuk saya untuk mencapai elipsis pada luapan teks di baris kedua :

 <div style="height:45px; overflow: hidden; position: relative;">
     <span class=" block h6 font-semibold clear" style="overflow: hidden;
        text-overflow: ellipsis;
        display: -webkit-box; 
        line-height: 20px; /* fallback */
        max-height: 40px; /* fallback */
        -webkit-line-clamp: 2; /* number of lines to show */
        -webkit-box-orient: vertical;">
        {{ event?.name}} </span>
 </div>

Semoga bisa membantu seseorang.

Nodirabegimxonoyim
sumber
0

Bagi mereka yang bekerja di scss , Anda perlu menambahkan !autoprefixerdi awal komentar agar disimpan untuk postcs:

Saya menghadapi masalah itu, itulah mengapa mempostingnya di sini

line-height: 1em;
max-height: 2em;
display: -webkit-box;
/*! autoprefixer: off */
-webkit-box-orient: vertical;
-webkit-line-clamp: 2;

Referensi

Awais
sumber
0

Anda dapat menggunakan efek terlarut alih-alih elipsis, CSS murni dan terlihat lebih profesional:

    <div style="width: 293px; height:48px; overflow: hidden; ">
        More than two line of text goes here-More than two line of text goes here
    </div>
    <div style="position: relative; top: -24px; width: 293px; height:24px; 
             background: linear-gradient(90deg, rgba(255,0,0,0) 40%, rgba(255,255,255,1) 99%);">
    </div>

Di sini saya mengasumsikan warna latar belakang Anda putih.

Mahan Lamei
sumber
-1

Ini adalah peretasan total, tetapi berhasil:

http://jsfiddle.net/2wPNg/

div {
    width: 30%;
    float: left;
    margin-right: 2%;
    height: 94px;
    overflow: hidden;
    position: relative;
}

div:after {
     display: block;
      content: '...';
      width: 1em;
  height: 1.5em;
  background: #fff;
  position: absolute;
  bottom: -6px;
  right: 0;
    }

Itu memang memiliki masalah .... mungkin memotong surat dengan canggung, dan mungkin akan memiliki beberapa hasil yang aneh di situs yang responsif.

Morgan Kay
sumber
5
Ini bukan solusi yang tepat karena jika konten lebih kecil maka juga menambahkan '...' pada akhirnya. Biola: jsfiddle.net/2wPNg
Sachin
-1

Berikut ini skrip sederhana untuk mengelola elipsis menggunakan jQuery. Ini memeriksa ketinggian sebenarnya dari elemen dan itu membuat simpul asli tersembunyi dan simpul terpotong. Ketika pengguna mengkliknya, itu beralih di antara dua versi.

Salah satu keuntungan besar adalah bahwa "elipsis" mendekati kata terakhir, seperti yang diharapkan.

Jika Anda menggunakan solusi CSS murni, tiga titik muncul jauh dari kata terakhir.

function manageShortMessages() {

        $('.myLongVerticalText').each(function () {
            if ($(this)[0].scrollHeight > $(this)[0].clientHeight)
                $(this).addClass('ellipsis short');
        });

        $('.myLongVerticalText.ellipsis').each(function () {
            var original = $(this).clone().addClass('original notruncation').removeClass('short').hide();
            $(this).after(original);

            //debugger;
            var shortText = '';
            shortText = $(this).html().trim().substring(0, 60) + '...';
            $(this).html(shortText);
        });
        
        $('.myLongVerticalText.ellipsis').click(function () {
            $(this).hide();

            if ($(this).hasClass('original'))
            {
                $(this).parent().find('.short').show();
            }
            else
            {
                $(this).parent().find('.original').show();
            }
        });
    }
	
  manageShortMessages();
div {
 border:1px solid red;
 margin:10px;
}

div.myLongVerticalText {
  height:30px;
  width:450px;
}

div.myLongVerticalText.ellipsis {
 cursor:pointer;
}

div.myLongVerticalText.original {
  display:inline-block;
  height:inherit;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<body>
<div class="myLongVerticalText">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse sit amet quam hendrerit, sagittis augue vel, placerat erat. Aliquam varius porta posuere. Aliquam erat volutpat. Phasellus ullamcorper malesuada bibendum. Etiam fringilla, massa vitae pulvinar vehicula, augue orci mollis lorem, laoreet viverra massa eros id est. Phasellus suscipit pulvinar consectetur. Proin dignissim egestas erat at feugiat. Aenean eu consectetur erat. Nullam condimentum turpis eu tristique malesuada.

Aenean sagittis ex sagittis ullamcorper auctor. Sed varius commodo dui, nec consectetur ante condimentum et. Donec nec blandit mi, vitae blandit elit. Phasellus efficitur ornare est facilisis commodo. Donec convallis nunc sed mauris vehicula, non faucibus neque vehicula. Donec scelerisque luctus dui eu commodo. Integer eu quam sit amet dui tincidunt pharetra eu ac quam. Quisque tempus pellentesque hendrerit. Sed orci quam, posuere eu feugiat at, congue sed felis. In ut lectus gravida, volutpat urna vitae, cursus justo. Nam suscipit est ac accumsan consectetur. Donec rhoncus placerat metus, ut elementum massa facilisis eget. Donec at arcu ac magna viverra tincidunt.
</div>


<div class="myLongVerticalText">
One Line Lorem ipsum dolor sit amet.  
</div>
</body>

Matteo Conta
sumber
Jika Anda tidak menyukai solusi ini, jelaskan mengapa di sini, saya akan menghargainya.
Matteo Conta
1
OP meminta solusi CSS dan Anda menawarkan jQuery?
dashard
Saya merindukan bahwa itu adalah persyaratan yang kuat karena tidak adanya javascript, dalam kasus saya solusi CSS murni menghadirkan masalah rendering, solusi jQuery memberi saya lebih banyak kendali atas rendering akhir dan posisi elipsis.
Matteo Conta
Sangat setuju. Dalam jawaban saya, saya mencatat bahwa ini jauh lebih mudah dicapai dengan JS.
dashard
-3

Tidak yakin apa target Anda, tetapi apakah Anda ingin teksnya muncul di baris kedua?

Ini jsFiddle Anda: http://jsfiddle.net/8kvWX/4/ baru saja menghapus yang berikut ini:

     white-space:nowrap;  

Saya tidak yakin apakah ini yang Anda cari atau tidak.

Salam,

Mee

Mee
sumber
1
Dia menginginkan elipsis di akhir baris kedua, yang tidak mudah dilakukan tanpa JavaScript ...
Marc Audet
Tepatnya @MarcAudet :)
Tony Bogdanov
Benar, ketika saya menemukan orang lain meminta untuk memiliki baris pada baris kedua dan CSS-nya hampir sama dengan milik Anda tetapi kelas itu menunjuk ke tag ul sebagai gantinya. Bagaimanapun, maaf Tony. Saya akan melihatnya lagi dan memperbarui jawaban saya jika saya berhasil.
Mee
baik saya pikir solusi terbaik adalah dari @Itay Gal. Sejauh yang saya lihat itu berhasil.
Mee