2011-04-20 31 views
18

Trong ví dụ bên dưới, cũng có sẵn here, cả WebKit (Safari 5, Chrome 10.0.648.205) và Mozilla (FF 4) giữ DIV div quanh chiều rộng có thể nhìn thấy của cửa sổ trình duyệt, trong khi TABLE là rộng như nội dung của nó.TABLE rộng hơn có chứa DIV

Tôi mong đợi DIV sẽ phát triển rộng như BẢNG, nhưng vì hành vi nhất quán trên các trình duyệt, tôi nghi ngờ đây là một tính năng chứ không phải là lỗi.

Điều thú vị là nếu DIV được đặt là có dấu phẩy: bên trái, it does grow as wide as the table.

Mọi giải thích?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> 
<html> 
<head> 
<title>Wide Table</title> 
<style> 

#container { 
    background-color:blue; 
/* float:left;*/ 
} 

</style> 
</head> 
<body> 
    <div id="container"> 
    <table > 
     <tr id="tr"> 
     <td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td><td>Table&nbsp;Cell</td> 
     </tr> 
    </table> 
    </div> 
</body> 
</html> 
+2

Câu hỏi của bạn đã trả lời câu hỏi của tôi! "Tăng trưởng" nổi là những gì tôi đang tìm kiếm. Thiết lập hiển thị cho inline-block cũng hoạt động, và là những gì tôi cuối cùng giải quyết trên. – Chris

Trả lời

25

Các phần tử khối có chiều rộng của bố mẹ theo mặc định, không phải chiều rộng của nội dung; chiều cao mặt khác, hoạt động theo cách khác xung quanh: các phần tử khối lấy chiều cao của nội dung của chúng theo mặc định thay vì chiều cao của bố mẹ chúng. Mọi thứ hoạt động theo cách này vì HTML/CSS được xây dựng xung quanh bố cục thông thường từ trên xuống dưới của văn bản tiếng Anh.

Vì vậy, bạn #container mất độ rộng của <body> và sau đó là <table> bên #container tràn bên ngoài #container. Nếu bạn đặt overflow: hidden trên #container, bạn sẽ cắt <table>, overflow-x: auto; trên #container sẽ thêm thanh cuộn.

CẬP NHẬT: Theo như các yếu tố nổi được quan tâm, các CSS3 spec đã cho biết:

Giá trị sử dụng của 'width' là giá trị tính toán, trừ khi đó là 'tự động', khi được sử dụng giá trị là chiều rộng thu nhỏ đến vừa.

Chiều rộng mặc định sẽ được tự động nên shrink-to-fit nó là:

Tính toán co-to-fit chiều rộng tương tự như tính toán độ rộng của một ô trong bảng bằng cách sử dụng thuật toán bố trí bảng tự động . Khoảng cách: tính chiều rộng ưa thích bằng cách định dạng nội dung mà không vi phạm các dòng khác với nơi ngắt dòng rõ ràng xảy ra và cũng tính toán chiều rộng tối thiểu ưa thích, ví dụ: bằng cách thử tất cả các ngắt dòng có thể.

Không có ngắt dòng có thể trong <table> của bạn để nổi #container sẽ đảm nhận toàn bộ chiều rộng của <table> con của nó.

+1

Và phao, như khối nội tuyến và ô bảng, sử dụng thuật toán ["thu nhỏ để phù hợp"] (http://www.w3.org/TR/CSS21/visudet.html#float-width) xem xét nội dung để tính chiều rộng của vùng chứa –

+0

@Youval: Có vẻ như bạn đã đạt được tiêu chuẩn trước khi cập nhật của tôi. Tôi đã thêm một số liên kết vào bản thảo làm việc CSS3 cho hậu thế. –

-3

Tôi thường đặt kích thước của div và để bảng tự điều chỉnh thành div. Bạn không chắc liệu bit thông tin chi tiết đó có giúp ích hay không.

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