โซลูชัน CSS ที่แท้จริงที่มีแถวส่วนหัวคงที่และคอลัมน์แรก
ฉันต้องสร้างตารางที่มีทั้งส่วนหัวคงที่และคอลัมน์แรกคงที่โดยใช้ CSS บริสุทธิ์และไม่มีคำตอบใดที่ตรงนี้เป็นสิ่งที่ฉันต้องการ
position: sticky
คุณสมบัติรองรับการติดทั้งสองไปด้านบน (เท่าที่ผมเคยเห็นมันใช้มากที่สุด) และด้านข้างในรุ่นที่ทันสมัยของ Chrome, Firefox และขอบ สิ่งนี้สามารถใช้ร่วมกับdiv
ที่มีoverflow: scroll
คุณสมบัติเพื่อให้ตารางที่มีส่วนหัวคงที่ซึ่งสามารถวางไว้ที่ใดก็ได้บนหน้าของคุณ
วางโต๊ะของคุณในภาชนะ:
<div class="container">
<table></table>
</div>
ใช้overflow: scroll
บนคอนเทนเนอร์ของคุณเพื่อเปิดใช้งานการเลื่อน:
div.container {
overflow: scroll;
}
ในฐานะที่เป็นDagmarชี้ให้เห็นในความคิดเห็นที่ภาชนะที่ยังต้องและmax-width
max-height
ใช้position: sticky
ที่จะมีเซลล์โต๊ะติดกับขอบและtop
, right
หรือleft
เลือกที่ทันสมัยเพื่อติด:
thead th {
position: -webkit-sticky;
position: sticky;
top: 0;
}
tbody th {
position: -webkit-sticky;
position: sticky;
left: 0;
}
ตามที่MarredCheeseกล่าวไว้ในความคิดเห็นหากคอลัมน์แรกของคุณมี<td>
องค์ประกอบแทนที่จะเป็น<th>
องค์ประกอบคุณสามารถใช้tbody td:first-child
ใน CSS ของคุณแทนtbody th
หากต้องการให้ส่วนหัวในคอลัมน์แรกติดทางซ้ายให้ใช้:
thead th:first-child {
left: 0;
z-index: 1;
}
div {
max-width: 400px;
max-height: 150px;
overflow: scroll;
}
thead th {
position: -webkit-sticky;
position: sticky;
top: 0;
}
tbody th {
position: -webkit-sticky;
position: sticky;
left: 0;
}
thead th:first-child {
left: 0;
z-index: 2;
}
thead th {
background: #000;
color: #FFF;
z-index: 1;
}
tbody th {
background: #FFF;
border-right: 1px solid #CCC;
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/