SHU BLOG

News

BLOG NEWS

  • ARTICLE
    2026.10.05
  • CATEGORY
TITLE

【CSS】テキストを1行で省略(…)表示する方法!

SHU[シュウ]

1991年生まれ九州の宮崎県育ち
高校卒業後、愛知県で自動車関係の
お仕事に5年間勤め、WEB業界に
転職致しました。
趣味:サッカー観戦、ゲーム、映画、漫画
基本インドアです!

サーバーとドメインの同時取得で.jpが無料

シュウ
シュウ
今回は【CSS】テキストを1行で省略(…)表示する方法!
の解説になります!

  • 一覧ページのデザインを整えたい方
    記事一覧や商品一覧で、タイトルの長さがバラバラでレイアウトが崩れてしまう方です。
  • text-overflowを使ったことがない方
    「…」で省略する方法は知っているものの、なぜ複数のプロパティが必要なのか分からない方です。
  • flexbox内で省略がうまくいかない方
    横並びレイアウトの中でテキストを省略したいのに、「…」が表示されず困っている方です。

テキストを1行で省略表示するとは

テキストを1行で省略表示するとは

記事一覧やカード型のUIでは、タイトルの長さがバラバラになりがちです。
長いテキストをそのまま表示すると、改行されてカードの高さが揃わなかったり、レイアウトが崩れたりします。

そこで便利なのが、はみ出した部分を「…」で省略する表示方法です。
CSSだけで実装でき、JavaScriptも不要です。
完成イメージは以下のようになります。

完成イメージ

<p class="ellipsis">ここに長いテキストが入ります。ここに長いテキストが入ります。</p>

3つのCSSプロパティの役割から、flexbox内で省略されない場合の対処法、省略時だけツールチップを表示する方法まで、実際のサンプルコードをもとに解説します。

メリット
  • レイアウトが崩れない:テキストの長さに関係なく、1行の高さを揃えられます。
  • 実装が簡単:3つのCSSプロパティを指定するだけで実現できます。
  • 見た目がすっきりする:一覧ページなどの情報が整理され、読みやすくなります。

1行省略表示 HTML編

今回使用するHTMLは、divで囲んだ中に、省略したいテキストを配置するシンプルな構造です。
書き方は以下のようになります。

<div class="ellipsis-box">
    <p class="ellipsis">ここに長いテキストが入ります。ここに長いテキストが入ります。ここに長いテキストが入ります。</p>
</div>
●①ellipsis-box
省略表示するテキストの幅を決める親要素です。
●②ellipsis
省略表示を適用するテキスト要素です。

省略表示は、テキストが親要素の幅を超えたときに働きます。
そのため、widthやmax-widthで幅を決めておくことが大切です。

1行省略表示 CSS編

次に、CSSで省略表示のスタイルを指定します。
ポイントは、3つのプロパティをセットで指定することです。
書き方は以下のようになります。

/*--省略表示の幅を指定--*/
.ellipsis-box {
    max-width: 300px;
}

/*--1行で省略表示するスタイル--*/
.ellipsis {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
●①max-width: 300px;
テキストを表示する最大幅を指定します。この幅を超えた部分が省略の対象になります。
●②white-space: nowrap;
テキストの折り返しを禁止し、1行で表示します。
●③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;
}
●①display: flex;
子要素を横並びにするflexコンテナを作成します。
●②min-width: 0;
flexアイテムがコンテンツ幅より小さくなれるようにし、省略表示を有効にします。
●③flex: 1;
残りの幅をテキスト要素に割り当て、はみ出した分を省略できるようにします。

・複数行で省略したい場合
2行や3行で省略したい場合は、-webkit-line-clamp を使用します。
1行省略とは指定方法が異なるため、今回は割愛します。

1行省略表示 JavaScript編

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 が付いた要素をすべて取得します。
●②要素を1つずつ処理
forEach() を使用して、取得した要素に対して順番に処理を行います。
●③省略されているか判定
scrollWidth(本来の幅)が clientWidth(表示されている幅)より大きければ、テキストが省略されていると判断します。
●④title属性に全文をセット
setAttribute('title', ...) を使用して、全文をツールチップとして表示できるようにします。

まとめ

今回はこれで以上です。
今回は、CSSでテキストを1行で省略(…)表示する方法を紹介しました。
white-space・overflow・text-overflowの3つをセットで指定するだけで、長いテキストをすっきり表示できます。
また、flexbox内ではmin-width: 0;を追加し、JavaScriptで省略時だけツールチップを付けると、読者が全文を確認しやすくなります。
一覧ページやカードUIを作る際は、ぜひ活用してみてください。

POINT
  • 省略表示を行うには、親要素の幅を指定します。
  • white-space: nowrap;でテキストの折り返しを禁止します。
  • overflow: hidden;ではみ出した部分を非表示にします。
  • text-overflow: ellipsis;で「…」を表示します。
  • 3つのプロパティは必ずセットで指定します。
  • flexbox内ではmin-width: 0;を追加します。
  • JavaScriptで省略時だけtitle属性を付けると、全文を確認できます。
  • 複数行で省略する場合は、-webkit-line-clampを使用します。

テンプレートを見る

Web・デザインの本棚

Web・デザインの本棚を見る

スポンサーリンク

SHU

1991年生まれ九州の宮崎県育ち高校卒業後、愛知県で自動車関係のお仕事に5年間勤め、WEB業界に転職致しました。
趣味:サッカー観戦、ゲーム、映画、漫画基本インドアです!笑
つくる、しあわせをテーマとして主にWEBに関する様々な情報を発信しています。

オススメ記事

カテゴリー

月別アーカイブ

Others Posts記事

NEW
本の紹介