2012-04-13 35 views
6

Chúng tôi đang sử dụng thuộc tính CSS table-layout: fixed cho ứng dụng dành cho thiết bị di động của chúng tôi. (Tôi không nhớ lý do đầy đủ, nhưng tôi tin rằng nó phải làm với việc cho phép gói từ một số loại) ...bố cục bảng: vấn đề cố định với chiều rộng cột

Tôi đã gặp phải vấn đề mà chúng tôi cần phải định kích thước một trong hai cột bảng hai cột. Không phải là vấn đề lớn, thường chúng tôi làm điều này:

<table> 
    <tbody>   
    <tr> 
     <th width="20%">hello world</th> 
     <td>hello world</td> 
    </tr> 
    </tbody> 
</table> 

Điều đó có hiệu quả.

Tuy nhiên, nếu chúng ta cần phải tạo ra một hàng kéo dài cả hai cột TRƯỚC này:

<table> 
    <tbody> 
    <tr> 
     <td colspan="2">hello world</th> 
    </tr>  
    <tr> 
     <th width="20%">hello world</th> 
     <td>hello world</td> 
    </tr> 
    </tbody> 
</table> 

gì xảy ra, ít nhất là trong Chrome, đó là hai cột chụp tới 50% độ rộng. Tôi có mẫu jsbin tại đây:

http://jsbin.com/ejovut/3

Đây có phải là hành vi bình thường không? Lỗi Chrome? Một cách để giải quyết vấn đề này?

Trả lời

12

Đây không phải là lỗi. table-layout:fixed có nghĩa là trình duyệt được phép tối ưu hóa tính toán bố cục bảng bằng cách giả định chỉ có thông số kỹ thuật hàng và cột đầu tiên. Cụ thể, nó NOT cần kiểm tra và thực hiện tính toán bố cục trên nội dung bảng sau này, có thể tạo sự khác biệt lớn về hiệu suất bố cục.

Giải pháp đúng là sử dụng các phần tử <col><colgroup> để chỉ định rõ độ rộng cột, thay vì sử dụng hàng đầu tiên.

+0

Xin lỗi xuất hiện dày đặc, nhưng là giải pháp cho * not * sử dụng bố cục bảng: cố định? Hay để sử dụng col và colgroup ngoài bảng bố trí: cố định nếu cố định "từ gói"? (TBH Tôi không biết tại sao bảng bố trí sẽ được sử dụng ở tất cả trong ví dụ này và chỉ cần loại bỏ nó sẽ giải quyết vấn đề? – MrWhite

+2

' table-layout: fixed' có thể cần thiết cho việc phá vỡ các từ dài (xem http://jsbin.com/utifiy/2/edit) Nói chung, nếu bạn cần điều khiển bố trí chính xác, giá trị 'fixed' sẽ cho bạn biết rằng trong khi mặc định có nhiều phép thuật hơn: nhưng bạn cần phải thay thế kích thước ma thuật đó h * một cái gì đó * - vì vậy đó là lý do tại sao bạn cần phải kích thước rõ ràng thông số phần tử ** hàng đầu tiên ** hoặc 'col'. Vấn đề của OP là nếu hàng đầu tiên có các ô trải rộng các cột, bạn * không thể * khai báo kích thước của các cột trên các ô, vì vậy giải pháp là sử dụng kích thước dựa trên 'col'. –

-1

hàng đầu tiên của bảng phải chứa tất cả cũng vậy, lỗi Chrome không cho phép sử dụng cho việc này.

+0

chứa tất cả những gì? –

+0

4esn0k

+0

Vì vậy, đây là lỗi Chrome đã biết và giải pháp thay thế là đảm bảo có hàng trống đầu tiên chứa mỗi TD riêng lẻ? –

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