고정 헤더 행과 첫 번째 열이있는 실제 순수 CSS 솔루션
순수한 CSS를 사용하여 고정 된 헤더와 고정 된 첫 번째 열이 모두있는 테이블을 만들어야했는데 여기에 내가 원하는 답변은 없었습니다.
이 position: sticky
속성은 Chrome, Firefox 및 Edge의 최신 버전에서 상단 (가장 많이 사용했듯이)과 측면을 모두 지원합니다. 이것은와 결합 될 수 div
를 가지overflow: scroll
페이지의 어느 곳에 나 배치 할 수있는 고정 헤더가있는 테이블을 제공 속성 할 수 있습니다.
테이블을 컨테이너에 넣으십시오.
<div class="container">
<table></table>
</div>
사용 overflow: scroll
스크롤 수 있도록 컨테이너를에 :
div.container {
overflow: scroll;
}
로 그마는 의견에서 지적, 용기도 필요 max-width
하고를 max-height
.
사용 position: sticky
가장자리에 테이블 셀을 가지고 스틱과 top
, right
또는 left
스틱에있는 가장자리를 선택합니다 :
thead th {
position: -webkit-sticky; /* for Safari */
position: sticky;
top: 0;
}
tbody th {
position: -webkit-sticky; /* for Safari */
position: sticky;
left: 0;
}
로 MarredCheese 코멘트에서 언급 한 첫 번째 열이 포함되어있는 경우, <td>
대신의 요소 <th>
요소를, 당신은 사용할 수 있습니다tbody td:first-child
당신의 CSS 대신의tbody th
첫 번째 열의 헤더를 왼쪽에 고정하려면 다음을 사용하세요.
thead th:first-child {
left: 0;
z-index: 1;
}
/* Use overflow:scroll on your container to enable scrolling: */
div {
max-width: 400px;
max-height: 150px;
overflow: scroll;
}
/* Use position: sticky to have it stick to the edge
* and top, right, or left to choose which edge to stick to: */
thead th {
position: -webkit-sticky; /* for Safari */
position: sticky;
top: 0;
}
tbody th {
position: -webkit-sticky; /* for Safari */
position: sticky;
left: 0;
}
/* To have the header in the first column stick to the left: */
thead th:first-child {
left: 0;
z-index: 2;
}
/* Just to display it nicely: */
thead th {
background: #000;
color: #FFF;
/* Ensure this stays above the emulated border right in tbody th {}: */
z-index: 1;
}
tbody th {
background: #FFF;
border-right: 1px solid #CCC;
/* Browsers tend to drop borders on sticky elements, so we emulate the border-right using a box-shadow to ensure it stays: */
box-shadow: 1px 0 0 0 #ccc;
}
table {
border-collapse: collapse;
}
td,
th {
padding: 0.5em;
}
<div>
<table>
<thead>
<tr>
<th></th>
<th>headheadhead</th>
<th>headheadhead</th>
<th>headheadhead</th>
<th>headheadhead</th>
<th>headheadhead</th>
<th>headheadhead</th>
<th>headheadhead</th>
</tr>
</thead>
<tbody>
<tr>
<th>head</th>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
</tr>
<tr>
<th>head</th>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
</tr>
<tr>
<th>head</th>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
</tr>
<tr>
<th>head</th>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
</tr>
<tr>
<th>head</th>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
</tr>
<tr>
<th>head</th>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
<td>body</td>
</tr>
</tbody>
</table>
</div>
https://jsfiddle.net/qwubvg9m/1/