โต๊ะล้นด้านนอก div


99

ฉันกำลังพยายามหยุดตารางที่มีการประกาศความกว้างอย่างชัดเจนไม่ให้ล้นเกินจากระดับdivบนสุด ฉันคิดว่าฉันสามารถทำได้โดยใช้วิธีใดวิธีหนึ่งmax-widthแต่ดูเหมือนจะไม่ได้ผล

รหัสต่อไปนี้ (มีหน้าต่างเล็กมาก) จะทำให้เกิดสิ่งนี้:

<style type="text/css">
  #middlecol {
    width: 45%;
    border-right:2px solid red;
  }
  #middlecol table {
    max-width:100% !important;
  }
</style>

<div id="middlecol">
  <center>
    <table width="400" cellpadding="3" cellspacing="0" border="0" align="center">
      <tr>
        <td bgcolor="#DDFFFF" align="center" colspan="2">
          <strong>Notification!</strong>
        </td>
      <tr>
        <td width="50">
          <img src="http://www.example.com/img.png" width="50" height="50" alt="" border="0">
        </td>
        <td>
          Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
        </td>
      </tr>
    </table>
  </center>
 </div>

เส้นสีแดงคือขอบด้านขวาของdivและถ้าคุณทำให้หน้าต่างเบราว์เซอร์มีขนาดเล็กคุณจะเห็นว่าตารางนั้นไม่พอดีกับมัน


2
นอกประเด็น: อย่าใช้<center>. เลิกใช้งานมาหลายปีแล้ว นอกจากนี้คุณมีalign="center"โต๊ะอยู่แล้ว
ЯegDwight

นี่เป็นสิ่งที่น่าเสียดายที่ฉันไม่สามารถควบคุมได้ เนื้อหาภายใน div นั้นรวมมาจากไฟล์ที่ฉันไม่ได้สร้างขึ้น ฉันแตะ CSS ได้เท่านั้น แต่ฉันจะกำจัด <center> ถ้าทำได้
waiwai933

คำตอบ:


25

หันกลับมาโดยทำ:

<style type="text/css">
  #middlecol {
    border-right: 2px solid red;
    width: 45%;
  }

  #middlecol table {
    max-width: 400px;
    width: 100% !important;
  }
</style>

นอกจากนี้ฉันขอแนะนำให้คุณ:

  • ไม่ใช้ centerแท็ก (เลิกใช้แล้ว)
  • อย่าใช้width, bgcolorคุณลักษณะพวกเขาตั้งโดย CSS ( widthและbackground-color)

(สมมติว่าคุณสามารถควบคุมตารางที่แสดงผลได้)


ถ้าฉันสร้างความกว้าง: 100% มันจะไม่สนใจระยะขอบของฉัน: ขวา ซึ่งทำให้เกิดการเลื่อนแถบแนวนอน
Jesse

217

คุณสามารถป้องกันตารางจากการขยายตัวเกิน div table-layout:fixedพ่อแม่ของพวกเขาโดยใช้

CSS ด้านล่างนี้จะทำให้ตารางของคุณขยายจนเท่ากับความกว้างของ div ที่อยู่รอบ ๆ

table 
{
    table-layout:fixed;
    width:100%;
}

ผมพบว่าเคล็ดลับนี้ที่นี่


67
สิ่งนี้บังคับให้คอลัมน์ทั้งหมดมีความกว้างเท่ากัน ... ไม่มีประโยชน์มากนัก
Serj Sagan

12
จริงๆแล้วคุณยังสามารถทำให้คอลัมน์มีความกว้างต่างกันได้คุณเพียงแค่ระบุความกว้าง<col>เป็น s หรือในแถวแรก<td>(เทียบกับการปล่อยให้มันไหลตามขนาดข้อความ) จาก MDN: "fixed: ความกว้างของตารางและคอลัมน์ถูกกำหนดโดยความกว้างขององค์ประกอบของตารางและ col หรือตามความกว้างของแถวแรกของเซลล์เซลล์ในแถวถัดมาจะไม่มีผลต่อความกว้างของคอลัมน์"
philfreo

1
ขอบคุณมาก. นี่เป็นความช่วยเหลือที่ยิ่งใหญ่ที่คุณทำให้ฉัน ...
Parthan_akon

69

การแก้ปัญหาคร่าวๆคือการตั้งค่าdisplay: tableบน div ที่มี


8
นี่เป็นสิ่งที่ยอดเยี่ยมตรงกับสิ่งที่ฉันกำลังมองหา เพื่อช่วยเหลือผู้อื่นต่อไปนี้เป็นสตริงที่ Google ได้: ฉันพยายามใช้ CSS เพื่อให้พอดีกับ div หลักเพื่อให้ล้นหรือพอดีกับพื้นหลังเพื่อให้ครอบคลุมเนื้อหาตารางที่ล้น มันทำงานได้อย่างสมบูรณ์ขอบคุณมาก!
trisweb

