Действительно, чтобы объяснить, как это сделать, потребуется довольно много времени. Я могу дать вам несколько общих указаний, однако ...
По сути, в приведенном вами примере авторы этого календаря использовали абсолютно позиционированные элементы div, расположенные над календарем. Если вы откроете Firebug в Firefox и «осмотрите элемент» на одном из участков, а затем просмотрите элемент при изменении размера браузера, вы заметите, что он становится желтым. Это связано с тем, что JavaScript активно изменяет размеры элементов при добавлении элементов или при изменении размера страницы. Некоторое время я пытался сделать что-то похожее на это и в конце концов сдался из-за его сложности и излишней громоздкости.
Что я в итоге сделал, так это пошло против моего сильного анти-табличного менталитета и использовал атрибут colspan
элементов <td>
в самой таблице. Каждая строка событий - <tr>
, а каждое событие - <td>
. Поскольку <td>
s может охватывать несколько «столбцов» с помощью атрибута colspan
.
Итак, чтобы сломать его ...
Календарь <div>
. Каждая неделя - это 100% -ная ширина <div>
, которая содержит две таблицы:
- Первая таблица просто содержит границы ячейки, чтобы придать календарю вид.
- Второй содержит номера дня, события и т. Д. *
Во второй таблице первая строка имеет 7 столбцов (по 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 столбца).
Каждая таблица жестко расположена относительно родительского div 'week' ... первая имеет более низкий z-индекс, так что вторая таблица (события и т. Д.) Будет отображаться сверху и охватывать календарь границы ячейки.
Это именно то, что Google использует для создания своих календарей Google. На самом деле он довольно элегантный, с ним легко работать, и писать сумасшедший javascript практически невозможно. Самое сложное - это обернуть событие, скажем, с четверга на одну неделю, скажем, на среду на другой неделе (так как вам нужно сделать n количество colspans <td>
в зависимости от суммы недель в видимом календарном пространстве).
Итак, на самом деле, я бы предложил исследовать структуру таблицы Google G-Cal и посмотреть, что из этого можно экстраполировать. Самый простой способ - просто скопировать весь HTML-код из него с помощью Firebug и вставить его в редактор, а затем просто поиграть, пока не поймете, как он работает.
Надеюсь, то, что я показал, поможет. Удачи, чувак.