सीएसएस का उपयोग करके टेक्स्ट की लंबाई को एन लाइनों तक सीमित करें


515

क्या सीएसएस का उपयोग करके एक पाठ की लंबाई को "एन" लाइनों तक सीमित करना संभव है (या लंबवत से अधिक होने पर इसे काट लें)।

text-overflow: ellipsis; केवल 1 पंक्ति पाठ के लिए काम करता है।

मूल लेख:

अल्ट्राइस नॉट्के मस्त मैटीस, एलिकम, पेलेसेकस टेंकिडंट एलीट पर्पस
लेक्टस, वेल यूट एलिकेट,
एलिमेंट नूनक ननक रोनकस प्लसरट ओरना! बैठो इस्ट सेड! यूट पेनाटिबस टरपीस मुस टिसिनडंट
! डैपीबस सेड एनीन, मैग्ना सागिटिस, लॉरेम वेलिट

वांछित आउटपुट (2 लाइनें):

Ultrices natoque mus Mattis, aliquam, pellentesque tincidunt elit purus
lectus, vel ut aliquet, elementum में cras ...


1
बस एक ध्यान दें: टेक्स्ट-ओवरफ्लो
इलिप्सिस

8
लगता है कि किसी ने इसे सिर्फ css mobify.com/dev/multiline-ellipsis-in-pure-css के
गौरव शाह

IE10 पर काम नहीं करता है। यह 11.
user2060451

@ गौरवशाह धन्यवाद। यह IE10 पर भी काम करता है। यहां अधिकांश समाधान क्रॉस ब्राउज़र नहीं हैं।
user2060451

जवाबों:


654

अनौपचारिक लाइन-क्लैंप सिंटैक्स का उपयोग करने का एक तरीका है , और फ़ायरफ़ॉक्स 68 के साथ शुरू करना यह सभी प्रमुख ब्राउज़रों में काम करता है।

body {
   margin: 20px;
}

.text {
   overflow: hidden;
   text-overflow: ellipsis;
   display: -webkit-box;
   -webkit-line-clamp: 2; /* number of lines to show */
   -webkit-box-orient: vertical;
}
<div class="text">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam consectetur venenatis blandit. Praesent vehicula, libero non pretium vulputate, lacus arcu facilisis lectus, sed feugiat tellus nulla eu dolor. Nulla porta bibendum lectus quis euismod. Aliquam volutpat ultricies porttitor. Cras risus nisi, accumsan vel cursus ut, sollicitudin vitae dolor. Fusce scelerisque eleifend lectus in bibendum. Suspendisse lacinia egestas felis a volutpat.
</div>

जब तक आप IE उपयोगकर्ताओं के बारे में परवाह नहीं करते हैं, तब तक line-heightऔर max-heightकमियां करने की आवश्यकता नहीं है ।


3
उदाहरण के लिए, लाइन-ऊंचाई के लिए कुछ फ़ॉन्ट-आकार के साथ, आप अगली पंक्ति का भाग भी टेक्स्ट-संरेखित कर सकते हैं: औचित्य, दीर्घवृत्त अंतिम पंक्ति के अंत में नहीं है, लेकिन स्थिति पर पाठ को ओवरलैप करता है, यह अगर पाठ को बाईं ओर संरेखित किया गया होता
Matus

3
यहाँ एक पहेली है: jsfiddle.net/csYjC/1122 जब मैं इसे तैयार कर रहा था, तो मुझे पता चला, अंतिम पंक्ति का वह भाग केवल तभी दिखाई देता है जब पैडिंग हो
Matus

खैर, किसी ने नहीं कहा कि यह गैर-मानक वेबकिट-केवल काला जादू हर समय पूरी तरह से काम करने वाला है। आप कुछ अन्य, शायद माता-पिता, कंटेनर पर पैडिंग का उपयोग कर सकते हैं। <P> टैग में टेक्स्ट को सही अर्थ में बनाना: jsfiddle.net/csYjC/1129
इवगेनी

2
ध्यान दें कि, इस टिप्पणी के रूप में, -webkit-line-clamp दृश्यता का सम्मान नहीं करता है: छिपा हुआ। इसने मुझे कुछ घंटे डिबगिंग में खर्च किया। यहाँ एक सहायक बग रिपोर्ट है: bugs.webkit.org/show_bug.cgi?id=45399
केविन

