2011-07-06 48 views
82

Tôi đang gặp sự cố với bảng html đang tràn bộ chứa chính của nó. Tôi đã thiết lập a sample jsfiddle here để minh họa sự cố.Bảng chiều rộng 100% tràn div container

Làm cách nào để buộc cả văn bản tiêu đề và văn bản ô bảng được bọc theo cách nó sẽ vừa với vùng chứa của nó? Tôi muốn có một phương pháp CSS duy nhất nhưng tôi cũng mở để sử dụng Javascript (hoặc jQuery) nếu hoàn toàn cần thiết.

Trả lời

142

Từ một "làm cho nó phù hợp trong div" quan điểm thuần túy, thêm dòng sau vào lớp bảng của bạn (jsfiddle):

table-layout:fixed; 
width: 100%; 

Xem fixed so automatic bố trí bảng.

+30

Vấn đề là phương pháp này làm cho tất cả các cột có cùng chiều rộng, không chính xác lý tưởng –

+1

@SerjSagan Nó chỉ làm cho các cột có cùng chiều rộng vì chúng tôi chưa đặt chiều rộng cho bất kỳ cột nào. Trong trường hợp không có chiều rộng cột, thuật toán chiều rộng cố định phân phối chiều rộng bảng còn lại đồng đều giữa các cột chưa được phân loại. Trong trường hợp này, nó có chiều rộng bảng 100% trên 5 cột. Đó là loại điểm của 'bố cục bảng: cố định' ... bố cục có thể dự đoán được và không điều chỉnh thành nội dung. Hoặc bạn chỉ định chiều rộng cột hoặc thuật toán quyết định cho bạn. – canon

+0

@canon Tôi vừa nhận ra rằng tính năng này không hoạt động khi bạn đổi kích thước ô có chiều rộng tối thiểu, ít nhất là trong Chrome. Xem http://jsfiddle.net/dtttLqgw/1/. – needfulthing

10

Thêm display: block;overflow: auto; to .my-table. Điều này sẽ chỉ đơn giản là cắt bỏ bất cứ điều gì vượt quá giới hạn 280px bạn thực thi. Không có cách nào để làm cho nó "trông khá" với yêu cầu đó do các từ như pélagosthrough rộng hơn 280px.

1

Vâng, với những hạn chế của bạn, tôi nghĩ rằng thiết lập overflow: scroll; trên .page div có lẽ là lựa chọn duy nhất của bạn. 280 px là khá hẹp, và cho kích thước phông chữ của bạn, từ gói một mình sẽ không làm điều đó. Một số từ chỉ dài và không thể được bao bọc. Bạn có thể giảm kích thước phông chữ của bạn một cách đáng kể hoặc đi với tràn: cuộn.

36

Hãy thử thêm

word-break: break-all 

với CSS trên yếu tố bảng của bạn.

Điều đó sẽ nhận được các từ trong các ô của bảng để phá vỡ sao cho bảng không phát triển rộng hơn div chứa của nó, nhưng các cột trong bảng vẫn có kích thước động. jsfiddle demo.

+5

Thậm chí tốt hơn với 'word-wrap: break-word; ' – Apolo

+1

@Apolo - Đồng ý! Tôi đã sử dụng nó trong bản demo jsfiddle gốc của tôi (xem liên kết trong phần câu trả lời ở trên). –

+0

Trình duyệt nhấp nháy có 'word-break: break-word' hoạt động tốt nhất. – Volvox

0

Hãy thử thêm vào td:

display: -webkit-box; // to make td as block 
word-break: break-word; // to make content justify 

tds tràn sẽ phù hợp với hàng mới.

Các vấn đề liên quan