真的,解釋如何做到這一點需要相當長的一段時間。我可以給你一些通用的指針,但是...
基本上,在你提供的例子中,該日曆的作者使用絕對定位的日曆覆蓋整個日曆。如果您在Firefox中打開Firebug並檢查其中一個跨度,然後在重新調整瀏覽器大小時觀察該元素,則會發現它們變黃。這是因爲在添加項目或調整頁面大小時,JavaScript會主動調整元素的大小。我試圖做一些類似的事情一段時間,並最終放棄了,由於它的複雜性和不必要的繁瑣。
我最終做的是違背了我強烈的反表心態,並在表格本身中使用<td>
元素的colspan
屬性。每一行事件是一個<tr>
,每個事件是一個<td>
。由於<td>
可以使用colspan
屬性跨越多個「列」。
因此,要打破它......
日曆是一個<div>
。每個星期是另一個100%-width <div>
包含兩個表:
- 第一個表只包含單元格邊框,給日曆的樣子。
- 第二包含天數,事件等...
在第二個表中,第一行有7列(1爲一週的每一天)。所有的第三行只有顯示其事件所需的行數。所以,一個星期只有1個事件上,比如,週四跨越2天(從週四至週五)將有6列:
該行會是這樣的:
<tr>
<td class="no-event"></td> <!-- Sunday -->
<td class="no-event"></td> <!-- Monday -->
<td class="no-event"></td> <!-- Tuesday -->
<td class="no-event"></td> <!-- Wednesday -->
<td class="no-event" colspan="2"> <!-- Thursday through Friday -->
<div class="some-styling-class">Vacation to Orlando!</div>
</td>
<td class="no-event"></td> <!-- Saturday -->
</tr>
請注意,只有6列...(因爲colspan="2"
的事件佔用了2列)。
每個表格固定地定位到父'week'div ...第一個具有較低的z-index,這樣第二個表格(事件等等)將顯示在頂部並跨越日曆單元格邊框。
這實際上是Google用來構建Google日曆的原因。它實際上非常優雅,易於使用,並且有很少或沒有瘋狂的JavaScript來編寫。最具挑戰性的是將一個事件從一週的星期四換成另一週的星期三(因爲你必須讓 的數量取決於可見的週數日曆空間)。
所以,我的建議實際上是調查Google的G-Cal表格結構,看看你能從中推斷出什麼。簡單的方法是使用Firebug從它複製整個HTML並粘貼到一個編輯器中,然後只是玩弄,直到你明白它是如何工作的。
我希望我所顯示的幫助。祝你好運。
請注意:這裏的事實是日曆*是*表格數據,所以表格結構實際上使句法和語義有意義。在這裏使用它們不需要感到內疚。 – KyleFarris 2009-10-22 18:18:17
這確實指出了我正確的方向。我完成了。 – clientbucket 2009-10-26 08:55:11
基本上,我遵循你的建議,研究谷歌日曆,並使用PHP試圖模仿佈局。我沒有使用兩個表格,只使用了一個,只是使用PHP來操作tr的渲染,主要是td元素。 – clientbucket 2009-10-26 08:57:21