2012年10月29日 星期一

透過 CSS 實現「標題過長以省略符 (點點點) 替代」

origin: https://github.com/QueenbyeR/blog-text/blob/master/%E9%80%8F%E9%81%8E%20CSS%20%E5%AF%A6%E7%8F%BE%E3%80%8C%E6%A8%99%E9%A1%8C%E9%81%8E%E9%95%B7%E4%BB%A5%E7%9C%81%E7%95%A5%E7%AC%A6%20(%E9%BB%9E%E9%BB%9E%E9%BB%9E)%20%E6%9B%BF%E4%BB%A3%E3%80%8D/page-001.md




通常一個網站最基本的功能便是「最新消息」之類的訊息公告欄,卻總有一個老問題糾纏著。通常公告欄每條消息的標題只會佔用一行文字,如果標題過長變成兩行,這下可便扭了。
自動換行
為了讓它們能夠自動帶有 ... 這類點點點型的省略號,對前端開發不熟的後端開發者們,便想出了一個土法煉鋼的方法。
function cnSubStr($string, $sublen) {
    if ($sublen >= strlen($string)) {
        return $string;
    }
    // 略...
    // 略...
}
現在,時代在進步**(IE瀏覽器在進步)**,有一種透過純 CSS 來實現這效果的作法。要說缺點的話,就是只能替「單行」替換省略號,若是區塊型的描述文字串,則無法實現替換省略號。
單行替換省略號
關鍵的三個屬性
  • text-overflow : ellipsis;
  • white-space : nowrap;
  • overflow : hidden;
支持 IE8, Firefox, Chrome
<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>JS Bin</title>
</head>
<body>
    <div class="no_title_over_length">
        <h2>What is Ember.js?</h2>
        <p>Ember is a JavaScript framework for creating ambitious web applications that eliminates boilerplate and provides a standard application architecture.</p>
    </div>
</body>
</html>
.no_title_over_length{
    width            : 250px;
    border           : 5px solid black;
    padding          : 0 5px;
    background-color : pink;
}

.no_title_over_length p{
    text-overflow : ellipsis;
    white-space   : nowrap;
    overflow      : hidden;
}

CSS Sprites 實現方法

origin: https://github.com/QueenbyeR/blog-text/blob/master/CSS%20Sprites%20%E5%AF%A6%E7%8F%BE%E6%96%B9%E6%B3%95/page-001.md



CSS Sprites
早已技術存在很久,最大的亮點就是節約 Http request 等同於節約網頁連線耗時,加快網頁載入,其重點在於將各個小圖標大圖示密集地集中在一張 image 裡;不再浪費唇舌,這裡僅記錄 CSS 的實現方式。
支持 Chrome、Firefox 以及 IE。
最大的麻煩
就是每個圖標按鈕得一個一個調整 position,如果image之中的所有圖標排列具有規則邏輯性的話,倒可採用LESS來撰寫,會方便許多。
採用的圖片為:
CSS Sprites buttons
<!DOCTYPE html>
<html>
<head>
    <meta charset=utf-8 />
    <title>JS Bin</title>
</head>
<body>
    <div class="menu">
        <span class="button link-home"></span>
        <span class="button link-game"></span>
        <span class="button link-esport"></span>
    </div>
    <div style="clear: both;"></div>
</body>
</html>
body{
    background-color: black;
}

.button{
    background-image : url(http://tw.battle.net/sc2/static/images/layout/menu-tabs.jpg?v=2);
    display          : inline-block;
    float            : left;
    width            : 105px;
    height           : 76px;
    cursor           : pointer;
}

.link-home{background-position        : 0 0; }
.link-home:hover{background-position  : 0 -76px; }
.link-home:active{background-position : 0 -152px; }

.link-game{background-position        : -105px 0; }
.link-game:hover{background-position  : -105px -76px; }
.link-game:active{background-position : -105px -152px; }

.link-esport{background-position        : -210px 0; }
.link-esport:hover{background-position  : -210px -76px; }
.link-esport:active{background-position : -210px -152px; }