3
यदि आप इस मुद्दे को -webkit-box-orient: vertical;छिपा रहे हैं कि scss का संकलन कब किया गया है/* autoprefixer: ignore next */ -webkit-box-orient: vertical;
सलाम

109

आप निम्न कार्य कर सकते हैं:

.max-lines {
  display: block;/* or inline-block */
  text-overflow: ellipsis;
  word-wrap: break-word;
  overflow: hidden;
  max-height: 3.6em;
  line-height: 1.8em;
}
<p class="max-lines">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc vitae leo dapibus, accumsan lorem eleifend, pharetra quam. Quisque vestibulum commodo justo, eleifend mollis enim blandit eu. Aenean hendrerit nisl et elit maximus finibus. Suspendisse scelerisque consectetur nisl mollis scelerisque.</p>

जहाँ max-height:= line-height:× <number-of-lines>में em


13
पाठ-अतिप्रवाह की तरह काम कर रहा है: क्लिप, जैसा कि नहीं दिखा रहा है (...)
ऋषिअगर

मेरे लिए भी सबसे अच्छा संभव समाधान लगता है, लेकिन जैसा कि @rishiAgar ने कहा कि दीर्घवृत्त के साथ समाप्त नहीं होता है। क्लिप की तरह काम करता रहता है।
डेविड कारिगन

मेरा मानना ​​है display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical;कि दीर्घवृत्त दिखने के लिए आपको विशेषताओं को जोड़ना होगा । लेकिन यह केवल क्रोम में काम करेगा। समाधान के लिए कि Firefox पर काम अच्छी तरह से, यहाँ देखो: stackoverflow.com/a/20595073/1884158 : और यहां इस विषय पर एक सहायक निर्देश है css-tricks.com/line-clampin
modulitos

34

काम क्रॉस-ब्राउज़र समाधान

यह समस्या वर्षों से हम सभी पर भारी पड़ रही है।

सभी मामलों में मदद करने के लिए, मैंने सीएसएस केवल दृष्टिकोण रखा है, और सीएसएस के मामले में एक jQuery दृष्टिकोण एक समस्या है।

यहाँ एक CSS ही है समाधान है जो मैं कुछ मामूली कैविटीज़ के साथ सभी परिस्थितियों में काम करता हूं।

मूल बातें सरल हैं, यह स्पैन के अतिप्रवाह को छुपाता है, और यूगुन एक्सए द्वारा सुझाए गए अनुसार लाइन की ऊंचाई के आधार पर अधिकतम ऊंचाई निर्धारित करता है।

तब युक्त डिव के बाद एक छद्म वर्ग होता है जो दीर्घवृत्त को अच्छी तरह से रखता है।

चेतावनियां

यह समाधान हमेशा इलिप्सिस को रखेगा, भले ही इसके लिए कोई आवश्यकता हो।

यदि अंतिम पंक्ति एक समाप्ति वाक्य के साथ समाप्त होती है, तो आप चार बिंदुओं के साथ समाप्त हो जाएंगे ...।

आपको उचित पाठ संरेखण के साथ खुश होने की आवश्यकता होगी।

दीर्घवृत्त पाठ के दाईं ओर होगा, जो टेढ़ा दिख सकता है।

कोड + स्निपेट

jsfiddle

.text {
  position: relative;
  font-size: 14px;
  color: black;
  width: 250px; /* Could be anything you like. */
}

.text-concat {
  position: relative;
  display: inline-block;
  word-wrap: break-word;
  overflow: hidden;
  max-height: 3.6em; /* (Number of lines you want visible) * (line-height) */
  line-height: 1.2em;
  text-align:justify;
}

.text.ellipsis::after {
  content: "...";
  position: absolute;
  right: -12px; 
  bottom: 4px;
}

/* Right and bottom for the psudo class are px based on various factors, font-size etc... Tweak for your own needs. */
<div class="text ellipsis">
  <span class="text-concat">
