สิ่งที่คุณต้องการคือ:
1) มีเนื้อความของตารางที่มีความสูง จำกัดเนื่องจากการเลื่อนเกิดขึ้นเฉพาะเมื่อเนื้อหามีขนาดใหญ่กว่าหน้าต่างการเลื่อน อย่างไรก็ตามtbody
ไม่สามารถปรับขนาดได้และคุณต้องแสดงเป็นblock
:
tbody {
overflow-y: auto;
display: block;
max-height: 10em; // For example
}
2) ซิงค์ส่วนหัวของตารางและความกว้างคอลัมน์ของตารางอีกครั้งเพื่อทำให้ส่วนหลังเป็นblock
องค์ประกอบที่ไม่เกี่ยวข้อง วิธีเดียวที่จะทำได้ก็คือการประสานจำลองโดยการบังคับใช้คอลัมน์เดียวกันความกว้างทั้ง
แต่เนื่องจากtbody
ตัวเองเป็นตอนนี้มันจะไม่ทำตัวเหมือนblock
table
เนื่องจากคุณยังต้องการtable
พฤติกรรมในการแสดงคอลัมน์ของคุณอย่างถูกต้องวิธีแก้ไขคือการขอให้แต่ละแถวของคุณแสดงเป็นรายบุคคลtable
:
thead {
display: table;
width: 100%; // Fill the containing table
}
tbody tr {
display: table;
width: 100%; // Fill the containing table
}
(โปรดทราบว่าการใช้เทคนิคนี้คุณจะไม่สามารถขยายข้ามแถวได้อีกต่อไป)
หลังจากที่ทำคุณสามารถบังคับใช้ความกว้างของคอลัมน์ที่จะมีความกว้างเท่ากันทั้งในและthead
tbody
คุณทำไม่ได้:
- แต่ละรายการสำหรับแต่ละคอลัมน์ (ผ่านคลาส CSS เฉพาะหรือการกำหนดสไตล์อินไลน์) ซึ่งค่อนข้างน่าเบื่อที่จะทำสำหรับแต่ละอินสแตนซ์ของตาราง
- สม่ำเสมอสำหรับคอลัมน์ทั้งหมด (ผ่าน
th, td { width: 20%; }
หากคุณมี 5 คอลัมน์ตัวอย่าง) ซึ่งเป็นประโยชน์มากกว่า (ไม่จำเป็นต้องตั้งค่าความกว้างสำหรับแต่ละอินสแตนซ์ของตาราง) แต่ไม่สามารถทำงานกับจำนวนคอลัมน์ใด ๆ ได้
- สม่ำเสมอสำหรับคอลัมน์ใด ๆ ที่นับผ่านเค้าโครงตารางคงที่
ฉันชอบตัวเลือกสุดท้ายที่ต้องการเพิ่ม:
thead {
table-layout: fixed; // Same layout for all cells
}
tbody tr {
table-layout: fixed; // Same layout for all cells
}
th, td {
width: auto; // Same width for all cells, if table has fixed layout
}
ดูตัวอย่างที่นี่แยกจากคำตอบสำหรับคำถามนี้