664 字
3 分鐘

Flexbox 文字省略號不出現?min-width: 0 要加在哪一層

本文目錄

檔案列表的長檔名把右側按鈕擠出卡片,光加 text-overflow: ellipsis 沒有效果。先找到需要縮小的 flex item,給它 min-width: 0,再把 overflow: hidden、white-space: nowrap 和 text-overflow: ellipsis 放在顯示文字的元素上。

可縮小的 item 與裁切文字的位置#

在水平、由左到右的 flex 列裡,flex item 的自動最小寬度可能受內容限制。flex-shrink 允許分配不足的空間,但尺寸計算仍受最小寬度約束。如果標題所在的 item 本身就跟文字一樣寬,文字沒有在自己的盒子溢出,省略號就沒有出現的條件。 CSS Flexbox 自動最小尺寸 · MDN text-overflow

把下列範例存成 HTML。第一列保留 item 的自動最小寬度,第二列只在 .file 加 min-width: 0,按鈕與截斷設定完全相同。

<!doctype html>
<meta charset="utf-8">
<title>Flex 省略號對照</title>
<style>
.row {
display: flex;
width: 260px;
gap: 8px;
margin-block: 12px;
border: 1px solid #999;
}
.file { flex: 1; }
.row button { flex: none; }
.filename {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.fixed .file { min-width: 0; }
</style>
<div class="row">
<div class="file"><div class="filename">project-monthly-report-final-approved-2026-11.pdf</div></div>
<button type="button">下載</button>
</div>
<div class="row fixed">
<div class="file"><div class="filename">project-monthly-report-final-approved-2026-11.pdf</div></div>
<button type="button">下載</button>
</div>

用 DevTools 檢查時,先看 .row 的 scrollWidth 是否大於 clientWidth,再量 .filename 的這兩個值。第一列可看到外層溢出,但文字元素本身沒有被壓窄。第二列應反過來,外層收進 260px,文字元素內仍有被裁切的內容。在 Chrome 157.0.8103.38 的本機測試中,兩列的按鈕寬度相同,修正後的文字盒則比內容窄。

巢狀 Flexbox 從外往內量#

如果卡片外還有側欄和主區塊,先看最先超過父層可用寬度的 item。把 DevTools 選到該 item,在樣式面板暫加 min-width: 0,再量下一層。若某一層另有固定 width 或 min-width,需依實際設計調整該值。使用邏輯屬性時,水平書寫可用 min-inline-size: 0 表達同一個方向的限制。

把 overflow: hidden 直接放在外層也可能影響它的最小尺寸,但會裁掉其溢出的內容,連選單或焦點外框也可能受影響。只需要截斷檔名時,讓容器可縮,並把裁切留在文字本身。產品畫面若需要完整名稱,可以在同一個列的詳細資訊中提供可讀、可複製的原文。

如果 DevTools 顯示父容器其實是 Grid,欄軌也可能是限制來源,可用 Grid 的 minmax(0, 1fr) 與 min-width: 0 的方法再量一層。

參考資料:

CSSWG:Flex item 的自動最小尺寸

MDN:text-overflow

MDN:min-width

Flexbox 文字省略號不出現?min-width: 0 要加在哪一層
https://laplusda.com/posts/css-flexbox-ellipsis-min-width-zero/
作者
Zero
發佈於
2026-11-08
許可協議
CC BY-NC-SA 4.0