LearningjQuery.com部落格文章清單的左邊有一個很酷的日期,如圖:
從圖中我們看到,「2009」垂直排列在右側。用Firebug查看元素,文字「2009」出現在html結構之中,本文介紹實現此效果的兩種方法。
一、利用Sprite技術實現
其實作過程已有Chris Coyier 在《 Date Display Technique with Sprites 》一文中作了詳細介紹,這裡把其實作過程作一個簡單的描述。很顯然,我們不希望每個日期用一張單獨的圖片,因此,將其整合到一張圖片之上,安排年、月、日在圖片的不同區域,如圖:
1、Html
頁面中html結構如下:
<div class="postdate">
<div class="month m-06">Jun</div>
<div class="day d-30">30</div>
<div class="year y-2009">2009</div>
</div>
.postdate容器包含三個區域,分別對應年月日,這樣很好的保證了語意上的完整性。
在類似wordpress這樣的CMS系統中,其後端程式碼是這樣的:
<div class="postdate">
<div class="month m-<?php the_time('m') ?>"><?php the_time('M') ?></div>
<div class="day d-<?php the_time('d') ?>"><?php the_time('d') ?></div>
<div class="year y-<?php the_time('Y') ?>"><?php the_time('Y') ?></div>
</div>
2、Css
css是sprite真正發揮作用的地方,利用html中的定義的class屬性,讓對應的圖片得以顯示。
首先,讓class屬性為.postdate的容器相對定位,這樣包含其中的三個區域就會絕對定位,並使用同一張背景圖片。設定各自的寬度和高度,並將文字移出以顯示背景圖片。
然後,定義每個月(12)、每天(31)、每年(以10年計)具體的背景位置,以顯示與其相對應的圖片。
.postdate {
position: relative;
width: 50px;
height: 50px;
float: left;
}
.month, .day, .year {
position: absolute;
text-indent: -1000em;
background-image: url(/wp-content/themes/ljq/images/dates.png);
background-repeat: no-repeat;
}
.month { top: 2px; left: 0; width: 32px; height: 24px;}
.day { top: 25px; left: 0; width: 32px; height: 25px;}
.year { bottom: 0; right: 0; width: 17px; height: 48px;}
.m-01 { background-position: 0 4px;}
.m-02 { background-position: 0 -28px;}
.m-03 { background-position: 0 -57px;}
... more like this ...
.d-01 { background-position: -50px 0;}
.d-02 { background-position: -50px -31px;}
.d-03 { background-position: -50px -62px;}
... more like this ...
.y-2006 { background-position: -150px 0;}
.y-2007 { background-position: -150px -50px;}
.y-2008 { background-position: -150px -100px;}
... more like this ...