[記事の内容]

記事一覧やカード型のUIでは、タイトルの長さがバラバラになりがちです。
長いテキストをそのまま表示すると、改行されてカードの高さが揃わなかったり、レイアウトが崩れたりします。
そこで便利なのが、はみ出した部分を「…」で省略する表示方法です。
CSSだけで実装でき、JavaScriptも不要です。
完成イメージは以下のようになります。

<p class="ellipsis">ここに長いテキストが入ります。ここに長いテキストが入ります。</p>
3つのCSSプロパティの役割から、flexbox内で省略されない場合の対処法、省略時だけツールチップを表示する方法まで、実際のサンプルコードをもとに解説します。
今回使用するHTMLは、divで囲んだ中に、省略したいテキストを配置するシンプルな構造です。
書き方は以下のようになります。
<div class="ellipsis-box">
<p class="ellipsis">ここに長いテキストが入ります。ここに長いテキストが入ります。ここに長いテキストが入ります。</p>
</div>
省略表示は、テキストが親要素の幅を超えたときに働きます。
そのため、widthやmax-widthで幅を決めておくことが大切です。
次に、CSSで省略表示のスタイルを指定します。
ポイントは、3つのプロパティをセットで指定することです。
書き方は以下のようになります。
/*--省略表示の幅を指定--*/
.ellipsis-box {
max-width: 300px;
}
/*--1行で省略表示するスタイル--*/
.ellipsis {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
・3つのプロパティはセットで使う
text-overflow: ellipsis; だけを指定しても、省略表示にはなりません。
white-space: nowrap; で折り返しを止め、overflow: hidden; ではみ出しを隠すことで、初めて「…」が表示されます。
・flexbox内で省略されない場合
flexコンテナの子要素に省略表示を適用する場合は、min-width: 0; を追加します。
flexアイテムは初期状態でコンテンツ幅より小さくならないため、この指定がないと「…」が表示されません。
書き方は以下のようになります。
/*--flexbox内で省略表示する場合--*/
.flex-row {
display: flex;
gap: 10px;
}
.flex-row .ellipsis {
min-width: 0;
flex: 1;
}
・複数行で省略したい場合
2行や3行で省略したい場合は、-webkit-line-clamp を使用します。
1行省略とは指定方法が異なるため、今回は割愛します。
CSSだけで省略表示は完成しますが、省略された部分の内容は読者には見えません。
そこでJavaScriptを使い、省略されているテキストにだけツールチップ(title属性)を付けると、マウスを合わせたときに全文を確認できて便利です。
書き方は以下のようになります。
<script>
const ellipsisItems = document.querySelectorAll('.ellipsis');
ellipsisItems.forEach(item => {
if (item.scrollWidth > item.clientWidth) {
item.setAttribute('title', item.textContent.trim());
}
});
</script>
querySelectorAll() を使用して、.ellipsis が付いた要素をすべて取得します。forEach() を使用して、取得した要素に対して順番に処理を行います。scrollWidth(本来の幅)が clientWidth(表示されている幅)より大きければ、テキストが省略されていると判断します。setAttribute('title', ...) を使用して、全文をツールチップとして表示できるようにします。今回はこれで以上です。
今回は、CSSでテキストを1行で省略(…)表示する方法を紹介しました。
white-space・overflow・text-overflowの3つをセットで指定するだけで、長いテキストをすっきり表示できます。
また、flexbox内ではmin-width: 0;を追加し、JavaScriptで省略時だけツールチップを付けると、読者が全文を確認しやすくなります。
一覧ページやカードUIを作る際は、ぜひ活用してみてください。
white-space: nowrap;でテキストの折り返しを禁止します。overflow: hidden;ではみ出した部分を非表示にします。text-overflow: ellipsis;で「…」を表示します。min-width: 0;を追加します。-webkit-line-clampを使用します。2026.10.21
2026.10.20
2026.10.19
2026.10.15
2026.10.14
2026.10.13
2026.10.10
2026.08.14
2026.08.12
2026.04.05

© 2026 shu-naka-blog