11

Tôi có đánh dấu sau, nơi tôi đang cố gắng lấy mặt bên phải của bảng thứ hai để căn chỉnh với phía bên phải của tiêu đề bên trên nó. Điều này làm việc trong IE8, Firefox và Chrome, nhưng trong IE6/7 bảng được kéo dài không chính xác để lấp đầy chiều rộng của trang.Kéo chiều rộng chính xác đến 100% phần tử khối nội tuyến trong IE6 và IE7

Tôi đang sử dụng Trip Switch hasLayout trigger để áp dụng inline-block trong IE6/7.

Có ai biết làm thế nào (hoặc thậm chí nếu) tôi có thể lấy bảng chỉ để lấp đầy chiều rộng tự nhiên của phần tử trình bao được hiển thị với inline-block trong IE6/7?

Bạn có thể thấy mã đang chạy trực tiếp tại http://jsbin.com/uyuva.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>Test</title> 
<style> 
.wrapper { 
    display: inline-block; 
    border: 1px solid green; 
} 
/* 
display: inline-block triggers the wrapper element to have layout for IE 6/7. 
The trip switch then provides the inline component of the display behaviour. 
See http://www.brunildo.org/test/InlineBlockLayout.html for more details. 
*/ 
.wrapper { 
    *display: inline; 
} 

table { 
    border: 1px solid red; 
} 
</style> 
</head> 
<body> 
<h1>No width on table:</h1> 
<div class="wrapper"> 
    <h2>The right hand side of the table doesn't stretch to the end of this heading</h2> 
    <table><tr><td>foo</td></tr></table> 
</div> text 

<h1>Width on table:</h1> 
<div class="wrapper"> 
    <h2>The right hand side of the table should stretch to the end of this heading</h2> 
    <table style="width: 100%"><tr><td>foo</td></tr></table> 
</div> text 
</body> 
</html>​ 

Cập nhật: đây là một ví dụ về vấn đề này, thời gian này mà không sử dụng một bảng và sử dụng một yếu tố container hoàn toàn vị trí. Bạn có thể thấy mã đang chạy trực tiếp tại http://jsbin.com/igila4.

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<title>Test</title> 
<style> 
div { 
    position: absolute; 
    border: 1px solid red; 
} 

input { 
    width: 100%; 
    *width: 95%; /* fudge factor for IE 6/7 which don't support box-sizing */ 
    box-sizing: border-box; 
    -moz-box-sizing: border-box; 
    -webkit-box-sizing: border-box; 
} 

textarea { 
    width: 400px; 
} 
</style> 
<body> 
The width of the input and textarea below should be identical.<br/> 
<div> 
    <input value="This is an input with width 100%"><br/> 
    <textarea>This is a text area with width 400px.</textarea> 
</div> 
</body> 
</html> 
+0

Bạn đang cố gắng để có được bảng để phù hợp cụ thể chiều rộng của H2 trên nó hoặc chỉ cần điền vào chiều rộng của div.wrapper bất kể H2? –

+0

Tôi đang cố gắng để có được bảng để phù hợp với chiều rộng của H2 nếu H2 là rộng hơn chiều rộng tự nhiên của bảng. Nếu H2 hẹp hơn chiều rộng bảng tự nhiên thì tôi mong đợi chiều rộng của div.wrapper sẽ kết thúc dưới dạng chiều rộng bảng tự nhiên. –

Trả lời

4

Nó không xuất hiện này có thể đạt được chỉ thông qua CSS.

Tôi cố ý tránh sử dụng tập lệnh vì tôi thích tận dụng lợi thế của trình duyệt để hiển thị mọi thứ cho tôi khi trang được điều khiển động thay vì phải viết mã thủ công để cập nhật chiều rộng.

Cuối cùng, tôi đã giải quyết vấn đề bằng cách chỉ định chiều rộng tối thiểu cho các bảng phải rộng hơn chiều dài của bất kỳ tiêu đề nào tôi sẽ có.

Internet Explorer 6 và 7 không hỗ trợ min-width nhưng vì tôi có tập lệnh chung tạo bảng tôi đang hiển thị, tôi tự động tạo thành phần phụ thead có một ô kéo dài mỗi cột mà tôi tạo một cách hiệu quả cho tôi kết quả tương tự:

CSS

table { 
    min-width: 600px; 
} 
th.min-width { 
    *width: 600px; 
} 

cấu trúc bảng HTML

<table> 
    <thead><tr><th colspan="3" class="min-width"></th></tr></thead> 
    <thead> 
     <tr> 
      <th>Column 1</th> 
      <th>Column 2</th> 
      <th>Column 3</th> 
     </tr> 
    </thead> 
    <tbody> 
     ... 
    </tbody> 
</table> 
1

Nếu bạn có thể đặt chiều rộng trên trình bao bọc (ví dụ: 50em), thì bảng sẽ mở rộng đến chiều rộng của trình bao bọc.

Tuy nhiên, nếu bạn cần trình bao bọc được động theo chiều rộng, thì bạn có thể sử dụng javascript để đặt width của bảng thành offsetWidth của trình bao bọc. Đây là trang được thêm javascript: http://jsbin.com/uyuva/5

Tôi chỉ thử nghiệm trên IE 8 của mình với chế độ tương thích đang chạy vì tôi không có IE 6/7.

0

Bạn sẽ cần sử dụng javascript để lấy chiều rộng của h2 và áp dụng nó cho bảng. Tôi không tin CSS có thể xử lý những gì bạn cần ở mọi trình duyệt coughIEcough

Đây là một tốt sample để tham khảo

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