Bảng tràn ra bên ngoài div


94

Tôi đang cố gắng ngăn một bảng có chiều rộng được khai báo rõ ràng khỏi tràn ra bên ngoài bảng cha của nó div. Tôi cho rằng tôi có thể làm điều này theo một cách nào đó bằng cách sử dụng max-width, nhưng tôi dường như không thể làm cho điều này hoạt động.

Đoạn mã sau (với một cửa sổ rất nhỏ) sẽ gây ra điều này:

<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>

Đường màu đỏ là đường viền bên phải của divvà nếu bạn làm cho cửa sổ trình duyệt của mình nhỏ lại, bạn sẽ thấy rằng bảng không vừa với nó.


2
Lạc đề: không sử dụng <center>. Nó đã không được chấp nhận trong nhiều năm. Ngoài ra, bạn đã có một align="center"trên bàn của bạn.
ЯegDwight

Đây là điều đáng tiếc tôi không thể kiểm soát được. Nội dung bên trong div thực sự được bao gồm từ một tệp không phải do tôi tạo. Tôi chỉ có thể chạm vào CSS, nhưng tôi sẽ loại bỏ <center> nếu có thể.
Waiwai933 13/02/10

Câu trả lời:


24

Hãy xoay chuyển tình thế bằng cách:

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

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

Ngoài ra, tôi sẽ khuyên bạn:

  • Không sử dụng centerthẻ (nó không được dùng nữa)
  • Không sử dụng width, bgcolorthuộc tính, hãy đặt chúng bằng CSS ( widthbackground-color)

(giả sử rằng bạn có thể kiểm soát bảng được hiển thị)


Nếu tôi tạo chiều rộng: 100% nó bỏ qua lề của tôi: phải. điều này gây ra cuộn thanh ngang
Jesse

208

Bạn có thể ngăn các bảng mở rộng ra ngoài div mẹ của chúng bằng cách sử dụng table-layout:fixed.

CSS bên dưới sẽ làm cho các bảng của bạn mở rộng theo chiều rộng của div bao quanh nó.

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

Tôi tìm thấy thủ thuật này ở đây .


63
Tất cả các cột lực lượng này là cùng một chiều rộng ... không phải là rất hữu ích
Serj Sagan

11
Trên thực tế, bạn vẫn có thể làm cho các cột có độ rộng khác nhau, bạn chỉ cần chỉ định độ rộng theo <col>s hoặc trên <td>s của hàng đầu tiên (so với để nó chảy dựa trên kích thước văn bản). Từ MDN: "fixed: Chiều rộng bảng và cột được đặt bằng chiều rộng của phần tử bảng và cột hoặc bằng chiều rộng của hàng ô đầu tiên. Các ô trong các hàng tiếp theo không ảnh hưởng đến chiều rộng cột."
philfreo

1
cảm ơn bạn rất nhiều. Đây là một sự giúp đỡ lớn mà bạn đã làm cho tôi ...
Parthan_akon

67

Một công việc thô sơ xung quanh là đặt display: tabletrên div chứa.


8
Điều này thật tuyệt vời, chính xác là những gì tôi đang tìm kiếm. Để giúp những người khác, đây là một số chuỗi có thể google: Tôi đang cố gắng sử dụng CSS để phù hợp với div mẹ để làm tràn hoặc phù hợp với nền để che nội dung bảng bị tràn. Điều này hoạt động hoàn hảo, cảm ơn rất nhiều!
trisweb, 12/12/12

Chỉ là một phần bổ sung, hãy chú ý đến ngữ cảnh nơi điều này được áp dụng, điều này được sử dụng để truyền đạt bố cục bảng giống như hành vi và do đó sự hiện diện của các thuộc tính kiểu khác như table-row, table-cell. Bố cục dạng bảng không được thả nổi. Tại thời điểm hiển thị: chỉ thuộc tính bảng là không đủ
questzen

Cũng đã đến đây sau hàng giờ đào bới tìm câu trả lời. Chuỗi cho công cụ tìm kiếm: Bảng bên trong div sẽ không cuộn, firefox. Div với bảng sẽ không cuộn, firefox. Không có thanh cuộn nào xuất hiện bảng bên trong một div.
Anevaude

2
Tôi đã thử một vài cách nhưng tôi chỉ thêm bảng display: vào div chính trên cùng. Vấn đề đã được giải quyết, cảm ơn.
Günay Gültekin

Giải pháp tốt nhất cho các bảng có tên tiêu đề dài và nội dung ô dài. Cảm ơn!.
Ege Bayrak

34

Tôi đã thử tất cả các giải pháp được đề cập ở trên, sau đó không hoạt động. Tôi có 3 cái bàn bên dưới cái kia. Dòng cuối cùng đã qua. Tôi đã sửa nó bằng cách sử dụng:

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

Đối với IE11 ở chế độ cạnh, bạn cần đặt điều này thành word-break:break-all


12

Lúc đầu, tôi sử dụng phương pháp của James Lawruk. Tuy nhiên, điều này đã thay đổi tất cả chiều rộng củatd 's.

Giải pháp cho tôi là sử dụng white-space: normaltrên các cột (được đặt thành white-space: nowrap). Bằng cách này, văn bản sẽ luôn bị vỡ. Sử dụng word-wrap: break-wordsẽ đảm bảo rằng mọi thứ sẽ vỡ ra khi cần thiết, thậm chí là nửa chừng một từ.

Sau đó CSS ​​sẽ trông như thế này:

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

Đây có thể không phải lúc nào cũng là giải pháp mong muốn, vì word-wrap: break-wordcó thể làm cho các từ của bạn trong bảng trở nên khó đọc. Tuy nhiên, nó sẽ giữ cho bảng của bạn có chiều rộng phù hợp.


5

Tôi đã thử gần như tất cả các cách trên nhưng không hiệu quả với tôi ...

word-break: break-all;

Điều này sẽ được thêm vào div cha (vùng chứa của bảng.)



-3

Có một cái width="400"trên bàn, hãy xóa nó đi và nó sẽ hoạt động ...

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.