เพิ่มแถบเลื่อนแนวนอนลงในตาราง html


142

มีวิธีเพิ่มแถบเลื่อนแนวนอนในตาราง HTML หรือไม่? จริง ๆ แล้วฉันต้องการให้เลื่อนได้ทั้งแนวตั้งและแนวนอนขึ้นอยู่กับการเติบโตของตาราง แต่ฉันไม่สามารถเลื่อนแถบเลื่อนได้


3
... คิดเกี่ยวกับการวางโต๊ะทั้งหมดใน div หรือไม่? ... แล้วเพิ่มตัวเลื่อนไปที่ div?
เวกเตอร์

3
อาจถึงเวลาเปลี่ยนคำตอบที่เป็นคำตอบที่ยอมรับหรือไม่
Serge Stroobandt

คำตอบ:


82

คุณลองoverflowคุณสมบัติCSS หรือไม่

overflow: scroll; /* Scrollbar are always visible */
overflow: auto;   /* Scrollbar is displayed as it's needed */

อัปเดต
เมื่อผู้ใช้รายอื่นกำลังชี้ให้เห็นสิ่งนี้ไม่เพียงพอที่จะเพิ่มแถบเลื่อน
ดังนั้นโปรดดูและโหวตความคิดเห็นและคำตอบด้านล่าง


15
จากความพยายามของฉันเองและทุกสิ่งทุกอย่างที่ฉันได้อ่านบนอินเทอร์เน็ตมันก็ไม่ได้ผล คุณสามารถล้นองค์ประกอบ wrapper แน่นอน แต่ไม่ตารางตัวเอง
bloudermilk

21
@bloudermilk display: blockคุณสามารถถ้าคุณเพิ่ม
Cees Timmerman

244

ก่อนอื่นทำdisplay: blockตารางของคุณ

แล้วตั้งไปoverflow-x:auto

table {
    display: block;
    overflow-x: auto;
    white-space: nowrap;
}

สวยและสะอาด ไม่มีการจัดรูปแบบฟุ่มเฟือย

ต่อไปนี้เป็นตัวอย่างที่เกี่ยวข้องกับการเพิ่มคำอธิบายตารางจากหน้าเว็บในเว็บไซต์ของฉัน


3
สิ่งนี้ใช้ได้กับฉันใน Chrome แต่หลังจากบีบทุกอย่างเข้าด้วยกัน white-space: nowrap;ช่วยทันทีที่เห็นแถบเลื่อน
Cees Timmerman

28
ฉันเคยลองมาก่อน ปัญหาเดียวก็คือเซลล์ตารางไม่เต็มความกว้างของตารางอีกต่อไป
Shevy

4
ดังที่คนอื่น ๆ พูดว่าสิ่งนี้ทำงานไม่ถูกต้อง: แถวของตารางไม่ได้เติมความกว้างของตาราง
collimarco

1
@SergeStroobandt ไม่ในกรณีของฉันwhite-space: nowrap;ไม่สามารถแก้ปัญหาได้ (ทดสอบบน Firefox) ความกว้างของแถวน้อยกว่าความกว้างของตารางเมื่อเนื้อหา (ข้อความ) ไม่เพียงพอที่จะขยายแถว
collimarco

3
@collimarco หมายเหตุฉันต้องใช้ความกว้างสูงสุด: 100% สำหรับตัวเลือกบล็อกแบบอินไลน์
dogoncouch

40

ล้อมรอบตารางใน DIV ตั้งค่าด้วยรูปแบบต่อไปนี้:

div.wrapper {
  width: 500px;
  height: 500px;
  overflow: auto;
}

8
ดูเหมือนว่าที่overflow:autoนี่ไม่จำเป็น คุณรู้หรือไม่ว่าเพื่อให้บรรลุสิ่งนี้โดยไม่ได้ตั้งค่าความกว้าง ... ซึ่งมักจะเป็นคำตอบใน html - hardcode ความกว้างหรือความสูงบางส่วน แต่ที่ดูเหมือนจะเอาชนะจุดที่มีเครื่องมือเค้าโครง!
JonnyRaa

17

ใช้แอตทริบิวต์ CSS " overflow " สำหรับสิ่งนี้

สรุปสั้น ๆ:

overflow: visible|hidden|scroll|auto|initial|inherit;

เช่น

table {
    display: block;
    overflow: scroll;
}

ลิงก์ที่ให้ไว้เสียหาย
justingordon

12

