CSSで長い文字列を切り捨てる:まだ実現可能ですか?
-
03-07-2019 - |
質問
プレーンHTMLおよびCSSでテキストを切り捨てて、動的コンテンツが固定幅および高さのレイアウトに収まるようにする方法はありますか?
サーバー側を logical 幅(つまり、盲目的に推測された文字数)で切り捨てましたが、「w」は「i」よりも幅が広いため、これは最適ではない傾向があります、また、固定幅ごとに文字数を再推測(および微調整)する必要があります。理想的には、ブラウザーで切り捨てが行われ、レンダリングされたテキストの物理幅が認識されます。
IEには text-overflow:ellipsis
プロパティがあり、これはまさに私が望んでいることですが、これはクロスブラウザである必要があります。このプロパティは(やや?)標準のようですがですが、Firefoxではサポートされていません。 さまざまな 回避策 overflow:非表示
、ただし、省略記号を表示しないか(コンテンツが切り捨てられたことをユーザーに知らせたい)、または常に表示します(コンテンツが切り捨てられなかった場合でも)。
動的テキストを固定レイアウトに収める良い方法はありますか、それとも論理幅によるサーバー側の切り捨ては今のところ得られるのと同じくらい良いですか?
解決
更新: text-overflow:ellipsis
は、Firefox 7(2011年9月27日リリース)の時点でサポートされるようになりました。わーい!私の元の答えは歴史的記録として続きます。
Justin MaxwellにはクロスブラウザCSSソリューションがあります。ただし、Firefoxでテキストを選択できないという欠点があります。詳細については、 Matt Sniderのブログのゲスト投稿をご覧ください。これの仕組み。
この手法では、Firefoxの innerHTML
プロパティを使用してJavaScriptのノードのコンテンツを更新することもできません。回避策については、この投稿の最後を参照してください。
CSS
.ellipsis {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
-o-text-overflow: ellipsis;
-moz-binding: url('assets/xml/ellipsis.xml#ellipsis');
}
ellipsis.xml
ファイルの内容
<?xml version="1.0"?>
<bindings
xmlns="http://www.mozilla.org/xbl"
xmlns:xbl="http://www.mozilla.org/xbl"
xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
>
<binding id="ellipsis">
<content>
<xul:window>
<xul:description crop="end" xbl:inherits="value=xbl:text"><children/></xul:description>
</xul:window>
</content>
</binding>
</bindings>
ノードコンテンツの更新
Firefoxで機能する方法でノードのコンテンツを更新するには、次を使用します。
var replaceEllipsis(node, content) {
node.innerHTML = content;
// use your favorite framework to detect the gecko browser
if (YAHOO.env.ua.gecko) {
var pnode = node.parentNode,
newNode = node.cloneNode(true);
pnode.replaceChild(newNode, node);
}
};
この仕組みの説明については、 Matt Sniderの投稿を参照してください。 。
他のヒント
2014年3月:CSSを使用した長い文字列の切り詰め:ブラウザサポートに焦点を当てた新しい回答
<style type="text/css">
span {
display: inline-block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis; /** IE6+, Firefox 7+, Opera 11+, Chrome, Safari **/
-o-text-overflow: ellipsis; /** Opera 9 & 10 **/
width: 370px; /* note that this width will have to be smaller to see the effect */
}
</style>
<span>Some very long text that should be cut off at some point coz it's a bit too long and the text overflow ellipsis feature is used</span>
-ms-text-overflow CSSプロパティは必要ありません。これはtext-overflow CSSプロパティの同義語ですが、6〜11のIEのバージョンは既にtext-overflow CSSプロパティをサポートしています。
Windows OS、Webブラウザー用に(Browserstack.comで)正常にテストされました:
- IE6からIE11
- Opera 10.6、Opera 11.1、Opera 15.0、Opera 20.0
- Chrome 14、Chrome 20、Chrome 25
- Safari 4.0、Safari 5.0、Safari 5.1
- Firefox 7.0、Firefox 15
Firefox:Simon Lieschkeが指摘したように(別の回答で)、FirefoxはFirefox 7以降のテキストオーバーフローCSSプロパティのみをサポートしています(2011年9月27日リリース)。
Firefox 3.0でこの動作を再確認しました&amp; Firefox 6.0(テキストオーバーフローはサポートされていません)。
Mac OS Webブラウザーでさらにテストする必要があります。
注:省略記号が適用されている場合、マウスホバーにツールチップを表示したい場合があります。これはjavascriptを使用して実行できます。次の質問を参照してください: HTML text-overflow ellipsis detection および HTML-省略記号がアクティブな場合にのみツールチップを表示するにはどうすればよいですか
リソース:
- https://developer.mozilla.org/ en-US / docs / Web / CSS / text-overflow#Browser_compatibility
- http://css-tricks.com/snippets/css / truncate-string-with-ellipsis /
- https://stackoverflow.com/a/1101702/759452
- http://www.browsersupport.net/CSS/text-overflow
- http://caniuse.com/text-overflow
- http://msdn.microsoft .com / en-us / library / ie / ms531174(v = vs.85).aspx
- http:// hacks .mozilla.org / 2011/09 / whats-new-for-web-developers-in-firefox-7 /
JavaScriptソリューションに問題がなければ、クロスブラウザー形式でこれを行うjQueryプラグインがあります- http://azgtech.wordpress.com/2009/07/26/text-overflow-ellipsis-for-firefox-via -jquery /
OK、Firefox 7は text-overflow:ellipsis
と text-overflow:&quot; string&quot;
を実装しました。最終リリースは2011-09-27に予定されています。
この問題の別の解決策は、次のCSSルールのセットです。
.ellipsis{
white-space:nowrap;
overflow:hidden;
}
.ellipsis:after{
content:'...';
}
上記のCSSの唯一の欠点は、「...」を追加することです。テキストがコンテナをオーバーフローするかどうかに関係なく。それでも、多数の要素があり、コンテンツがオーバーフローすることが確実な場合は、これがより単純なルールのセットになります。
私の2セント。ジャスティン・マックスウェルによるオリジナルのテクニックに敬意を払います
参照用に、「バグ」へのリンクを次に示します。 text-overflow:Firefoxでのellipsisサポートを追跡します。 Firefoxのようなサウンドは、ネイティブCSSソリューションをサポートしていない唯一の主要なブラウザです。