CSS:文字太長時以 "..." 取代

 好的,這是一個非常常見的 CSS 需求。要實現文字太長時以 "..." 取代,你需要三個 CSS 屬性的組合才能生效。

答案:你需要這三個 CSS 屬性的組合

.truncate {
    /* 1. 強制文字不換行 */
    white-space: nowrap;
    
    /* 2. 隱藏超出容器的內容 */
    overflow: hidden;
    
    /* 3. 將被隱藏的文字用省略號 (...) 取代 */
    text-overflow: ellipsis;
}
  

這三個屬性缺一不可,它們共同作用才能達到你想要的效果。

為什麼需要這三個屬性?

讓我們來理解一下它們各自的角色:

  1. white-space: nowrap;

    • 作用:告訴瀏覽器,這段文字無論多長,都不要自動換到下一行。它會強制所有文字都擠在同一行上,這才會產生「超出寬度」的情況。

    • 比喻:就像把一條很長的繩子,強制拉直,不讓它彎曲。

  2. overflow: hidden;

    • 作用:當內容(在這裡是那一行長長的文字)超出了元素的邊界時,把超出的部分隱藏起來,不要顯示它們。

    • 比喻:就像用一把剪刀,把超出盒子邊緣的繩子剪掉。

  3. text-overflow: ellipsis;

    • 作用:這個屬性是最後一步。它告訴瀏覽器:「如果因為 overflow: hidden 而有文字被隱藏了,請在文字被截斷的地方顯示一個省略號 (...)」。

    • 比喻:在繩子被剪斷的地方,綁上一個 "..." 的標籤。


完整範例

在處理 <td> 時,通常還需要對 <table> 本身做一些設定,效果才會穩定,特別是 table-layout: fixed;,這個屬性非常重要。

<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;
}
  

如果沒有效果,請檢查以下幾點:

  1. table-layout: fixed; 是否已設定? 對於表格,這是最常見的失敗原因。如果沒有設定,瀏覽器會試圖調整欄寬以容納所有內容,這樣就不會觸發 overflow

  2. <td> 或其父級 <th> 是否有寬度? 元素必須有一個明確的寬度限制,overflow 才知道邊界在哪裡。你可以直接設定在 <td> 或對應的 <th> 上,或者設定在 <col> 標籤上。

  3. 三個 CSS 屬性是否都寫對了? 再次確認 white-space, overflow, text-overflow 是否都已應用到目標 <td> 上。


進階技巧:多行文字的省略號

如果你希望文字顯示 2-3 行後再出現省略號,可以使用 -webkit-line-clamp 屬性。雖然它帶有 webkit 前綴,但現在已經被所有主流瀏覽器支援。

  /* 隱藏超出的內容 */
  overflow: hidden;
  
  /* 以下是多行省略號的關鍵 */
  display: -webkit-box;
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 3; /* 設定你希望顯示的行數 */
}
  

注意: 使用 -webkit-line-clamp 時,不需要 white-space: nowrap;text-overflow: ellipsis;

留言

這個網誌中的熱門文章

Offscreen Canvas

外部網頁新增 Google 日曆行程(URL模板)

計算 Canvas 文字最大字體