水平滚动主体上的固定标题

问题描述 投票:0回答:1

我正在尝试创建一个表。我希望它的第一列得到修复。我已经使用以下方法完成了

  tr > th:first-child,
  tr > td:first-child {
    position: sticky;
    left: 0;
  }

这个效果很好。我想让所有标题也固定。上面的代码仅使第一个固定。我想连续修复所有 th 和第一个 td 。以及 tr 中除第一个之外的所有 td,可滚动。

这是我到目前为止所提供的表格和CSS。

<style>
  .container {
    margin: 0px;
   padding : 0px;
    overflow-x: auto;
  }

  table {
    font-family: "Open Sans", sans-serif;
    position: relative;
    border-collapse: collapse;
    border-spacing: 0;
    table-layout: auto;
    width: 100%;
    border: none;
    border-radius: 0.5rem;
    box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1),
      0 2px 4px -1px rgba(0, 0, 0, 0.06);
  }

  thead tr {
    color: #ececec;
    font-size: 1rem;
    font-weight: 500;
    text-align: left;
  }

  th {
    background: #eefecd;
    padding: 0.75rem 1.5rem;
    vertical-align: middle;
  }

  tbody tr:nth-child(odd) td {
    background: #fff;
  }

  tbody tr:nth-child(even) td {
    background: #ececec;
  }

  td {
    text-align: left;
    padding: 1.5rem 1.5rem;
    vertical-align: middle;
    font-size: 1.125rem;
    font-weight: normal;
  }

  tr:last-child td:first-child {
    border-bottom-left-radius: 0.5rem;
  }

  th:first-child {
    border-top-left-radius: 0.5rem;
  }

  tr:last-child td:last-child {
    border-bottom-right-radius: 0.5rem;
  }

  th:last-child {
    border-top-right-radius: 0.5rem;
  }

  tr > th:first-child,
  tr > td:first-child {
    position: sticky;
    left: 0;
  }
</style>

                            <div class="container p-0 m-0">
  <table>
    <thead>
      <tr>
        <th>DATA1</th>
        <th>DATA2</th>
        <th>DATA3</th>
        <th>DATA4</th>
        <th>DATA1</th>
        <th>DATA2</th>
        <th>DATA3</th>
        <th>DATA4</th>
        <th>DATA1</th>
        <th>DATA2</th>
        <th>DATA3</th>
        <th>DATA4</th>
        <th>DATA1</th>
        <th>DATA2</th>
        <th>DATA3</th>
        <th>DATA4</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
      </tr>
      <tr>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
      </tr>
      
    </tbody>
  </table>
</div>
html css scroll css-position
1个回答
0
投票

我可以通过在表格的

position: fixed
行上使用
tr
来做到这一点,希望对您有帮助!

.container {
  position: relative;
  margin: 0px;
  padding: 0px;
  overflow-x: auto;
}

table {
  font-family: "Open Sans", sans-serif;
  border-collapse: collapse;
  border-spacing: 0;
  table-layout: auto;
  width: 100%;
  border: none;
  border-radius: 0.5rem;
  box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);
}

thead tr {
  color: #ececec;
  font-size: 1rem;
  font-weight: 500;
  text-align: left;
}

th {
  background: black;
  padding: 0.75rem 1.5rem;
  vertical-align: middle;
}

tbody tr:nth-child(odd) td {
  background: #fff;
}

tbody tr:nth-child(even) td {
  background: #ececec;
}

td {
  text-align: left;
  padding: 1.5rem 1.5rem;
  vertical-align: middle;
  font-size: 1.125rem;
  font-weight: normal;
}

tr:last-child td:first-child {
  border-bottom-left-radius: 0.5rem;
}

th:first-child {
  border-top-left-radius: 0.5rem;
}

tr:last-child td:last-child {
  border-bottom-right-radius: 0.5rem;
}

th:last-child {
  border-top-right-radius: 0.5rem;
}

tr>td:first-child {
  position: sticky;
  left: 0;
}

thead>tr:first-child {
position: fixed;
left: 0px;
}

thead {
  height: 42px;
}
<div class="container p-0 m-0">
  <table>
    <thead>
      <tr>
        <th>DATA1</th>
        <th>DATA2</th>
        <th>DATA3</th>
        <th>DATA4</th>
        <th>DATA1</th>
        <th>DATA2</th>
        <th>DATA3</th>
        <th>DATA4</th>
        <th>DATA1</th>
        <th>DATA2</th>
        <th>DATA3</th>
        <th>DATA4</th>
        <th>DATA1</th>
        <th>DATA2</th>
        <th>DATA3</th>
        <th>DATA4</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
      </tr>
      <tr>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
        <td>Some values</td>
      </tr>

    </tbody>
  </table>
</div>

© www.soinside.com 2019 - 2024. All rights reserved.