2016-02-01 17 views
5

Chcę pokazać kropki na n-tym (w moim przypadku drugim) wierszu tekstu, jeśli się zepsuje. Widziałem odpowiedzi this i this, ale nie udało mi się uzyskać tego, co działa w mojej sprawie.Poka z kropkami w n-tym wierszu tekstu, jeśli zrywa z CSS

Oto fiddle.

.overme { 
    width: 300px; 
    height: 60px; 
    line-height: 30px; 
    overflow:hidden; 
    font-size: 30px; 
    color: red; 
    background: #333; 
    /*The problematic part is below*/ 
    white-space:nowrap; 
    text-overflow: ellipsis; 
} 
+1

zobaczyć http://www.mobify.com/blog/multiline-ellipsis-in-pure-css/ – fcalderan

+0

można stwierdzić, że 'white-space: nowrap;' tak jak tekst zawinęłaby się do drugiej linii? A poza tym - nie jest to możliwe w css, musisz używać javascript, czy to cię interesuje? Istnieją rozwiązania bez js, ale będziesz mieć problem z wstawianiem kropek po tekście, ponieważ css nie wie, jak długi jest twój tekst. –

+0

http://stackoverflow.com/questions/15909489/text-overflow-ellipsis-on-day-lines może ci to pomoże. –

Odpowiedz

5

Rozwiązanie 1:

pomocą WebKit tylko -webkit-line-clamp nieruchomość na 2 liniach.

.overme { 
 
    width: 300px; 
 
    height: 60px; 
 
    line-height: 30px; 
 
    overflow:hidden; 
 
    font-size: 30px; 
 
    color: red; 
 
    background: #333; 
 

 
    /*The problematic part is below*/ 
 
    white-space:nowrap; 
 
    text-overflow: ellipsis; 
 
} 
 
    
 
.overme { 
 
    white-space: normal; 
 
    display: -webkit-box; 
 
    -webkit-line-clamp: 2; 
 
    -webkit-box-orient: vertical; 
 
}
<div class="overme"> 
 
    how much wood can a woodchuck chuck if a woodchuck could chuck wood? 
 
</div>


roztworu 2

stosowania jako :after pseudo element dostosowane do dolnego prawego rogu. Działa to tylko wtedy, gdy tekst jest statyczny i wcześniej wiedziałeś, że przepełni on kontener.

.overme { 
 
    width: 300px; 
 
    height: 60px; 
 
    line-height: 30px; 
 
    overflow:hidden; 
 
    font-size: 30px; 
 
    color: red; 
 
    background: #333; 
 
    position: relative; 
 
} 
 
    
 
.overme:after { 
 
    display: inline-block; 
 
    position: absolute; 
 
    right: 0; 
 
    bottom: 0; 
 
    content: '...'; 
 
}
<div class="overme"> 
 
    how much wood can a woodchuck chuck if a woodchuck could chuck wood? 
 
</div>


Rozwiązanie 3 - Cross-browser

Ten JS rozwiązanie porównuje wysokość kontenera nadrzędnego (div) przed tekstem treści. Jeśli wysokość tekstu jest większa niż wysokość rodzica, do rodzica zostanie dodana klasa .overflows.

Aby to sprawdzić, usuń tekst, aby pasował do wszystkich w rodzicu. Nie będziesz już widział kropek.

$(".overme").each(function() { 
 
    var $elem = $(this); 
 
    $elem.addClass($elem[0].scrollHeight > $elem.height() ? 'overflows' : null); 
 
});
.overme { 
 
    width: 300px; 
 
    height: 60px; 
 
    line-height: 30px; 
 
    overflow:hidden; 
 
    font-size: 30px; 
 
    color: red; 
 
    background: #333; 
 
    position: relative; 
 
} 
 
    
 
.overme.overflows:after { 
 
    display: inline-block; 
 
    background: #333; 
 
    position: absolute; 
 
    right: 2px; 
 
    bottom: 0; 
 
    content: '...'; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="overme"> 
 
    how much wood can a woodchuck chuck if a woodchuck could chuck wood? 
 
</div>

+0

Czy istnieje alternatywa dla linii zacisku dla przeglądarek innych niż webkit? – Yulian

+0

@Yulian Wygląda na to, że obsługiwane są tylko te przeglądarki internetowe. Jedyny sposób, w jaki mogę wymyślić rozwiązanie dla tekstu dynamicznego w wielu przeglądarkach, to zrobić w JS. –

0

mieć spojrzenie na to stanowisko CSS Tricks, pomogło mi to i wprowadza linię zaciskania z różnymi sposobami osiągania wyników szukasz.