商品のタイトルが書かれた商品リストがあります。商品タイトルが2行を超えていないか確認したいのですが、その場合は2行に収まるように印刷し、最後に「…」をつけてください。
何か案は?
商品のタイトルが書かれた商品リストがあります。商品タイトルが2行を超えていないか確認したいのですが、その場合は2行に収まるように印刷し、最後に「…」をつけてください。
何か案は?
発生する可能性のある問題の1つは、バージョンやオペレーティングシステムが異なっていても、フォントのレンダリングがブラウザごとに異なる可能性があることです。したがって、テキストの長さ/高さを事前に計算することになると、それほど簡単ではありません。あなたはこのようなことをすることができます:
__
これは、プレーンテキストがある場合にのみ機能します。タイトル内にタグがある場合、このようなものがHTML構造を完全に台無しにする可能性があります。これにより、「<span>」タグが開かれ、閉じられないことを想像してみてください…:)
正規表現/単語ファインダーも、「単語で区切られた」などを切り取るのに非常に優れている必要があります。
これが非常に良いアプローチであるかどうかはわかりませんが、jQueryでは4〜5行のようなものになるため、少し役立つかもしれません。
私は最終的に次のようなことをしました:
<p id="titleContainer">blabla bla bla blablabla bla blabla bla bla blablabla bla blabla bla bla blablabla bla</p>
<script type="text/javascript">
function checkOverflow(el){
var curOverflow = el.style.overflow;
if ( !curOverflow || curOverflow === "visible" ){
el.style.overflow = "hidden";
}
// 26 pixels was the height of 2 lines
var isOverflowing = el.scrollHeight > 26;
el.style.overflow = curOverflow;
return isOverflowing;
}
var titleContainer = document.getElementById("titleContainer");
var titleTxt = titleContainer.innerHTML + "...";
while(checkOverflow(titleContainer)){
titleTxt = titleTxt.replace(/ [^ ]+\.\.\.$/, "...");
titleContainer.innerHTML = titleTxt;
}
</script>
@cpilkoが言ったように…固定サイズのフォントでなければ…確かに機能しません…</p>
固定されていないフォントでの30i(小さい文字)とw(大きい文字)
iiiiiiiiiiiiiiiiiiiiiiiiiiiiii
wwwwwwwwwwwwwwwwwwwwwwwwwwwwww
しかし、固定サイズのフォントでは…物事はより予測可能です。
iiiiiiiiiiiiiiiiiiiiiiiiiiiiii
wwwwwwwwwwwwwwwwwwwwwwwwwwwwww
必要なのは text-overflow CSS プロパティです。CSS を使用して、固定幅のコンテナー内の余分なテキストを切り取り、オーバーフローを省略記号に置き換えます。続きを読む:
およそ何文字が 2 行に相当するかを確認するには、デザインをいじる必要があります。固定フォントを使用していない場合は、多くのケースを検討する必要があります。
この関数を使用して、サイトの 1 つでこれを行います。これにより、特定の最大文字数にトリムされ、文字列の末尾の前の最初のスペースで文字列が分割されます。
function str_tr($string,$max)
{
if(strlen($string)>$max)
{
$string = substr($string,0,$max);
$i = strrpos($string," ");
$string = substr($string,0,$i);
$string .= "...";
}
return $string;
}