Lorem ipsum dolor sit amet, nibh eleifend cu his, porro fugit mandamus no mea. Sit tale facete voluptatum ea, ad sumo altera scripta per, eius ullum feugait id duo. At nominavi pericula persecuti ius, sea at sonet tincidunt, cu posse facilisis eos. Aliquid philosophia contentiones id eos, per cu atqui option disputationi, no vis nobis vidisse. Eu has mentitum conclusionemque, primis deterruisset est in.

Virtute feugait ei vim. Commune honestatis accommodare pri ex. Ut est civibus accusam, pro principes conceptam ei, et duo case veniam. Partiendo concludaturque at duo. Ei eirmod verear consequuntur pri. Esse malis facilisis ex vix, cu hinc suavitate scriptorem pri.
  </span>
</div>

jQuery के दृष्टिकोण

मेरी राय में यह सबसे अच्छा समाधान है, लेकिन हर कोई जेएस का उपयोग नहीं कर सकता है। मूल रूप से, jQuery किसी भी .text तत्व की जांच करेगा, और यदि प्रीसेट अधिकतम संस्करण की तुलना में अधिक वर्ण हैं, तो यह बाकी को काट देगा और एक दीर्घवृत्त जोड़ देगा।

इस दृष्टिकोण के लिए कोई चेतावनी नहीं है, हालांकि यह कोड उदाहरण केवल मूल विचार को प्रदर्शित करने के लिए है - मैं इसे दो कारणों से सुधार के बिना उत्पादन में उपयोग नहीं करूंगा:

1) यह .text के आंतरिक HTML को फिर से लिखेगा। जरूरत है या नहीं। 2) यह जांचने के लिए कोई परीक्षण नहीं करता है कि आंतरिक HTML में कोई नेस्टेड एलएमएस नहीं है - इसलिए आप सही ढंग से उपयोग करने के लिए लेखक पर बहुत भरोसा कर रहे हैं।

संपादित

@Markzzz को पकड़ने के लिए धन्यवाद

सांकेतिक टुकड़ा

jsfiddle

setTimeout(function()
{
	var max = 200;
  var tot, str;
  $('.text').each(function() {
  	str = String($(this).html());
  	tot = str.length;
    str = (tot <= max)
    	? str
      : str.substring(0,(max + 1))+"...";
    $(this).html(str);
  });
},500); // Delayed for example only.
.text {
  position: relative;
  font-size: 14px;
  color: black;
  font-family: sans-serif;
  width: 250px; /* Could be anything you like. */
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p class="text">
Old men tend to forget what thought was like in their youth; they forget the quickness of the mental jump, the daring of the youthful intuition, the agility of the fresh insight. They become accustomed to the more plodding varieties of reason, and because this is more than made up by the accumulation of experience, old men think themselves wiser than the young.
</p>

<p class="text">
Old men tend to forget what thought was like in their youth;
</p>
 <!-- Working Cross-browser Solution

This is a jQuery approach to limiting a body of text to n words, and end with an ellipsis -->


3
आपका सीएसएस समाधान इतना अच्छा नहीं है, इस मामले के बारे में क्या पता है कि पाठ अतिप्रवाह नहीं है? यह शो "..." भी है ...
user5260143

लेकिन अगर पाठ छोटा है तो jQuery संस्करण भी डॉट्स जोड़ता है: jsfiddle.net/o82opadm/35
markzzz

@markzzz - इसके लिए धन्यवाद, पता नहीं कैसे मैं इसे याद किया :-) मैंने इसे अब संशोधित किया है, लेकिन यह ऐसा कुछ नहीं है जो मैं उत्पादन में थोड़ा और काम किए बिना उपयोग करूंगा। लेकिन कम से कम मूल विचार तो रखा गया है।
asimovwasright

1
मैंने पाया कि सीएसएस-ओनली सॉल्यूशन अच्छी तरह से काम करता है, लेकिन केवल अगर आप केवल पिक्सेल माप का उपयोग करते हैं । ईएमएस और प्रतिशत ने मुझे परेशानी में डाल दिया। और मैंने दीर्घवृत्त को एक स्थिति के रूप में जोड़ दिया: स्थिति के लिए नीचे दाईं ओर निरपेक्ष, जो लिंक पर क्लिक करना चाहते हैं और अधिक पढ़ें। मेरे मामले में मुझे पता था कि पाठ हमेशा अतिप्रवाह होगा, इसलिए jQuery आवश्यक नहीं था। उपयोगी सीएसएस समाधान के लिए धन्यवाद!
मेंटलिस्ट

