Buộc chiều rộng cột bảng luôn được cố định bất kể nội dung


89

Tôi có một bảng html với table-layout: fixedvà một td với chiều rộng đã đặt. Cột vẫn mở rộng để giữ nội dung của văn bản không chứa khoảng trắng. Có cách nào để khắc phục điều này ngoài việc gói nội dung của mỗi td trong một div không?

Ví dụ: http://jsfiddle.net/6p9K3/29/

<table>
    <tbody>
        <tr>
            <td style="width: 50px;">Test</td>
            <td>Testing 1123455</td>
        </tr><tr>
            <td style="width: 50px;">AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA</td>
            <td>B</td>
        </tr>
    </tbody>
</table>

table
{
    table-layout: fixed;
}

td
{
    border: 1px solid green;
    overflow: hidden;
}

Trong ví dụ này, bạn có thể thấy rằng cột có AAAAAAAAAAAA ... mở rộng mặc dù được đặt rõ ràng là rộng 50px.


Câu trả lời:


178

Chỉ định chiều rộng của bảng:

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

Xem jsFiddle


2
Nó cắt bớt nội dung
Vikash

7
Kinh ngạc! nó cũng hoạt động hoàn hảo với table-layout: fixed; width: 100%;.
Lucas Reppe Welander

22

Hãy thử xem xét CSS sau:

word-wrap:break-word;

Theo mặc định, trình duyệt web không nên chia nhỏ các "từ" nên những gì bạn đang gặp phải là hành vi bình thường của trình duyệt. Tuy nhiên, bạn có thể ghi đè điều này bằng chỉ thị CSS bọc từ.

Bạn sẽ cần đặt chiều rộng trên bảng tổng thể sau đó đặt chiều rộng trên các cột. "chiều rộng: 100%;" cũng nên được tùy thuộc vào yêu cầu của bạn.

Sử dụng word-wrap có thể không phải là điều bạn muốn tuy nhiên nó rất hữu ích để hiển thị tất cả dữ liệu mà không làm biến dạng bố cục.


2
Điều này, kết hợp với câu trả lời của Arie Shaw, giúp tôi có được hành vi mà tôi đang tìm kiếm. Cột luôn có cùng chiều rộng bất kể văn bản và nó bao bọc văn bản ngay cả khi không có khoảng trắng.
datadamnation

Tôi đang tìm một cái gì đó như thế này, tuy nhiên điều này có vẻ không hoạt động nếu bảng không được đặt thành bố trí bảng: đã sửa. Tuy nhiên, bố cục bảng cố định không thể tạo kiểu css nếu đầu bảng có một con lăn. Làm thế nào bạn làm cho word-wrap hoạt động trong một bảng? stackoverflow.com/questions/42371945/…
Manuel

12

Làm cho bàn đá vững chắc TRƯỚC khi css. Hình chiều rộng bảng của bạn, sau đó sử dụng hàng 'kiểm soát' theo đó mỗi td có chiều rộng rõ ràng, tất cả đều cộng với chiều rộng trong thẻ bảng.

Việc phải thực hiện hàng trăm email html để hoạt động ở mọi nơi, trước tiên hãy sử dụng đúng HTML, sau đó tạo kiểu w / css sẽ giải quyết được nhiều vấn đề trong tất cả IE, webkit và mozillas.

vì thế:

<table width="300" cellspacing="0" cellpadding="0">
  <tr>
    <td width="50"></td>
    <td width="100"></td>
    <td width="150"></td>
  </tr>
  <tr>
    <td>your stuff</td>
    <td>your stuff</td>
    <td>your stuff</td>
  </tr>
</table>

Sẽ giữ một bảng có chiều rộng 300px. Xem hình ảnh có kích thước lớn hơn chiều rộng theo các điểm cực trị


1
w3school nói không được hỗ trợ trong html5
v.oddou

Các widththuộc tính được chấp nhận, bạn có sử dụng CSS widthtài sản hoặc, các khuyến cáo HTML 5 cách để chiều rộng cột thiết lập, sử dụng <colgroup><col>các yếu tố ngay sau <table>thẻ và trước khi bất kỳ <thead>, <tbody>hoặc <tr>các yếu tố.
S. Esteves

9

Bạn có thể thêm a divvào td, sau đó tạo kiểu đó. Nó sẽ hoạt động như bạn mong đợi.

<td><div>AAAAAAAAAAAAAAAAAAA</div></td>

Sau đó, css.

td div { width: 50px; overflow: hidden; }

3

Bạn cũng có thể làm việc với "tràn: ẩn" hoặc "tràn-x: ẩn" (chỉ cho chiều rộng). Điều này yêu cầu chiều rộng xác định (và / hoặc chiều cao?) Và có thể là cả "display: block".

"Overflow: Hidden" ẩn toàn bộ nội dung, không vừa với ô đã xác định.

Thí dụ:

http://jsfiddle.net/NAJvp/

HTML:

<table border="1">
    <tr>
        <td><div>aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div></td>
        <td>bbb</td>
        <td>cccc</td>
    </tr>
</table>

CSS:

td div { width: 100px; overflow-y: hidden; }

CHỈNH SỬA: Xấu hổ về tôi, tôi đã thấy, bạn đã sử dụng "tràn". Tôi đoán nó không hoạt động, bởi vì bạn không đặt "display: block" cho phần tử của mình ...


0

Tôi sẽ thử đặt nó thành max-width: 50px;


và chiều rộng: 50px; nếu bạn thực sự muốn có chiều rộng cố định.
Adrian P.

0

Bạn cũng có thể sử dụng tỷ lệ phần trăm và / hoặc chỉ định trong tiêu đề cột:

<table width="300">  
  <tr>
    <th width="20%">Column 1</th>
    <th width="20%">Column 2</th>
    <th width="20%">Column 3</th>
    <th width="20%">Column 4</th>
    <th width="20%">Column 5</th>
  </tr>
  <tr>
    <!--- row data -->
  </tr>
</table>

Phần thưởng với tỷ lệ phần trăm là bảo trì mã thấp hơn: bạn có thể thay đổi chiều rộng bảng của mình mà không cần phải chỉ định lại chiều rộng cột.

Lưu ý: Tôi hiểu rằng chiều rộng bảng được chỉ định bằng pixel không được hỗ trợ trong HTML 5; bạn cần sử dụng CSS để thay thế.


-1

Điều này phù hợp với tôi

td::after { 
content: ''; 
display: block; 
width: 30px;
}
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.