CODE-用CSS實現圖檔裁切效果
不知道大家有沒有在網頁上寫過計數器這類用數字或英文圖檔拼湊出完整數字/語句的需求。
最直覺的做法是分別做出0.gif, 1.gif, ... 9.gif等10個圖檔,再輸出<img src="0.gif" /><img src="2.gif" />標籤就可以搞定。但這樣有幾個小缺點:
- 英數字圖檔眾多,如果連英文字母都要包含進去,檔案數多達數十個檔案,製作跟管理較麻煩。
- 每個GIF檔都需要固定大小儲存檔頭、調色盤資料,小圖檔案愈多,就要浪費更多空間用來擺放明明可以共用的資料,不符經濟效益。
- 每個<img>只傳回單一字母數字,即使第二次後就可直接由Cache讀取,但第一次顯示時會引發十次以上的HTTP GET。
事實上,透過一點CSS小技巧,就可以將全部的數字依序放在同一個圖檔,再利用 overflow:hidden; margin-left設負值等CSS技巧達到只顯示特定區域圖片的裁切效果。請看以下示範:
我用jQuery寫了一個傳入數字字串就產生完整圖形組合的函數如下:
<style type="text/css">
.clsDigit
{
overflow: hidden;
padding: 0px;
width: 15px;
}
</style>
<script src="jquery-1.2.6.js" type="text/javascript"></script>
<script type="text/javascript">
function dispNum(num) {
var tbl = $("<table cellspacing='0' cellpadding='0'><tr></tr></table>");
var tr = tbl.find("tr");
var s = num.toString();
for (var i = 0; i < s.length; i++) {
var d = parseInt(s.substr(i, 1));
if (d == 0) d = 9; else d--;
tr.append(
"<td><div class='clsDigit'>" +
"<img src='set16.gif' style='margin-left:" +
(-15 * d).toString() + "px' /></div></td>");
}
return tbl;
}
$(function() {
$("#dvDisp").append(dispNum("0223939889"));
});
</script>