gpt4 book ai didi

多日日历事件的 HTML 标记

转载 作者:太空狗 更新时间:2023-10-29 13:12:01 24 4
gpt4 key购买 nike

我熟悉基于 colspan 的标准方法,用于在 HTML 中显示(多周或月 View )日历以及跨越多天的事件。 (作为众多示例之一,Google 日历就是这样做的。)

我很好奇是否有人知道实现相同目标的无表方法。也许它只是不重要,这是表格元素的“好”用法,但我认为它在这个响应式设计时代可能更有意义。

这是一个响应式、无表格日历的示例。 (虽然没有多日事件。)https://pittsburghkids.org/calendar在其小视口(viewport)版本中,从语义上讲,它不再是表格。同样,正如@ThinkingStiff 在下面提到的,如果您在客户端从“月 View ”切换到“ ListView ”,那么表格在语义上也不适合。

最佳答案

日历 != 表格

日历不是语义表。它们感觉像表格,因为我们总是这样看待它们,但要使数据语义表格化,每一行都必须包含一个唯一的实体,而它们却没有。在日历中, 是实体

混淆在于我们也将天分为周。人们自然而然地认为一个月是周的集合,其实不然,它是天的集合。一个月平均有 4.3 周。表格中的一行不能包含实体的部分多个实体。

行 == 实体,列 == 属性

将其与在线购物车进行比较。购物车中的商品是表格形式的。每代表您购物车中的一种商品。每个要么是元素的属性(名称、库存编号、价格),要么是属性的聚合(数量、总金额)。您永远不会在一行中看到两种不同的元素类型(因为这没有意义),并且购物车不能包含 4.3 行。

解决方案

对于这个演示,我使用了 <divs> , 每天一个设置为 display: inline-block , 但您可能想要使用 <ol> .在月/周/日 View 之间切换时,日子流动得很好(表格不可能)。对于多日事件,Javascript 可以进行布局。

演示: http://jsfiddle.net/ThinkingStiff/XXm8y/

输出:

enter image description here

脚本:

var events = [{ from: 3, to: 9 }, { from: 4, to: 4 }, { from: 9, to: 11 },{ from: 4, to: 12 }];

for( var eventIndex = 0, event; event = events[eventIndex], eventIndex < events.length; eventIndex++ ) {
for( var dayIndex = event.from; dayIndex <= event.to; dayIndex++ ) {
var dayElement = document.getElementById( 'day' + dayIndex ),
firstDay = document.getElementsByClassName( 'event' + eventIndex ),
top;
if( firstDay.length ) {
top = firstDay[0].style.top;
} else {
var eventCount = dayElement.getElementsByClassName( 'event' ).length;
top = ( eventCount * 20 ) + 'px';
};
var html = '<div '
+ 'class="event event' + eventIndex + '" '
+ 'style="top: ' + top + ';">'
+ eventIndex
+ '</div>';
dayElement.insertAdjacentHTML( 'beforeEnd', html );
};
};

CSS:

#calendar {
border: 1px solid black;
height: 400px;
width: 504px;
}
.day {
display: inline-block;
height: 80px;
position: relative;
vertical-align: top;
width: 72px;
}
.day:nth-child( even ) {
background-color: pink;
}
.day:nth-child( odd ) {
background-color: lightblue;
}
.event {
background-color: lightgrey;
height: 20px;
position: absolute;
text-align: center;
width: 100%;
}

HTML:

<div id="calendar">
<div id="day1" class="day"></div><div id="day2" class="day"></div><div id="day3" class="day"></div><div id="day4" class="day"></div><div id="day5" class="day"></div><div id="day6" class="day"></div><div id="day7" class="day"></div><div id="day8" class="day"></div><div id="day9" class="day"></div><div id="day10" class="day"></div><div id="day11" class="day"></div><div id="day12" class="day"></div><div id="day13" class="day"></div><div id="day14" class="day"></div><div id="day15" class="day"></div><div id="day16" class="day"></div><div id="day17" class="day"></div><div id="day18" class="day"></div><div id="day19" class="day"></div><div id="day20" class="day"></div><div id="day21" class="day"></div><div id="day22" class="day"></div><div id="day23" class="day"></div><div id="day24" class="day"></div><div id="day25" class="day"></div><div id="day26" class="day"></div><div id="day27" class="day"></div><div id="day28" class="day"></div><div id="day29" class="day"></div><div id="day30" class="day"></div><div id="day31" class="day"></div>
</div>​

关于多日日历事件的 HTML 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11441514/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com