เป็นเพียงภาคผนวกโปรดให้ความสนใจกับบริบทที่นำไปใช้ซึ่งจะใช้เพื่อบอกเค้าโครงตารางเช่นพฤติกรรมและด้วยเหตุนี้การมีแอตทริบิวต์ลักษณะอื่น ๆ เช่น table-row, table-cell เค้าโครงตารางจะไม่ลอย ในเวลาที่แสดง: คุณสมบัติตารางอย่างเดียวไม่เพียงพอ
questzen

ยังมาที่นี่อีกหลายชั่วโมงหลังจากขุดหาคำตอบ สตริงสำหรับเครื่องมือค้นหา: ตารางภายใน div จะไม่เลื่อน Firefox Div พร้อมตารางจะไม่เลื่อน Firefox ไม่มีแถบเลื่อนปรากฏในตารางภายใน div
anevaude

2
ฉันได้ลองทำบางอย่างแล้ว แต่ฉันเพิ่งเพิ่มdisplay: tableไปที่ div พาเรนต์บนสุด ปัญหาได้รับการแก้ไขแล้วขอบคุณ
GünayGültekin

ทางออกที่ดีที่สุดสำหรับตารางที่มีชื่อส่วนหัวแบบยาวและเนื้อหาเซลล์แบบยาว ขอบคุณ!.
Ege Bayrak

35

ฉันลองวิธีแก้ไขปัญหาทั้งหมดที่กล่าวมาแล้วไม่ได้ผล ฉันมี 3 ตารางหนึ่งอยู่ด้านล่างอีกโต๊ะหนึ่ง คนสุดท้ายไหลล้น ฉันแก้ไขโดยใช้:

/* Grid Definition */
table {
    word-break: break-word;
}

สำหรับ IE11 ในโหมดขอบคุณต้องตั้งค่านี้เป็น word-break:break-all


12

ตอนแรกฉันใช้วิธีของ James Lawruk อย่างไรก็ตามสิ่งนี้เปลี่ยนความกว้างทั้งหมดของไฟล์td 's

วิธีแก้ปัญหาสำหรับฉันคือใช้white-space: normalกับคอลัมน์ (ซึ่งตั้งค่าเป็นwhite-space: nowrap) วิธีนี้ข้อความจะแตกเสมอ การใช้word-wrap: break-wordจะช่วยให้มั่นใจได้ว่าทุกอย่างจะพังเมื่อจำเป็นแม้จะพูดได้ครึ่งทางก็ตาม

CSS จะมีลักษณะดังนี้:

td, th {
    white-space: normal; /* Only needed when it's set differntly somewhere else */
    word-wrap: break-word;
}

นี่อาจไม่ใช่วิธีแก้ปัญหาที่ต้องการเสมอไปเนื่องจากword-wrap: break-wordอาจทำให้คำในตารางอ่านไม่ออก อย่างไรก็ตามจะทำให้ตารางของคุณมีความกว้างที่เหมาะสม


5

ฉันพยายามเกือบทั้งหมดข้างต้น แต่ไม่ได้ผลสำหรับฉัน ...

word-break: break-all;

สิ่งนี้จะถูกเพิ่มใน div พาเรนต์ (คอนเทนเนอร์ของตาราง)



0

คุณอาจลองใช้ CSS นี้ ฉันมีประสบการณ์ทำงานมาตลอด

div {
  border-style: solid;
  padding: 5px;
}

table {
  width: 100%;
  word-break: break-all;
  border-style: solid;
}
<div style="width:200px;">
  <table>
    <tr>
      <th>Col 1</th>
      <th>Col 2</th>
      <th>Col 3</th>
      <th>Col 4</th>
      <th>Col 5</th>
    </tr>
    <tr>
      <td>data 1</td>
      <td>data 2</td>
      <td>data 3</td>
      <td>data 4</td>
      <td>data 5</td>
    </tr>
    <table>
</div>


2
โปรดอย่าโพสต์คำตอบที่เหมือนกันสำหรับคำถามหลายข้อ เพียงตอบคำถามเดียวและแสดงความคิดเห็น (หรือตั้งค่าสถานะ / ปิดโหวตเมื่อคุณมีชื่อเสียง) ว่าคนอื่นซ้ำกัน สำหรับการอ้างอิงฉันกำลังอ้างถึงสิ่งนี้stackoverflow.com/a/63741405/2756409 , stackoverflow.com/a/63741355/2756409และstackoverflow.com/a/63741938/2756409
TylerH

นอกจากนี้โปรดระบุคำตอบที่ให้ข้อมูลใหม่เท่านั้น วิธีแก้ปัญหานี้word-break: break-wordมีให้โดยคำตอบมากมายที่นี่แล้ว
TylerH

@TylerH ขอบคุณสำหรับข้อเสนอแนะ
Kanab Paul

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