วิธีระบุความสูงของตารางเพื่อให้แถบเลื่อนแนวตั้งปรากฏขึ้น?


101

ฉันมีตารางที่มีหลายแถวในเพจของฉัน ฉันต้องการกำหนดความสูงของตารางพูดเป็น 500px เช่นถ้าความสูงของโต๊ะใหญ่กว่านั้นแถบเลื่อนแนวตั้งจะปรากฏขึ้น ฉันพยายามใช้heightแอตทริบิวต์CSS tableแต่ไม่ได้ผล


1
อาจจะใช้max-heightแทนheightเช่นเดียวกับหลังจะบังคับให้ความสูงของโต๊ะเป็น500px
Fred

1
คุณอาจต้องการถามคำถามที่สองเกี่ยวกับการป้องกันไม่ให้แถวส่วนหัวเลื่อน ;)
Bill Bingham

คำตอบ:


173

ลองใช้overflowคุณสมบัติ CSS นอกจากนี้ยังมีคุณสมบัติแยกต่างหากเพื่อกำหนดลักษณะการทำงานของโอเวอร์โฟลว์แนวนอน ( overflow-x) และโอเวอร์โฟลว์แนวตั้ง ( overflow-y)

เนื่องจากคุณต้องการเพียงการเลื่อนแนวตั้งให้ลองทำดังนี้:

table {
  height: 500px;
  overflow-y: scroll;
}

แก้ไข:

เห็นได้ชัดว่า<table>องค์ประกอบไม่เคารพoverflowทรัพย์สิน สิ่งนี้ดูเหมือนจะเป็นเพราะ<table>องค์ประกอบไม่ได้รับการแสดงผลdisplay: blockตามค่าเริ่มต้น (จริงๆแล้วมีประเภทการแสดงผลของตัวเอง) คุณสามารถบังคับให้overflowคุณสมบัติทำงานได้โดยตั้งค่า<table>องค์ประกอบเป็นประเภทบล็อก:

table {
  display: block;
  height: 500px;
  overflow-y: scroll;
}

โปรดทราบว่าสิ่งนี้จะทำให้องค์ประกอบมีความกว้าง 100% ดังนั้นหากคุณไม่ต้องการให้ใช้ความกว้างแนวนอนทั้งหมดของหน้าคุณจะต้องระบุความกว้างที่ชัดเจนสำหรับองค์ประกอบด้วย


3
สิ่งนี้ไม่ได้จำกัดความสูง
Fred

6
ไม่ได้คุณแค่ต้องการdisplay:blockบนโต๊ะเพื่อให้มันทำงานเหมือนdiv jsfiddle.net/TSGSA/1
Fred

2
@ เฟรด: จิตใจดีคิดเหมือนกัน ฉันอัปเดตคำตอบขณะที่คุณแสดงความคิดเห็น :)
AgentConundrum

1
คำตอบนี้ช่วยฉันได้มาก แต่แทนที่จะใช้กับแท็กตารางควรทำกับ tbody เพื่อให้ส่วนหัวคงที่เมื่อเลื่อน จากนั้นมีสไตล์บางอย่างที่จะจัดเรียงตามพื้นที่ใน thead ที่อยู่เหนือแถบเลื่อน
David

7
หากคุณจะใช้สิ่งนี้กับร่างกายตรวจสอบให้แน่ใจว่าคุณได้เพิ่มการแสดงผล: บล็อกให้กับ thead (และอาจเป็น tfoot) หรืออาจจะบ้าไปหน่อย ดูเหมือนว่าปัญหาก็คือเมื่อคุณทำเช่นนี้คุณได้ทำลายการเชื่อมโยงระหว่างคอลัมน์ thead และ tbody: คอลัมน์ในอดีตไม่ทราบถึงความกว้างของหลัง คุณจึงปะและลงทางลาดลื่นที่คุณไป "ฉันตายเพื่อความสวยงาม ... "
Cuse70

59

คุณต้องห่อตารางไว้ในองค์ประกอบอื่นและตั้งค่าความสูงขององค์ประกอบนั้น ตัวอย่างด้วย inline css:

<div style="height: 500px; overflow: auto;">
 <table>
 </table>
</div>

9
สิ่งนี้จะไม่อนุญาตให้เก็บ Thead ไว้ในขณะที่คนเลื่อน
เดวิด

22
ข้อกำหนดนี้ไม่ได้อยู่ในคำถามเดิม
Dark Falcon

2
นอกจากนี้คำตอบอื่น ๆ (ที่ยอมรับ) ไม่ได้ทำให้ thead อยู่กับที่
Brock Adams

คุณยังสามารถทำให้ดูเหมือนว่ามีส่วนหัวอยู่ด้วยวิธีนี้ คุณซ่อนส่วนหัวของตารางจากนั้นสร้างตารางที่สองเหนือตารางแรกที่มีส่วนหัวอยู่ จากนั้นจัดรูปแบบตารางทั้งสองให้มีdisplay:table;แถวdisplay:table-row;และเซลล์ที่จะมีdisplay:table-cell;จากนั้นตารางทั้งสองจะจับคู่กันและดูเหมือนจะเป็นหนึ่งเดียว (หมายเหตุ: วิธีนี้ใช้ไม่ได้กับตารางขนาดใหญ่มากโดยทั่วไปแล้วจะจับคู่กับตารางเหล่านี้เมื่อทำได้ฉันใช้เทคนิคนี้หลายครั้ง)
levininja

1
แน่นอน ต้องระบุขนาดของผู้ปกครองเพื่อใช้ขนาดที่สัมพันธ์กัน ตัวอย่างเช่นjsfiddle.net/hz8wy
Dark Falcon

1

ในการกำหนดความสูงของตารางคุณต้องตั้งค่าคุณสมบัติ css "display: block" ก่อนจากนั้นคุณสามารถเพิ่มคุณสมบัติ "width / height" ได้ ฉันพบว่าบทความ Mozilla นี้เป็นแหล่งข้อมูลที่ดีมากในการเรียนรู้วิธีจัดรูปแบบตาราง: ลิงก์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.