﻿# 如何顯示固定寬度的 Label, 超過會顯示 ...

我們在套版的時候，常常會遇到那種「文字寬度固定」的版型，我們通常的作法都是用 Substring 將長篇的文字擷取一部份起來顯示，但問題是「中文字的寬度常常無法估計」，但客戶又要求寬度一定要跟設計師設計的一模一樣，文字太多的時候不能超出版面，以免破壞美美的版面。

請看這段文字：

.box1 { margin: 0 20px 20px 20px; padding: 10px; border: 1px dashed #333; }

這是一段非常長的文字這是一段非常長的文字這是一段非常長的文字這是一段非常長的文字

如果客戶要求我們顯示文字的寬度不得超過 300px 怎麼辦呢？！如果你用 Substring 常常不是「長一點」就是「短一點」，尤其是中、英混雜的文字更是如此！

請再看這段文字：

.box2 { margin: 0 20px 20px 20px; text-overflow:ellipsis; overflow:hidden; white-space:nowrap; border: 1px dashed #333; width: 300px; padding: 10px; }

這是一段非常長的文字這是一段非常長的文字這是一段非常長的文字這是一段非常長的文字

看出哪裡不一樣了嗎？ 沒錯，我們限定了固定的寬度，且最後面還會幫我們加上 "..." 符號（**此效果只在 IE 有效**）

其實我們可以透過簡單的 CSS 定義就可以達到這個維持版面配置的要求，而完全不需要使用 Substring，底下是上面那個範例的 CSS 定義，標注紅色的部分就是設定的重點：

> <style>  
> .box2 {  
>     margin: 0 20px;  
>     text-overflow: **ellipsis**;  
>     overflow:hidden;  
>     white-space:nowrap;  
>     border: 1px dashed #333;  
>     width: 300px;  
>     padding: 10px;  
> }  
> </style>

**相關連結**

-   text-overflow Attribute | textOverflow Property  
    [http://msdn2.microsoft.com/en-us/library/ms531174(VS.85).aspx](http://msdn2.microsoft.com/en-us/library/ms531174\(VS.85\).aspx)  
    
-   Using Text-Overflow  
    [http://www.blakems.com/archives/000077.html](http://www.blakems.com/archives/000077.html) 

另外補充一點，在寫 .NET 的時候愛用 String.Substring() 方法的人請注意，如果你在方法中使用以下程式碼的話很容易就會發生Exception：

> \[code:c#\]  
>   
> return strResult.Substring(0, 200);  
>   
> \[/code\]

因為當 strResult 字串的長度不足 200 字元的時候就會發生 Exception 喔！這點是許多初學者都會犯錯的地方！建議改成以下的形式：

> \[code:c#\]  
>   
> if(strResult.Length > 200)  
>    return strResult.Substring(0, 200);  
> else  
>    return strResult;  
>   
> \[/code\]
