Làm cách nào để đặt chiều rộng tối đa của một ô trong bảng bằng cách sử dụng tỷ lệ phần trăm?


100
<table>
<tr>
<td>Test</td>
<td>A long string blah blah blah</td>
</tr>
</table>

<style>
td{max-width:67%;}
</style>

Ở trên không hoạt động. Làm cách nào để đặt chiều rộng tối đa của một ô trong bảng bằng cách sử dụng tỷ lệ phần trăm?


Vui lòng mở rộng khi "không hoạt động" .
Sparky

1
Bạn phải đảm bảo PARENT của td của bạn có chiều rộng cụ thể (có thể là bạn chuyển width: 100%; tất cả các cách từ nội dung đến td của bạn hoặc bạn có thể cung cấp cho phụ huynh (tại đây: tr) 1000px hoặc bất kỳ thứ gì bạn muốn . Khi sử dụng %% trong css nó luôn luôn sử dụng px chính xác theo quy định tại phụ huynh và sau đó biến đổi px vào %% cho trẻ em, vì chúng có kích thước tương đối để cha mẹ của họ.
Philipp Meissner

Đối với bản ghi, chiều rộng tối đa hiện hoạt động trong Safari và Chrome. Tôi không chắc nó đã được hỗ trợ trong bao lâu.
Jacob

Câu trả lời:


71

Theo định nghĩa về chiều rộng tối đa trong thông số kỹ thuật CSS 2.1, “tác động của 'chiều rộng tối thiểu' và 'chiều rộng tối đa' trên các bảng, bảng nội dòng, ô bảng, cột bảng và nhóm cột là không xác định." Vì vậy, bạn không thể đặt trực tiếp chiều rộng tối đa trên một phần tử td.

Nếu bạn chỉ muốn cột thứ hai chiếm nhiều nhất 67%, thì bạn có thể đặt chiều rộng (có hiệu lực là chiều rộng tối thiểu, đối với các ô trong bảng) thành 33%, ví dụ: trong trường hợp ví dụ

td:first-child { width: 33% ;}

Đặt điều đó cho cả hai cột sẽ không hoạt động tốt, vì nó có xu hướng khiến trình duyệt cung cấp cho các cột chiều rộng bằng nhau.


Trên thực tế, chiều rộng tối đa hiện hoạt động trong Safari và Chrome. Tôi không chắc nó đã được hỗ trợ trong bao lâu.
Jacob

114

Câu hỏi cũ mà tôi biết, nhưng điều này bây giờ có thể sử dụng thuộc tính css table-layout: fixedtrên thẻ bảng. Câu trả lời bên dưới từ câu hỏi này Chiều rộng phần trăm CSS và tràn văn bản trong một ô bảng

Điều này có thể dễ dàng thực hiện bằng cách sử dụng table-layout: fixed, nhưng hơi phức tạp vì không nhiều người biết về thuộc tính CSS này.

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

Xem nó hoạt động tại fiddle cập nhật tại đây: http://jsfiddle.net/Fm5bM/4/


2
Cảm ơn! Tôi sợ cố định có nghĩa là nó sẽ không tính toán lại chiều rộng của các ô không có bất kỳ chiều rộng nào được đặt, nhưng may mắn là không phải vậy.
fassl

4
Trong jsfiddle của bạn, nếu tôi loại bỏ các thuộc tính chiều rộng thì chiều rộng tối đa vẫn không hoạt động vì vậy không chắc cách này giải quyết vấn đề như thế nào.
frezq

4
@superphonic Tôi nghĩ bạn đang nhầm lẫn. Nếu bạn loại bỏ max-widthjsfiddle đó, chiều rộng sẽ vẫn giữ nguyên vì vậy nó không phải là max-widththứ thiết lập nó. Nó có thể rõ ràng hơn nếu bạn thay thế nó bằng max-width: 10%lần đầu tiên td... bạn sẽ thấy rằng nó không thay đổi. jsfiddle.net/w3f8ey22/1
frezq

4
bố cục bảng: đã sửa không giải quyết được vấn đề OP. Nó không làm cho 'chiều rộng tối thiểu' hoạt động trên một ô bảng một cách kỳ diệu. Cả hai fiddles được tham chiếu không có sự khác biệt về hiển thị nếu bảng-layout: fixed bị loại bỏ.
cmerriman

2
câu trả lời này là sai lầm vì nó không liên quan đến câu hỏi
Zoltán Sule

8

Tôi biết đây là nghĩa đen của một năm sau, nhưng tôi nghĩ rằng tôi sẽ chia sẻ. Tôi đã cố gắng làm điều tương tự và nhận ra giải pháp này phù hợp với tôi. Chúng tôi đặt chiều rộng tối đa cho toàn bộ bảng, sau đó làm việc với các kích thước ô để có hiệu ứng mong muốn.

Đặt bảng trong div của chính nó, sau đó đặt chiều rộng, chiều rộng tối thiểu và / hoặc chiều rộng tối đa của div như mong muốn cho toàn bộ bảng. Sau đó, bạn có thể làm việc và đặt chiều rộng và chiều rộng tối thiểu cho các ô khác và chiều rộng tối đa cho div làm việc hiệu quả xung quanh và ngược lại để đạt được chiều rộng tối đa mà chúng tôi muốn.

<div id="tablediv">
<table width="100%">
 <tr>
  <td class="tdleft">Test</td>
  <td>A long string blah blah blah</td>
 </tr>
</table>
</div>

Sau đó, trong phong cách của bạn đặt:

#tablediv {
    width:90%;
    min-width:800px
    max-width:1500px;
}
.tdleft {
    width:20%;
    min-width:200px;
}

Phải thừa nhận rằng điều này không cung cấp cho bạn chiều rộng "tối đa" của mỗi ô, nhưng nó cho phép một số điều khiển có thể hoạt động thay cho tùy chọn như vậy. Không chắc liệu nó có phù hợp với nhu cầu của bạn hay không. Tôi biết nó phù hợp với tình huống của chúng tôi khi chúng tôi muốn phần điều hướng trong trang tăng và giảm xuống một điểm nhưng đối với tất cả các màn hình rộng hiện nay.


0

phần trăm phải tương đối với kích thước tuyệt đối, hãy thử điều này:

<table>
<tr>
<td>Testasdas 3123 1 dasd as da</td>
<td>A long string blah blah blah</td>
</tr>
</table>

<style>
table{width:200px;}
td{width:65%;border:1px solid black;}
</style>
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.