ฉันประสบความสำเร็จในการแก้ปัญหาที่เสนอโดย @Serge Stroobandt แต่ฉันพบปัญหาที่ @Shevy มีกับเซลล์จากนั้นไม่เติมเต็มความกว้างของตาราง tbodyผมสามารถที่จะแก้ไขปัญหานี้โดยการเพิ่มรูปแบบบางอย่างเพื่อ

table {
  display: block;
  overflow-x: auto;
  white-space: nowrap;
}

table tbody {
  display: table;
  width: 100%;
}

สิ่งนี้ใช้ได้กับฉันใน Firefox, Chrome และ Safari บน Mac


10

ฉันไม่สามารถใช้วิธีแก้ไขปัญหาใด ๆ ข้างต้นได้ อย่างไรก็ตามฉันพบแฮ็ค:

body {
  background-color: #ccc;
}

.container {
  width: 300px;
  background-color: white;
}

table {
  width: 100%;
  border-collapse: collapse;
}

td {
  border: 1px solid black;
}

/* try removing the "hack" below to see how the table overflows the .body */
.hack1 {
  display: table;
  table-layout: fixed;
  width: 100%;
}

.hack2 {
  display: table-cell;
  overflow-x: auto;
  width: 100%;
}
<div class="container">

  <div class="hack1">
    <div class="hack2">

      <table>
        <tr>
          <td>table or other arbitrary content</td>
          <td>that will cause your page to stretch</td>
        </tr>
        <tr>
          <td>uncontrollably</td>
          <td>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</td>
        </tr>
      </table>

    </div>
  </div>

</div>


ไม่มีการทำงานใด ๆ สำหรับฉัน แต่อย่างใด ขอขอบคุณ
Gábriel

@Gábrielดีใจที่ได้ผลกับคุณ ฉันลองอีกครั้งตอนนี้ใน Firefox และดูเหมือนว่าจะไม่ถูกต้อง :-( i.imgur.com/BcjSaCV.png Chrome ยังคงดูดีอยู่
mpen

1
แปลก; ฉันใช้มันอย่างถูกต้องบน Firefox และทำงานได้ที่นั่น - แม้ว่าจะไม่ได้อยู่ในการตั้งค่าที่แน่นอนนี้ ฉันต้องการสร้างกริดขนาดใหญ่ที่ประกอบด้วย 10 x 10 px divs ที่มีเส้นขอบที่ยุบและความกว้างสูงสุด + maxflow-x: auto ดูเหมือนว่าจะเป็นกุญแจสำคัญ ทุกอย่างดูสมบูรณ์แบบ นอกจากนี้ฉันไม่ได้ใช้ <table> เลยเพียง divs กับ display: table, table-row และ table-cell
กาเบรียล

10

นี่คือการปรับปรุงคำตอบของSerge Stroobandtและทำงานได้อย่างสมบูรณ์แบบ มันแก้ปัญหาของตารางที่ไม่เติมเต็มความกว้างของหน้าถ้ามันมีคอลัมน์น้อย

<style> 
 .table_wrapper{
    display: block;
    overflow-x: auto;
    white-space: nowrap;
}
</style>

<div class="table_wrapper">
<table>
...
</table>
</div>

2
white-space: nowrap;น่าจะเป็นตัวเลือก
Mike Shiyan


2

ฉันหาคำตอบนี้จากคำตอบก่อนหน้านี้และมันเป็นความคิดเห็นและเพิ่มการปรับเปลี่ยนของฉันเอง สิ่งนี้ใช้ได้กับฉันบนตารางการตอบสนอง

table {
  display: inline-block;
  overflow-x: auto;
  white-space: nowrap;
  // make fixed table width effected by overflow-x
  max-width: 100%;
  // hide all borders that make rows not filled with the table width
  border: 0;
}
// add missing borders
table td {
  border: 1px solid;
}

@Saeed คุณหมายถึงบางอย่างเช่นโครงสร้าง HTML หรือไม่
จอร์จ

ไม่ดีของฉันฉันหมายถึงเพิ่มคำอธิบายเพิ่มเติมเพื่อช่วยให้เข้าใจได้ดีขึ้น
Mastisa

หวังว่าเวอร์ชั่นนี้จะมีความชัดเจนมากขึ้น
จอร์จ


-2
//Representation of table
<div class="search-table-outter">
<table class="table table-responsive search-table inner">
</table>
</div>

//Css to make Horizontal Dropdown

<style>

    .search-table{table-layout: auto; margin:40px auto 0px auto; }
    .search-table, td, th {
        border-collapse: collapse;
    }
th{padding:20px 7px; font-size:15px; color:#444;}
td{padding:5px 10px; height:35px;}
    .search-table-outter { overflow-x: scroll; }
th, td { min-width: 200px; }


</style>

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