2行目のcss省略記号


208

text-overflow: ellipsis2行目のCSS 、これは可能ですか?ネットでは見つかりません。

例:

私が欲しいのはこのようなものです:

I hope someone could help me. I need 
an ellipsis on the second line of...

しかし、何が起こっているのですか?

I hope someone could help me. I ... 

3
AFAIK省略記号が表示され、要素の幅の端でテキストが切り取られます。次の行には流れません。ここでの最善の解決策は、テキストを特定の文字数に自動的にトリミングしてから省略記号を追加するサーバー側またはクライアント側のスクリプトを実装することです。私の推測では、クライアント側のスクリプトの方が優れていると思います。これにより、必要に応じて元のテキストをすべて利用できるようになります。
FarligOpptreden、2011年

ここでの同様の質問です: stackoverflow.com/questions/3922739/...
エフゲニー

tl; dr:webkitでのみ可能
Evgeny

私がこれを達成するために最も近づいたのは、省略記号の「後」の疑似要素を追加し、テキストを含む要素の直後にインラインで配置することでした。しかし、要素のテキストが長すぎると省略記号が消えるので、これを信頼できるものにするためには、テキストを何らかの方法でトリミングする必要があります。
ジョナサン

回答:


105

要件text-overflow: ellipsis;の作業には、1行のバージョンであるwhite-spaceprenowrapなど)。つまり、テキストが2行目に到達することはありません。

エルゴ。純粋なCSSでは不可能です。

ちょうど今まさに同じものを探していたときの私のソース:http ://www.quirksmode.org/css/textoverflow.html(Quirksmode ftw!)

編集良いCSSの神々がhttp://www.w3.org/TR/css-overflow-3/#max-linesを実装する場合、これを純粋なCSSでfragments(新規)およびmax-lines(新規)を使用して実装できます。また、http://css-tricks.com/line-clampin/に関するいくつかの詳細情報

EDIT 2 WebKit / Blink has line-clamp-webkit-line-clamp: 22行目に省略記号を置きます。


9
監視を続けるが、これまでのところ神々はまだ私たちのところにいないようです:caniuse.com/#search=max-lines
Daniel

1
上記の機能をsaasで実現するにはどうすればよいですか?@Rudie
Bhoomi Bhalani

144

これはwebkitブラウザで動作するはずです:

overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;

1
このコメントの時点では、-webkit-line-clampは可視性を考慮していないことに注意してください。bugs.webkit.org/show_bug.cgi?id=45399
Kevin

1
こんにちは-いいようですが、私にはうまくいきません。それは単に与えられた行クランプで '...'を置くだけですが(余白のattrがあっても)テキストの残りをカットし
ません

3
overflow: hiddenこれを機能させるには、追加が必要になる場合があります。
Robert

これはFirefoxでは機能しません、webkitはgeckoエンジンでサポートされていません
ZetaPR

これは受け入れられる答えになるはずです。テキストの残りの部分をのぞくことができるので、これを適用する要素の下部のパディングも必要ありません。
Tr1stan

34

他の人がすでに答えているように、純粋なCSSソリューションは存在しません。あるjQueryのは非常に使いやすいですプラグインは、それが呼び出され、dotdotdot。コンテナーの幅と高さを使用して、省略記号を省略して追加する必要があるかどうかを計算します。

$("#multilinedElement").dotdotdot();

ここにjsFiddleがあります。


このプラグインは、「もっと読む」リンクの追加など、他の多くのユーティリティも提供し、URIやHTMLマークアップを解析することもできます。良い発見!
マーティンアンダーソン

2
グリッドカテゴリページの製品名を2行に制限するために、eコマースストアのjQuery dotdotdot 1.7.3を試してみました。十分なテストを行った後、シフトリフレッシュ後にカテゴリページのレイアウトが壊れることがあるため、このプラグインを使用しないことにしました。YMMV。最後に、非常に単純なJSソリューションを使用しました。製品名要素のclientHeightがscrollHeightより小さい場合は、事前設定された境界でテキストを切り詰め、「...」を追加します。いくつかの製品名は、事前設定された境界のために少し短すぎる場合がありますが、非常に安定しています。
thdoan

1
Eastyは実装して美しく動作します。ありがとうございました!
Rachel S

正常に動作しますが、残念ながらパフォーマンスの問題があります。プロジェクトで複数の省略記号を使用する必要がある場合は、別のオプションを検討してください。さらに、リポジトリからの引用は次のとおりです。「そのパフォーマンスを向上させることができないため、このプラグインはもはや積極的に維持されていません。」
boyomarinov 2016

