HTML tbody only 只有一个标题列宽

Posted

技术标签:

【中文标题】HTML tbody only 只有一个标题列宽【英文标题】:HTML tbody only is only one header column width 【发布时间】:2018-10-30 06:08:00 【问题描述】:

我的 html 有问题。我想制作一个带有固定标题和可滚动正文的表格。主体(tbody)由表格的行组成,头部(thead)由表头组成。重要的是,身体是由 Jinja 在负载时生成的。

这是screenshot of the table.

这就是生成表格的代码的样子。请注意,Jinja 代码可以完美运行,唯一的问题是烦人的宽度:

/*
 * Makes the body of the table scrollable.
 */
.scrollable_table tbody
    display: block;
    overflow-y: scroll;
    max-height: 70vh;


/*
 * Table custom style.
 */
.fancy_table 
    font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
    border-collapse: collapse;
    width: 100%;


.fancy_table td, .fancy_table th 
    border: 1px solid #ddd;
    padding: 8px;


.fancy_table tr:nth-child(even)background-color: #f2f2f2;

.fancy_table tr:hover background-color: #ddd;

.fancy_table th 
    padding-top: 12px;
    padding-bottom: 12px;
    text-align: left;
    background-color: #4CAF50;
    color: white;
<table width=100% height=100%><tr>
  <td class="events_column" width=50%>
    <div id="calendar_events">
        <h1>Eventos</h1>
        Haz click en el evento cuya ubicación quieras ver en el mapa.
        <div class="events_table_div">
            <table class="fancy_table scrollable_table">
                <thead>
                    <tr>
                        <th>Evento</th>
                        <th>Fecha</th>
                        <th>Ubicación</th>
                    </tr>
                </thead>
                <tbody>
                    % for each in events %
                    <tr class="clickable" onclick="% if 'location' in each %deleteMarkers(); addMarker('each['id']');% endif %">
                        <td>% if 'summary' in each %each['summary']% else %---% endif %</td>
                        <td>% if 'start' in each %each['start']['date']% else %---% endif %</td>
                        <td>% if 'location' in each %each['location']% else %---% endif %</td>
                    </tr>
                    % endfor %
                </tbody>
            </table>
        </div>
        <div class="buttons_table_div">
            <table class="fancy_table">
                <tr class="clickable" onclick="addAllMarker()"><td colspan="3">Mostrar todos los eventos</td></tr>
                <tr class="clickable" onclick="deleteMarkers()"><td colspan="3">Ocultar todos los eventos</td></tr>
            </table>
        </div>
    </div>
  </td>
  <td class="map_column" width=50%>
      <br>
      <div id="map" class="map"></div>
  </td>
</tr></table>

【问题讨论】:

【参考方案1】:

其实你可以用:

表格表格布局:固定

【讨论】:

【参考方案2】:

.scrollable_table tbody
    display: block;
    overflow-y: scroll;
    max-height: 70vh;

.scrollable_table thead
    display: block;

.scrollable_table tr,     .scrollable_table th 
    display: flex;


/*
 * Table custom style.
 */
.fancy_table 
    font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
    border-collapse: collapse;
    width: 100%;


.fancy_table th 
    WIDTH :33.3%;

.fancy_table td, .fancy_table th 
    border: 1px solid #ddd;
    padding: 8px;


.fancy_table tr:nth-child(even)background-color: #f2f2f2;

.fancy_table tr:hover background-color: #ddd;

.fancy_table th 
    padding-top: 12px;
    padding-bottom: 12px;
    text-align: left;
    background-color: #4CAF50;
    color: white;
<table class="fancy_table scrollable_table">
    <thead style="margin-right: 17px;">
        <tr>
            <th>Evento</th>
            <th>Fecha</th>
            <th>Ubicación</th>
        </tr>
    </thead>
    <tbody>
        % for each in events %
        <tr class="clickable" onclick="% if 'location' in each %deleteMarkers(); addMarker('each['id']');% endif %">
            <td>% if 'summary' in each %each['summary']% else %---% endif %</td>
            <td>% if 'start' in each %each['start']['date']% else %---% endif %</td>
            <td>% if 'location' in each %each['location']% else %---% endif %</td>
        </tr>
        % endfor %
    </tbody>
</table>

【讨论】:

我根据自己的需要稍微修改了这个答案,但效果很好!非常感谢:)

以上是关于HTML tbody only 只有一个标题列宽的主要内容,如果未能解决你的问题,请参考以下文章

如果表格只有一行,则 HTML 表格中的列宽会发生变化

jquery tablesorter将列宽调整为错误大小

CSS。仅当 TBODY 没有行时才显示 TFOOT

html table 列宽

HTML术语问题:TBODY vs P

列宽设置 - HTML 表格