Text Truncate
text-overflow が効かない時のチェックリスト
2025-10-08
まずここを疑え
90%の原因は「幅が指定されていない」か「Flexboxのmin-width問題」。
/* この2つを追加して動くか試す */
max-width: 200px; /* または親要素に幅指定 */
min-width: 0; /* Flex/Gridアイテムの場合 */
即決フロー
┌─────────────────────────────────────────┐
│ 省略されない? │
└─────────────────────────────────────────┘
↓
┌─────────────────────────────────────────┐
│ 幅(width / max-width)を指定した? │
└─────────────────────────────────────────┘
↓ No
┌─────────────────────────────────────────┐
│ ✓ max-width を追加 │
└─────────────────────────────────────────┘
↓ Yes(それでも効かない)
┌─────────────────────────────────────────┐
│ Flexbox / Grid のアイテム? │
└─────────────────────────────────────────┘
↓ Yes
┌─────────────────────────────────────────┐
│ ✓ min-width: 0 を追加 │
└─────────────────────────────────────────┘
↓ No(それでも効かない)
┌─────────────────────────────────────────┐
│ 3プロパティ全部ある? │
│ ・white-space: nowrap │
│ ・overflow: hidden │
│ ・text-overflow: ellipsis │
└─────────────────────────────────────────┘
↓ No
┌─────────────────────────────────────────┐
│ ✓ 足りないプロパティを追加 │
└─────────────────────────────────────────┘
必須の3プロパティ
.truncate {
white-space: nowrap; /* 折り返しを禁止 */
overflow: hidden; /* はみ出しを隠す */
text-overflow: ellipsis; /* 省略記号を表示 */
}
この3つはセット。どれか1つでも欠けると動かない。
原因別の対処
幅が指定されていない
/* ❌ NG: 幅が無限に広がる */
.truncate {
text-overflow: ellipsis;
}
/* ✓ OK: 幅を制限 */
.truncate {
max-width: 200px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
Flexbox の min-width 問題
Flexアイテムは
min-width: autoがデフォルト。コンテンツが縮まない。
/* ❌ NG: 省略されない */
.flex-item {
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
/* ✓ OK: min-width を上書き */
.flex-item {
min-width: 0; /* これが必要 */
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
Grid の min-width 問題
Grid も同様。
.grid-item {
min-width: 0; /* これが必要 */
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
display: inline では効かない
インライン要素には幅の概念がない。
/* ❌ NG */
span {
text-overflow: ellipsis;
}
/* ✓ OK */
span {
display: inline-block;
max-width: 200px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
line-clamp が効かない場合
4プロパティセットを確認
/* ❌ NG: 足りない */
.clamp {
-webkit-line-clamp: 3;
}
/* ✓ OK: 4つセット */
.clamp {
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;
}
text-overflow と併用している
/* ❌ NG: 競合する */
.element {
white-space: nowrap; /* 1行に強制 */
-webkit-line-clamp: 3; /* 3行で省略 */
}
どちらか一方を使う。併用不可。
チェックリスト
text-overflow(1行省略)
-
white-space: nowrapがある -
overflow: hiddenがある -
text-overflow: ellipsisがある - 要素に幅(width / max-width)がある
- Flexアイテムなら
min-width: 0がある - Gridアイテムなら
min-width: 0がある -
displayが inline 以外になっている
line-clamp(複数行省略)
-
display: -webkit-boxがある -
-webkit-box-orient: verticalがある -
-webkit-line-clamp: nがある -
overflow: hiddenがある -
white-space: nowrapを使っていない
まとめ
| 症状 | 原因 | 対処 |
|---|---|---|
| 省略されない | 幅未指定 | max-width 追加 |
| 省略されない | Flex/Grid | min-width: 0 追加 |
... が出ない | overflow: hidden がない | 追加 |
| 1行にならない | white-space: nowrap がない | 追加 |
| line-clampが効かない | 4プロパティ不足 | セットで追加 |
| line-clampが効かない | text-overflowと併用 | どちらか一方に |
まず幅とmin-widthを疑え。
関連記事
- Text Truncate完全ガイド — 1行・複数行・JSの判断基準