CSS:文字太長時以 "..." 取代
好的,這是一個非常常見的 CSS 需求。要實現文字太長時以 "..." 取代,你
.truncate {
/* 1. 強制文字不換行 */
white-space: nowrap;
/* 2. 隱藏超出容器的內容 */
overflow: hidden;
/* 3. 將被隱藏的文字用省略號 (...) 取代 */
text-overflow: ellipsis;
}
為什麼需要這三個屬性?
white-space: nowrap; 作用 :告訴瀏覽器,這段文字無論多長,都不要自動換到下一行。它會強制所有文字都擠在同一行上,這才會產生「超出寬度」的情況。比喻 :就像把一條很長的繩子,強制拉直,不讓它彎曲。
overflow: hidden; 作用 :當內容(在這裡是那一行長長的文字)超出了元素的邊界時,把超出的部分隱藏 起來,不要顯示它們。比喻 :就像用一把剪刀,把超出盒子邊緣的繩子剪掉。
text-overflow: ellipsis; 作用 :這個屬性是最後一步。它告訴瀏覽器:「如果因為 overflow: hidden 而有文字被隱藏了,請在文字被截斷的地方顯示一個省略號 (...)」。比喻 :在繩子被剪斷的地方,綁上一個 "..." 的標籤。
完整範例
<table class="my-table">
<thead>
<tr>
<th>項目</th>
<th style="width: 70%;">描述</th> <!-- 建議為欄位設定寬度 -->
<th>狀態</th>
</tr>
</thead>
<tbody>
<tr>
<td>任務一</td>
<td class="truncate">這是一段非常非常非常非常非常非常非常非常長的描述文字,它會超出表格的寬度。</td>
<td>進行中</td>
</tr>
<tr>
<td>任務二</td>
<td class="truncate">這是一段較短的描述。</td>
<td>已完成</td>
</tr>
</tbody>
</table>
/* 對表格本身的設定,非常重要!*/
.my-table {
/* 讓表格的寬度佈局基於設定的 col/th/td 寬度,而不是內容 */
table-layout: fixed;
width: 100%; /* 讓表格填滿容器 */
border-collapse: collapse;
}
.my-table th, .my-table td {
border: 1px solid #ccc;
padding: 8px;
text-align: left;
}
/* 應用省略號效果的 class */
.truncate {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
如果沒有效果,請檢查以下幾點:
table-layout: fixed; 是否已設定? 對於表格,這是最常見的失敗原因。如果沒有設定,瀏覽器會試圖調整欄寬以容納所有內容,這樣就不會觸發 overflow。<td> 或其父級 <th> 是否有寬度? 元素必須有一個明確的寬度限制,overflow 才知道邊界在哪裡。你可以直接設定在 <td> 或對應的 <th> 上,或者設定在 <col> 標籤上。三個 CSS 屬性是否都寫對了? 再次確認 white-space, overflow, text-overflow 是否都已應用到目標 <td> 上。
進階技巧:多行文字的省略號
/* 隱藏超出的內容 */
overflow: hidden;
/* 以下是多行省略號的關鍵 */
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3; /* 設定你希望顯示的行數 */
}
留言
張貼留言