30

जहां तक ​​मैं देख सकता हूं, यह केवल उपयोग करना संभव होगा height: (some em value); overflow: hiddenऔर तब भी यह ...अंत में फैंसी नहीं होगा ।

यदि वह विकल्प नहीं है, तो मुझे लगता है कि कुछ सर्वर साइड प्री-प्रोसेसिंग के बिना यह असंभव है (मुश्किल है क्योंकि पाठ प्रवाह मज़बूती से भविष्यवाणी करना असंभव है) या jQuery (संभव है लेकिन शायद जटिल)।


16
यह किसी भी फॉन्ट-साइज़ .mytext {ओवरफ़्लो: हिडन के लिए काम करता है; लाइन-ऊंचाई: 1.2em; अधिकतम ऊंचाई: 2.4em; }
पीटर

1
@Proro हाँ। आप .mytextjQuery का उपयोग करके प्रत्येक के माध्यम से चलाने में सक्षम हो सकते हैं , यह पता लगा सकते हैं कि क्या इसकी तुलना में अधिक सामग्री दिखाई दे रही है, और ...मैन्युअल रूप से जोड़ें । इस तरह, आप बिना JS वाले क्लाइंट्स के अनुकूल हैं, और JS वाले क्लाइंट्स के पास सजावट हो सकती है। शायद जवाब देने के लिए एक jQuery गुरु के लिए एक अलग सवाल के लायक; अपेक्षाकृत आसानी से करना संभव हो सकता है
Pekka

15

इस थ्रेड से समाधान jquery प्लगइन dotdotdot का उपयोग करना है । सीएसएस समाधान नहीं, लेकिन यह आपको "अधिक पढ़ें" लिंक, डायनामिक आकार बदलने आदि के लिए बहुत सारे विकल्प देता है।


10

निम्नलिखित सीएसएस वर्ग ने मुझे दो पंक्ति दीर्घवृत्त प्राप्त करने में मदद की।

  .two-line-ellipsis {
        padding-left:2vw;
        text-overflow: ellipsis;
        overflow: hidden;
        width: 325px;
        line-height: 25px;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
        padding-top: 15px;
    }

5

वर्तमान में आप नहीं कर सकते हैं, लेकिन भविष्य में आप उपयोग करने में सक्षम होंगे text-overflow:ellipis-lastline। वर्तमान में यह Opera 10.60+: उदाहरण में विक्रेता उपसर्ग के साथ उपलब्ध है


5
यह मल्टीलाइन स्ट्रिंग्स के लिए काम नहीं करता है, क्योंकि इसके लिए सफेद-स्कैस को सेट करना भी आवश्यक है: नॉरैप। देखें यहाँ
सेबेस्टियन नैक

4

मेरे पास एक समाधान है जो अच्छी तरह से काम करता है लेकिन एक दीर्घवृत्त के बजाय यह एक ढाल का उपयोग करता है। यह तब काम करता है जब आपके पास डायनामिक टेक्स्ट होता है इसलिए आपको नहीं पता होता है कि दीर्घवृत्त की आवश्यकता है या नहीं। लाभ यह है कि आपको कोई जावास्क्रिप्ट गणना करने की आवश्यकता नहीं है और यह तालिका कोशिकाओं सहित चर चौड़ाई कंटेनरों के लिए काम करता है और क्रॉस-ब्राउज़र है। यह अतिरिक्त divs के एक जोड़े का उपयोग करता है, लेकिन इसे लागू करना बहुत आसान है।

मार्कअप:

<td>
    <div class="fade-container" title="content goes here">
         content goes here
         <div class="fade">
    </div>
</td>

सीएसएस:

.fade-container { /*two lines*/
    overflow: hidden;
    position: relative;
    line-height: 18px; 
    /* height must be a multiple of line-height for how many rows you want to show (height = line-height x rows) */
    height: 36px;
    -ms-hyphens: auto;
    -webkit-hyphens: auto;
    hyphens: auto;
    word-wrap: break-word;
}