1
また、ロード後にテキストが動的に変更されても機能しません:(
Dejell

34

Skeepの答えは十分ではなく、overflowスタイルも必要であることがわかりました。

overflow: hidden;
text-overflow: ellipsis;
-webkit-line-clamp: 2;
display: -webkit-box;
-webkit-box-orient: vertical;

18

誰かがSASS / SCSSを使用していて、この質問に遭遇した場合-多分このミックスインが役立つかもしれません:

@mixin line-clamp($numLines : 1, $lineHeight: 1.412) {
  overflow: hidden;
  text-overflow: -o-ellipsis-lastline;
  text-overflow: ellipsis;
  display: block;
  /* autoprefixer: off */
  display: -webkit-box;
  -webkit-line-clamp: $numLines;
  -webkit-box-orient: vertical;
  max-height: $numLines * $lineHeight + unquote('em');
}

これは、Webkitブラウザーに省略記号を追加するだけです。残りはそれを切り捨てるだけです。


1
LESSを使用して、私は変更しなければならなかった/* autoprefixer: off */ために/*! autoprefixer: off */それ以外の場合は-webkit-box-orient: vertical;省略記号が現れなかったことを意味するコンパイル後に取り出しなった
ネイサン

18

それをサポートするブラウザ(ほとんどの最新のブラウザ)でラインクランプを使用し、古いものでは1行にフォールバックします。

  .text {
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;


    @supports (-webkit-line-clamp: 2) {
      overflow: hidden;
      text-overflow: ellipsis;
      white-space: initial;
      display: -webkit-box;
      -webkit-line-clamp: 2;
      -webkit-box-orient: vertical;
    }
  }

1
空白:初期; 私を救った
James

10

2行に渡って機能させることができないのは残念です。要素が表示ブロックで、高さが2em程度に設定されていて、テキストがオーバーフローすると省略記号が表示されると、すばらしいでしょう。

シングルライナーの場合は、次のものを使用できます。

.show-ellipsis {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

複数行の場合は、github http://pvdspek.github.com/jquery.autoellipsis/にあるjQuery autoellipsisなどのポリフィルを使用できます。


そのプラグインは、それが何をするのかには重すぎる。5歳です。むしろdotdotdot別の投稿で言及された使用。
adi518

10

私はJSプロではありませんが、これを行う方法をいくつか見つけました。

HTML:

<p id="truncate">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi elementum consequat tortor et euismod. Nam commodo consequat libero vel lobortis. Morbi ac nisi at leo vehicula consectetur.</p>

次に、jQueryを使用して、特定の文字数に切り捨てますが、最後の単語は次のようにします。

// Truncate but leave last word
var myTag = $('#truncate').text();
if (myTag.length > 100) {
  var truncated = myTag.trim().substring(0, 100).split(" ").slice(0, -1).join(" ") + "…";
  $('#truncate').text(truncated);
}

結果は次のようになります。

ロレム・イプサム・ドーラーはアメット座位で、僧侶は外交的エリートです。Morbi
elementum consequat tortorら...

または、次のように特定の文字数に切り捨てることもできます。

// Truncate to specific character
var myTag = $('#truncate').text();
if (myTag.length > 15) {
  var truncated = myTag.trim().substring(0, 100) + "…";
  $('#truncate').text(truncated);
}

結果は次のようになります。

ロレム・イプサム・ドーラーはアメット座位で、僧侶は外交的エリートです。Morbi
elementum consequat tortorらeuismod ...

少しお役に立てば幸いです。

これがjsFiddleです。


7

これが純粋なCSSの良いです。

.container{
  width: 200px;
}
.block-with-text {
  overflow: hidden;
  position: relative; 
  line-height: 1.2em;
  max-height: 3.6em;
  text-align: justify;  
  margin-right: -1em;
  padding-right: 1em;
}
.block-with-text+.block-with-text{
  margin-top:10px;
}
.block-with-text:before {
  content: '...';
  position: absolute;
  right: 0;
  bottom: 0;
}
.block-with-text:after {
  content: '';
  position: absolute;
  right: 0;
  width: 1em;
  height: 1em;
  margin-top: 0.2em;
  background: white;
}
<div class="container">


<div class="block-with-text">
Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a
</div>

<div class="block-with-text">
Lorem Ipsum is simply dummy text of the printing and typesetting industry
</div>


<div class="block-with-text">
Lorem Ipsum is simply
</div>

</div>


2行目が短すぎて切り捨てられない場合でも、テキストを切り捨てるだけでかなり良い解決策ですが、それでもいいのです
Amin

6

私は以前jQuery-condense-pluginを使用しましたが、それはあなたが望むことを行うことができるようです。そうでない場合は、ニーズに合う可能性のあるさまざまなプラグインがあります。

編集:デモを作成しました - マジックを実行するデモにjquery.condense.jsをリンクしたことに注意してください。そのプラグインの作者に完全なクレジットを提供します:)


4

これは非標準のCSSであり、CSSの現在のバージョンではカバーされていません(Firefoxはサポートしていません)。代わりにJavaScriptを使用してください。


4

省略記号を使用して複数行テキストをトリムする純粋なCSSの方法

テキストコンテナの高さ、制御線を調整して、-webkit-line-clamp:2で分割します。

.block-ellipsis {
  display: block;
  display: -webkit-box;
  max-width: 100%;
  height: 30px;
  margin: 0 auto;
  font-size: 14px;
  line-height: 1;
  -webkit-line-clamp: 2;
  -webkit-box-orient: vertical;
  overflow: hidden;
  text-overflow: ellipsis;
}

3

私は以前この問題に会ったことがあり、純粋なcssソリューションはありません

それが私がこの問題に対処するために小さなライブラリを開発した理由です(とりわけ)。ライブラリは、文字レベルのテキストレンダリングをモデル化して実行するためのオブジェクトを提供します。たとえば、テキストオーバーフローをエミュレートできます:任意の制限のある省略記号(1行である必要はありません)

スクリーンショット、チュートリアル、ダウンロードリンクについては、http://www.samuelrossille.com/home/jstext.htmlご覧ください


3

誰かがflex-boxラインクランプを機能させようとしている場合、特に本当に長い単語で拷問テストを行っている場合は、少しトリッキーです。このコードスニペットの唯一の実際の違いはmin-width: 0;、切り捨てられたテキストを含むflexアイテムとword-wrap: break-word;です。洞察を得るためのhttps://css-tricks.com/flexbox-truncated-text/へのハットチップ。免責事項:私が知る限り、これはまだWebkitです。

.flex-parent {
  display: flex;
}

.short-and-fixed {
  width: 30px;
  height: 30px;
  background: lightgreen;
}

.long-and-truncated {
  margin: 0 20px;
  flex: 1;
  min-width: 0;/* Important for long words! */
}

.long-and-truncated span {
  display: inline;
  -webkit-line-clamp: 3;
  text-overflow: ellipsis;
  overflow: hidden;
  display: -webkit-box;
  -webkit-box-orient: vertical;
  word-wrap: break-word;/* Important for long words! */
}
<div class="flex-parent">
  <div class="flex-child short-and-fixed">
  </div>
  <div class="flex-child long-and-truncated">
    <span>asdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasdasd</span>
  </div>
  <div class="flex-child short-and-fixed">
  </div>
</div>

http://codepen.io/AlgeoMA/pen/JNvJdx(codepenバージョン)


1

ここでのすべての答えは間違っています、彼らは重要な部分、高さを欠いています

.container{
    width:200px;
    height:600px;
    background:red
}
.title {
        overflow: hidden;
        line-height: 20px;
        height: 40px;
        text-overflow: ellipsis;
        display: -webkit-box;
        -webkit-line-clamp: 2;
        -webkit-box-orient: vertical;
    }
<div class="container">
    <div class="title">this is a long text you cant cut it in half</div>
</div>

0

-webkit-line-clampに基づいた純粋なcssメソッド。webkitで機能します。

@-webkit-keyframes ellipsis {/*for test*/
    0% { width: 622px }
    50% { width: 311px }
    100% { width: 622px }
}
.ellipsis {
    max-height: 40px;/* h*n */
    overflow: hidden;
    background: #eee;

    -webkit-animation: ellipsis ease 5s infinite;/*for test*/
    /**
    overflow: visible;
    /**/
}
.ellipsis .content {
    position: relative;
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-box-pack: center;
    font-size: 50px;/* w */
    line-height: 20px;/* line-height h */
    color: transparent;
    -webkit-line-clamp: 2;/* max row number n */
    vertical-align: top;
}
.ellipsis .text {
    display: inline;
    vertical-align: top;
    font-size: 14px;
    color: #000;
}
.ellipsis .overlay {
    position: absolute;
    top: 0;
    left: 50%;
    width: 100%;
    height: 100%;
    overflow: hidden;

    /**
    overflow: visible;
    left: 0;
    background: rgba(0,0,0,.5);
    /**/
}
.ellipsis .overlay:before {
    content: "";
    display: block;
    float: left;
    width: 50%;
    height: 100%;

    /**
    background: lightgreen;
    /**/
}
.ellipsis .placeholder {
    float: left;
    width: 50%;
    height: 40px;/* h*n */

    /**
    background: lightblue;
    /**/
}
.ellipsis .more {
    position: relative;
    top: -20px;/* -h */
    left: -50px;/* -w */
    float: left;
    color: #000;
    width: 50px;/* width of the .more w */
    height: 20px;/* h */
    font-size: 14px;

    /**
    top: 0;
    left: 0;
    background: orange;
    /**/
}
<div class='ellipsis'>
    <div class='content'>
        <div class='text'>text text text text text text text text text text text text text text text text text text text text text </div>
        <div class='overlay'>
            <div class='placeholder'></div>
            <div class='more'>...more</div>
        </div>
    </div>
</div>


-1

これを行う簡単な方法はありません。Clamp.jsライブラリを使用します。

$clamp(myHeader, {clamp: 3});

-6

私は解決策を見つけましたが、テキスト領域に収まる大まかな文字長を知ってから、...を前のスペースに結合する必要があります。

私がこれをした方法は:

  1. おおよその文字長(この場合は200)を想定し、テキストとともに関数に渡します
  2. スペースを分割して、1つの長い文字列にする
  3. jQueryを使用して、文字長の後の最初の ""スペースをスライスします。
  4. 残りに参加する...

コード:

truncate = function(description){
        return description.split('').slice(0, description.lastIndexOf(" ",200)).join('') + "...";           
}

ここにフィドルがあります-http ://jsfiddle.net/GYsW6/1/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.