2012-06-29 45 views
168

Với đánh dấu sau, làm cách nào để sử dụng CSS để buộc một ô (tất cả các ô trong cột) vừa với chiều rộng của nội dung trong đó thay vì kéo dài (đó là hành vi mặc định)?Chiều rộng ô phù hợp với nội dung

<style type="text/css"> 
td.block 
{ 
border: 1px solid black; 
} 
</style> 
<table style="width: 100%;"> 
<tr> 
    <td class="block">this should stretch</td> 
    <td class="block">this should stretch</td> 
    <td class="block">this should be the content width</td> 
</tr> 
</table> 

EDIT: Tôi nhận ra rằng tôi có thể mã hóa chiều rộng, nhưng tôi không muốn làm điều đó vì nội dung sẽ đi vào cột đó là động.

Nhìn vào hình ảnh bên dưới, hình ảnh đầu tiên là những gì đánh dấu sản xuất. Hình ảnh thứ hai là những gì tôi muốn.

enter image description here

+0

Tôi không hiểu câu hỏi của bạn. Bạn có muốn giới hạn cột cuối cùng thành độ rộng cụ thể không? – MetalFrog

+5

@diEcho Tôi nghĩ nó khá rõ ràng. Tôi sẽ thêm một hoặc hai bức ảnh. – Mansfield

+0

Có thể trùng lặp với [autowidth cột bảng CSS] (https://stackoverflow.com/questions/4757844/css-table-column-autowidth) – Vadzim

Trả lời

310

Tôi không chắc chắn nếu tôi hiểu câu hỏi của bạn, nhưng tôi sẽ mất một đâm vào nó. JSfiddle of the example.

HTML:

<table style="width: 100%;"> 
<tr> 
    <td class="block">this should stretch</td> 
    <td class="block">this should stretch</td> 
    <td class="block">this should be the content width</td> 
</tr> 
</table> 

CSS:

td{ 
    border:1px solid #000; 
} 

tr td:last-child{ 
    width:1%; 
    white-space:nowrap; 
} 
+1

lý do bạn viết '

' thay vì '
' – diEcho

+9

@diEcho Tôi không viết phần đó, đó là từ mã ví dụ. Bất kể, thực hành không tốt là sử dụng thuộc tính width trên các phần tử. Trong ví dụ nhanh này, CSS nội tuyến là tốt, nhưng nó phải được tóm tắt thành một tệp nếu đây là mã cấp sản xuất. – MetalFrog

+30

Một cách rõ ràng hơn để thực hiện IMO này là định nghĩa một kiểu gọi là "nostretch" (hoặc một cái gì đó tương tự), và sau đó chỉ định nghĩa nostretch trong CSS để có chiều rộng: 1% và phần thừa. Sau đó, TD cuối cùng sẽ có 'class = "nostretch block"'. Bằng cách đó bạn có thể "nostretch" bất kỳ tế bào nào bạn muốn. –

26

Thiết

max-width:100%; 
white-space:nowrap; 

sẽ giải quyết vấn đề của bạn.

+2

Tôi đã thử trên firefox và nó không hoạt động. – Adam

1

Đặt chiều rộng CSS thành 1% hoặc 100% phần tử theo tất cả thông số kỹ thuật tôi có thể tìm ra có liên quan đến phụ huynh. Mặc dù Blink Rendering Engine (Chrome) và Gecko (Firefox) tại thời điểm viết dường như xử lý 1% hoặc 100% (làm cho một cột co lại hoặc một cột để lấp đầy không gian trống), nó không được đảm bảo theo tất cả các đặc tả CSS Tôi có thể tìm thấy để làm cho nó đúng cách.

Một lựa chọn là để thay thế bảng với divs flex CSS4:

https://css-tricks.com/snippets/css/a-guide-to-flexbox/

đó làm việc trong các trình duyệt mới ví dụ: IE11 + xem bảng ở dưới cùng của bài viết.

1

Đối với tôi, đây là AutoFit tốt nhất và autoresize cho bảng và các cột của nó (sử dụng css! Quan trọng ... chỉ khi bạn có thể không phải không có)

.myclass table { 
    table-layout: auto !important; 
} 

.myclass th, .myclass td, .myclass thead th, .myclass tbody td, .myclass tfoot td, .myclass tfoot th { 
    width: auto !important; 
} 

Không chỉ định chiều rộng css cho bảng hoặc cho các cột trong bảng. Nếu nội dung bảng lớn hơn, nội dung bảng sẽ vượt quá kích thước màn hình.

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