.fade {
        position: absolute;
        top: 50%;/* only cover the last line. If this wrapped to 3 lines it would be 33% or the height of one line */
        right: 0;
        bottom: 0;
        width: 26px;
        background: linear-gradient(to right,  rgba(255,255,255,0) 0%,rgba(255,255,255,1) 100%);
}

ब्लॉग पोस्ट: http://salzerdesign.com/blog/?p=453

उदाहरण पृष्ठ: http://salzerdesign.com/test/fade.html


3
.class{
   word-break: break-word;
   overflow: hidden;
   text-overflow: ellipsis;
   display: -webkit-box;
   line-height: 16px; /* fallback */
   max-height: 32px; /* fallback */
   -webkit-line-clamp: 2; /* number of lines to show */
   -webkit-box-orient: vertical;
}

0

मैं वास्तव में लाइन-क्लैंप पसंद करता हूं, लेकिन अभी तक फ़ायरफ़ॉक्स के लिए कोई समर्थन नहीं है .. इसलिए मैं एक गणित कैल्क के साथ जाता हूं और बस अतिप्रवाह छिपाता हूं

.body-content.body-overflow-hidden h5 {
    max-height: 62px;/* font-size * line-height * lines-to-show(4 in this case) 63px if you go with jquery */
    overflow: hidden;
}
.body-content h5 {
    font-size: 14px; /* need to know this*/
    line-height:1,1; /*and this*/
}

अब आपको यह बताने देता है कि आप लिंक के साथ jQuery के माध्यम से इस वर्ग को निकालना और जोड़ना चाहते हैं, आपको एक अतिरिक्त पिक्सेल की आवश्यकता होगी, ताकि अधिकतम ऊंचाई 63 px हो जाएगी, ऐसा इसलिए है क्योंकि आपको हर बार जाँचने की आवश्यकता है कि क्या ऊँचाई ग्रीर से 62px, लेकिन 4 लाइनों के मामले में आपको एक गलत सच मिलेगा, इसलिए एक अतिरिक्त पिक्सेल इसे ठीक कर देगा और यह कोई समस्या पैदा नहीं करेगा

मैं इसके लिए सिर्फ एक उदाहरण के लिए एक कॉफ़ीस्क्रिप्ट पेस्ट करूंगा, एक-दो लिंक का उपयोग करता है जो डिफ़ॉल्ट रूप से छिपे हुए हैं, कक्षाओं के साथ पठन-अधिक और पढ़ने-कम करने के लिए, यह उन लोगों को हटा देगा जो अतिप्रवाह की आवश्यकता नहीं है और शरीर को हटा दें -प्रवाह कक्षाएं

jQuery ->

    $('.read-more').each ->
        if $(this).parent().find("h5").height() < 63
             $(this).parent().removeClass("body-overflow-hidden").find(".read-less").remove()
             $(this).remove()
        else
            $(this).show()

    $('.read-more').click (event) ->
        event.preventDefault()
        $(this).parent().removeClass("body-overflow-hidden")
        $(this).hide()
        $(this).parent().find('.read-less').show()

    $('.read-less').click (event) ->
        event.preventDefault()
        $(this).parent().addClass("body-overflow-hidden")
        $(this).hide()
        $(this).parent().find('.read-more').show()

वैसे, इसमें लाइन-क्लैंप न जोड़ें, यह 62px (इस मामले के लिए) की ऊँचाई निर्धारित करेगा और आपके पास jquery संकलन नहीं होगा
एलेक्सिस

0

यदि आप प्रत्येक पर ध्यान केंद्रित करना चाहते letterहैं तो आप ऐसा कर सकते हैं, मैं इस प्रश्न का संदर्भ देता हूं

यदि आप प्रत्येक पर ध्यान केंद्रित करना चाहते हैं तो आप wordउस स्थान को पसंद कर सकते हैं

यदि आप प्रत्येक पर ध्यान केंद्रित करना चाहते हैं, तो आप wordअंतरिक्ष के बिना उस तरह से कर सकते हैं


-1

