text-overflow: ellipsis
2行目のCSS 、これは可能ですか?ネットでは見つかりません。
例:
私が欲しいのはこのようなものです:
I hope someone could help me. I need
an ellipsis on the second line of...
しかし、何が起こっているのですか?
I hope someone could help me. I ...
text-overflow: ellipsis
2行目のCSS 、これは可能ですか?ネットでは見つかりません。
例:
私が欲しいのはこのようなものです:
I hope someone could help me. I need
an ellipsis on the second line of...
しかし、何が起こっているのですか?
I hope someone could help me. I ...
回答:
要件text-overflow: ellipsis;
の作業には、1行のバージョンであるwhite-space
(pre
、nowrap
など)。つまり、テキストが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: 2
2行目に省略記号を置きます。
これはwebkitブラウザで動作するはずです:
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
overflow: hidden
これを機能させるには、追加が必要になる場合があります。
他の人がすでに答えているように、純粋なCSSソリューションは存在しません。あるjQueryのは非常に使いやすいですプラグインは、それが呼び出され、dotdotdot。コンテナーの幅と高さを使用して、省略記号を省略して追加する必要があるかどうかを計算します。
$("#multilinedElement").dotdotdot();
ここにjsFiddleがあります。
誰かが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ブラウザーに省略記号を追加するだけです。残りはそれを切り捨てるだけです。
/* autoprefixer: off */
ために/*! autoprefixer: off */
それ以外の場合は-webkit-box-orient: vertical;
省略記号が現れなかったことを意味するコンパイル後に取り出しなった
それをサポートするブラウザ(ほとんどの最新のブラウザ)でラインクランプを使用し、古いものでは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;
}
}
2行に渡って機能させることができないのは残念です。要素が表示ブロックで、高さが2em程度に設定されていて、テキストがオーバーフローすると省略記号が表示されると、すばらしいでしょう。
シングルライナーの場合は、次のものを使用できます。
.show-ellipsis {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
複数行の場合は、github http://pvdspek.github.com/jquery.autoellipsis/にあるjQuery autoellipsisなどのポリフィルを使用できます。
dotdotdot
別の投稿で言及された使用。
私は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です。
.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>
私は以前jQuery-condense-pluginを使用しましたが、それはあなたが望むことを行うことができるようです。そうでない場合は、ニーズに合う可能性のあるさまざまなプラグインがあります。
編集:デモを作成しました - マジックを実行するデモにjquery.condense.jsをリンクしたことに注意してください。そのプラグインの作者に完全なクレジットを提供します:)
省略記号を使用して複数行テキストをトリムする純粋な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;
}
私は以前この問題に会ったことがあり、純粋なcssソリューションはありません
それが私がこの問題に対処するために小さなライブラリを開発した理由です(とりわけ)。ライブラリは、文字レベルのテキストレンダリングをモデル化して実行するためのオブジェクトを提供します。たとえば、テキストオーバーフローをエミュレートできます:任意の制限のある省略記号(1行である必要はありません)
スクリーンショット、チュートリアル、ダウンロードリンクについては、http://www.samuelrossille.com/home/jstext.htmlをご覧ください。
誰かが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>
ここでのすべての答えは間違っています、彼らは重要な部分、高さを欠いています
.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>
-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>
これを行う簡単な方法はありません。Clamp.jsライブラリを使用します。
$clamp(myHeader, {clamp: 3});
私は解決策を見つけましたが、テキスト領域に収まる大まかな文字長を知ってから、...を前のスペースに結合する必要があります。
私がこれをした方法は:
コード:
truncate = function(description){
return description.split('').slice(0, description.lastIndexOf(" ",200)).join('') + "...";
}
ここにフィドルがあります-http ://jsfiddle.net/GYsW6/1/