You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于Flexbox适配表格单元格内Div及日程日历后端数据渲染的技术问询

Flexbox适配表格单元格内Div及日程日历后端数据渲染的技术问询

嘿,看你正在用Thymeleaf构建网页版的日程日历,想要把后端Model传来的预约数据正确渲染到日期单元格里,同时应该还在头疼单元格内用Flexbox布局的适配问题?我来一步步给你捋清楚解决方案。

首先先补全你没写完的Thymeleaf代码逻辑,确保后端数据能正常渲染到页面上:

<table class="calendar">
    <thead>
        <tr class="calendar-row">
            <th>Mon</th>
            <th>Tue</th>
            <th>Wed</th>
            <th>Thu</th>
            <th>Fri</th>
            <th>Sat</th>
            <th>Sun</th>
        </tr>
    </thead>
    <tbody>
        <!-- 遍历每周数据生成日历网格 -->
        <tr th:each="week : ${calendar}" class="calendar-row">
            <th:block th:each="day : ${week}">
                <!-- 渲染当月有效日期单元格 -->
                <td th:if="${day}" class="day-cell">
                    <span class="day-number" th:text="${day.dayOfMonth}"></span>
                    <!-- 渲染当天的所有预约 -->
                    <div class="appointments-container" th:if="${day.appointments}">
                        <div th:each="appointment : ${day.appointments}" class="appointment-item">
                            <span th:text="${appointment.title}"></span>
                            <span class="time" th:text="${#dates.format(appointment.startTime, 'HH:mm')}"></span>
                        </div>
                    </div>
                </td>
                <!-- 处理当月之外的空白日期,保证表格布局完整 -->
                <td th:unless="${day}" class="empty-day-cell"></td>
            </th:block>
        </tr>
    </tbody>
</table>

接下来是Flexbox适配的CSS代码,让单元格内的预约内容布局美观且自适应:

.calendar {
    width: 100%;
    border-collapse: collapse;
}

.calendar-row th, .day-cell, .empty-day-cell {
    border: 1px solid #e0e0e0;
    padding: 8px;
    vertical-align: top; /* 让单元格内容从顶部开始排列 */
    min-height: 100px; /* 设置最小高度,避免日期内容少的时候单元格太窄 */
}

.day-number {
    font-weight: bold;
    display: inline-block;
    margin-bottom: 8px; /* 和下面的预约列表拉开间距 */
}

.appointments-container {
    display: flex;
    flex-direction: column; /* 预约项垂直排列 */
    gap: 4px; /* 每个预约项之间的间距 */
}

.appointment-item {
    background-color: #e3f2fd;
    padding: 4px 6px;
    border-radius: 4px;
    font-size: 0.9em;
    display: flex;
    justify-content: space-between; /* 预约标题和时间左右分布对齐 */
    align-items: center;
}

这里给你划几个关键要点:

  • Thymeleaf部分:假设你的后端day对象包含dayOfMonth(日期号)和appointments(当天预约列表)属性,通过th:each完成层级遍历,同时处理了空白日期,让日历布局更规整。
  • Flexbox部分:通过给预约容器设置垂直flex布局,让预约项有序排列;每个预约项内部也用flex实现标题和时间的对齐,同时给单元格设置最小高度,保证日历整体视觉一致。

如果你遇到Flex元素溢出或者布局错乱的情况,可以检查这几点:

  • 确认.day-cell的vertical-align设为top,避免内容错位
  • 如果需要预约项换行,可以给.appointments-container加flex-wrap: wrap
  • 尽量不要给Flex元素设置固定高度,让它自适应内容,或者用flex-grow分配剩余空间

备注:内容来源于stack exchange,提问作者jakub_k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.17 11:03:15