在没有JavaScript的情况下,是否可以将表格标题和大约<select>个过滤器放在表格的两个顶部边缘?

类似于:

My Orders Table                  [Select Year] [Select Month]

------------------------------------------------------------
|     date     |     amount    |          comments         |
------------------------------------------------------------
|   5.5.2020   |      $50      |        some_comment       |
------------------------------------------------------------
|  1.12.2022   |      $10      |        some_comment       |
------------------------------------------------------------
|   1.1.2023   |      $33      |        some_comment       |
------------------------------------------------------------

这是一个显示我需要的一般元素的片段,它根本没有设计,只是与上图匹配的元素

<p class="table_title"> My Orders Table </p>

<select id='year_select'>
  <option value=''>--Select Year--</option>
  <option value='2014'>2014</option>
  <option value='2015'>2015</option>
  <option value='2016'>2016</option>
  <option value='2017'>2017</option>
  <option value='2018'>2018</option>
  <option value='2019'>2019</option>
  <option value='2020'>2020</option>
  <option value='2021'>2021</option>
  <option value='2022'>2022</option>
  <option value='2023'>2023</option>
</select>

<select id='month_select'>
  <option value=''>--Select Month--</option>
  <option value='1'>January</option>
  <option value='2'>February</option>
  <option value='3'>March</option>
  <option value='4'>April</option>
  <option value='5'>May</option>
  <option value='6'>June</option>
  <option value='7'>July</option>
  <option value='8'>August</option>
  <option value='9'>September</option>
  <option value='10'>October</option>
  <option value='11'>November</option>
  <option value='12'>December</option>
</select>

<table>
  <tr>
    <th>Date</th>
    <th>Amount</th>
    <th>Comment</th>
  </tr>
  <tr>
    <td>5.5.2020</td>
    <td>$50</td>
    <td>some_comment</td>
  </tr>
  <tr>
    <td>1.12.2022</td>
    <td>$10</td>
    <td>some_comment</td>
  </tr>
  <tr>
    <td>1.1.2023</td>
    <td>$33</td>
    <td>some_comment</td>
  </tr>
</table>

对我来说,问题在于,HTML中的表格没有恒定的宽度,我还希望它具有响应性,并根据屏幕大小更改宽度.

因此,在页面呈现之前,表格宽度是未知的.

我不能用FLEX做到

推荐答案

请注意,您不希望将过滤器直接包括在表中,因为它们既不是数据的一部分,也不是表头的一部分.您还需要 for each <select>添加一个<label>,否则屏幕阅读器将不知道这些字段是做什么用的.例如,一旦 Select 了"2014",当下拉菜单被聚焦时,屏幕阅读器就会继续大声宣布"2014"--而不是例如."按年份筛选."

这也允许我们完全删除占位符-- Select Month --选项,尽管我们保留了初始的空白,以便用户仍然可以删除应用的筛选器.

话虽如此,下面是我处理这种设置的一种方法,使用<figure><figcaption>个元素来关联表及其头,使用BEM naming conventions个元素来关联类.

我也做出了响应,过滤器以较小的屏幕宽度向下漂浮在表格标题下面.

.orders {
  --orders-columns: 1;
  display: grid;
  grid-template-columns: repeat(var(--orders-columns), auto);
  column-gap: 2rem;
}

@media (min-width: 600px) {
  .orders {
    --orders-columns: 2;
  }
}

.orders__title {
  font-weight: bold;
}

.orders__filters {
  display: flex;
  align-items: flex-start;
}

@media (min-width: 600px) {
  .orders__filters {
    justify-content: flex-end;
  }
}

.orders__filter-label {
  display: block;
  padding-right: 0.5rem;
}

.orders__filter + .orders__filter-label {
  padding-left: 1rem;
}

.orders__table {
  grid-column: 1 / -1;
  /* remove browser-default styling so our caption aligns */
  border-collapse: collapse;
}

.orders__table th {
  text-align: left;
}

.orders__table th:last-child,
.orders__table td:last-child {
  /* align ending content with the filters above them */
  text-align: right;
}
<figure class='orders'>
  <figcaption class='orders__title'>My Orders Table</figcaption>
  <div class='orders__filters'>
    <label class='orders__filter-label' for='year-select' aria-label='Filter orders by year'>Year</label>
    <select class='orders__filter' name='year-select' id='year-select'>
      <option></option>
      <option value='2014'>2014</option>
      <option value='2015'>2015</option>
      <option value='2016'>2016</option>
      <option value='2017'>2017</option>
      <option value='2018'>2018</option>
      <option value='2019'>2019</option>
      <option value='2020'>2020</option>
      <option value='2021'>2021</option>
      <option value='2022'>2022</option>
      <option value='2023'>2023</option>
    </select>
    <label class='orders__filter-label' for='month-select' aria-label='Filter orders by month'>Month</label>
    <select class='orders__filter' name='month-select' id='month-select'>
      <option></option>
      <option value='1'>Janaury</option>
      <option value='2'>February</option>
      <option value='3'>March</option>
      <option value='4'>April</option>
      <option value='5'>May</option>
      <option value='6'>June</option>
      <option value='7'>July</option>
      <option value='8'>August</option>
      <option value='9'>September</option>
      <option value='10'>October</option>
      <option value='11'>November</option>
      <option value='12'>December</option>
    </select>
  </div>
  <table class='orders__table' aria-live='polite'>
    <thead>
      <th>Date</th>
      <th>Amount</th>
      <th>Comment</th>
    </thead>
    <tbody>
      <tr>
        <td>5.5.2020</td>
        <td>$50</td>
        <td>some_comment</td>
      </tr>
      <tr>
        <td>1.12.2022</td>
        <td>$10</td>
        <td>some_comment</td>
      </tr>
      <tr>
        <td>1.1.2023</td>
        <td>$33</td>
        <td>some_comment</td>
      </tr>
    </tbody>
  </table>
</figure>

Html相关问答推荐

卸载伪元素 destruct 了CSS

如何将grid—template—column应用于元素中的子元素

试图让三个Divs与下面的另外三个对齐

在浮动元素旁边垂直居中

如何让QML`Text`元素内的链接在悬停时显示鼠标指针?

当溢出到滚动条中时, bootstrap 按钮样式会更改

滚动平滑在笔记本电脑上不起作用,但在Nextjs网站的手机浏览器中起作用

Css网格:两列,除非小于150px

将导航项目底部边框与导航栏对齐

旧文本淡出,但新文本不会淡入,而是突然出现

带下划线的文本应该有延长的下划线,以使其图像悬停

有没有一种方法可以提高代码中tailwind 类名的可读性?

为什么溢出时overflow: auto框的底部有一个小间隙?

在HTML请求中添加源URL

当悬停时,同时影响相邻的两侧div

如何将背景与之前的内容正确对齐

th 内的 div 标签没有占据全高

父背景仅在子元素中可见

发光效果html动画

Bootstrap Grid System col 无法正常工作