बेसिक उदाहरण कोड, कोड सीखना आसान है। स्टाइल सीएसएस टिप्पणियों की जाँच करें।

table tr {
  display: flex;
}
table tr td {
  /* start */
  display: inline-block; /* <- Prevent <tr> in a display css */
  text-overflow: ellipsis;
  white-space: nowrap;
  /* end */
  padding: 10px;
  width: 150px; /* Space size limit */
  border: 1px solid black;
  overflow: hidden;
}
<table>
  <tbody>
    <tr>
      <td>
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla egestas erat ut luctus posuere. Praesent et commodo eros. Vestibulum eu nisl vel dui ultrices ultricies vel in tellus.
      </td>
      <td>
        Praesent vitae tempus nulla. Donec vel porta velit. Fusce mattis enim ex. Mauris eu malesuada ante. Aenean id aliquet leo, nec ultricies tortor. Curabitur non mollis elit. Morbi euismod ante sit amet iaculis pharetra. Mauris id ultricies urna. Cras ut
        nisi dolor. Curabitur tellus erat, condimentum ac enim non, varius tempor nisi. Donec dapibus justo odio, sed consequat eros feugiat feugiat.
      </td>
      <td>
        Pellentesque mattis consequat ipsum sed sagittis. Pellentesque consectetur vestibulum odio, aliquet auctor ex elementum sed. Suspendisse porta massa nisl, quis molestie libero auctor varius. Ut erat nibh, fringilla sed ligula ut, iaculis interdum sapien.
        Ut dictum massa mi, sit amet interdum mi bibendum nec.
      </td>
    </tr>
    <tr>
      <td>
        Sed viverra massa laoreet urna dictum, et fringilla dui molestie. Duis porta, ligula ut venenatis pretium, sapien tellus blandit felis, non lobortis orci erat sed justo. Vivamus hendrerit, quam at iaculis vehicula, nibh nisi fermentum augue, at sagittis
        nibh dui et erat.
      </td>
      <td>
        Nullam mollis nulla justo, nec tincidunt urna suscipit non. Donec malesuada dolor non dolor interdum, id ultrices neque egestas. Integer ac ante sed magna gravida dapibus sit amet eu diam. Etiam dignissim est sit amet libero dapibus, in consequat est
        aliquet.
      </td>
      <td>
        Vestibulum mollis, dui eu eleifend tincidunt, erat eros tempor nibh, non finibus quam ante nec felis. Fusce egestas, orci in volutpat imperdiet, risus velit convallis sapien, sodales lobortis risus lectus id leo. Nunc vel diam vel nunc congue finibus.
        Vestibulum turpis tortor, pharetra sed ipsum eu, tincidunt imperdiet lorem. Donec rutrum purus at tincidunt sagittis. Quisque nec hendrerit justo.
      </td>
    </tr>
  </tbody>
</table>


4
ओपी कई लाइन समाधान की तलाश में है। यह केवल पाठ की एकल पंक्तियों पर काम करता है।
asimovwasright

-11

मैं इस के लिए चारों ओर देख रहा था, लेकिन फिर मुझे एहसास हुआ, धिक्कार है कि मेरी वेबसाइट php का उपयोग करती है !!! टेक्स्ट इनपुट पर ट्रिम फ़ंक्शन का उपयोग क्यों न करें और अधिकतम लंबाई के साथ खेलें ...।

यहाँ php का उपयोग करने वालों के लिए एक संभावित समाधान भी है: http://ideone.com/PsTaI

<?php
$s = "In the beginning there was a tree.";
$max_length = 10;

if (strlen($s) > $max_length)
{
   $offset = ($max_length - 3) - strlen($s);
   $s = substr($s, 0, strrpos($s, ' ', $offset)) . '...';
}

echo $s;
?>

18
आप सर्वर-साइड प्रसंस्करण का सुरक्षित रूप से उपयोग नहीं कर सकते क्योंकि आप पहले से नहीं जान सकते कि पाठ पृष्ठ में कितना स्थान लेगा। यह फ़ॉन्ट आकार, ब्राउज़र पाठ आकार सेटिंग्स, ब्राउज़र ज़ूम स्तर, आदि पर निर्भर करता है
ermannob
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.