2008-10-09 30 views
13

Tôi muốn tạo một hộp đơn giản với thanh tiêu đề chứa tiêu đề và một số nút công cụ. Tôi có đánh dấu sau:Hành vi nổi lạ trong IE7

<div style="float:left"> 
    <div style="background-color:blue; padding: 1px; height: 20px;"> 
     <div style="float: left; background-color:green;">title</div> 
     <div style="float: right; background-color:yellow;">toolbar</div> 
    </div> 
    <div style="clear: both; width: 200px; background-color: red;">content</div> 
</div> 

này ám tốt trong Firefox và Chrome:

http://www.boplicity.nl/images/firefox.jpg

Tuy nhiên IE7 hoàn toàn messes lên và đặt yếu tố nổi ngay phía bên phải của trang:

http://www.boplicity.nl/images/ie7.jpg

Điều này có thể khắc phục được không?

+0

Bạn có thể cần thêm một chút ngữ cảnh cho câu hỏi này. bạn đã nói rằng khu vực nội dung sẽ chứa các bảng có kích thước khác nhau? –

+1

Hữu ích http://css-class.com/articles/explorer/floats/floatandcleartest1.htm – elclanrs

Trả lời

23

Xác định chiều rộng trong div ngoài cùng. Nếu đó chiều rộng trong div nội dung của bạn có nghĩa đây là tổng chiều rộng của hộp của bạn, chỉ cần thêm nó vào div ngoài cùng, và (tùy chọn) loại bỏ nó từ nội dung, như thế này:

<div style="float:left; width: 200px;"> 
    <div style="background-color:blue; padding: 1px; height: 20px;"> 
     <div style="float: left; background-color:green;">title</div> 
     <div style="float: right; background-color:yellow;">toolbar</div> 
    </div> 
    <div style="clear: both; background-color: red;">content</div> 
</div> 
+7

Sửa lỗi đó. Tuy nhiên kích thước nội dung có thể không được biết trước. Trên trang web của tôi, nó thường chứa các bảng có chiều rộng có thể phát triển. –

-2

Hãy <div style="background-color:blue; padding: 1px; height: 20px;> này phụ huynh của 2 divs nổi cũng clear:all

+0

Xin lỗi, điều đó không giúp ích gì. Dưới đây là các ảnh chụp màn hình: www.boplicity.nl/images/firefox.jpg www.boplicity.nl/images/ie7.jpg –

3

Đây chỉ là một cách nhanh chóng câu trả lời, vì vậy tôi giơ tay lên nếu nó không hoạt động. Tôi nghĩ rằng giải pháp của Marko có thể sẽ hoạt động nếu bạn chỉ cần thêm chiều rộng tối thiểu chứ không phải chiều rộng. Nếu bạn đang cố gắng để phục vụ cho ie6 là tốt, bạn có thể cần phải sử dụng một hack, như chiều rộng tối thiểu không được hỗ trợ bởi ie6 và nó là hậu duệ.

Vì vậy, điều này sẽ hoạt động với IE7 và các trình duyệt hiện đại khác. Đặt chiều rộng tối thiểu thành bất kỳ thứ gì là thích hợp.

<div style="float:left; min-width: 200px;"> 
    <div style="background-color:blue; padding: 1px; height: 20px;"> 
     <div style="float: left; background-color:green;">title</div> 
     <div style="float: right; background-color:yellow;">toolbar</div> 
    </div> 
    <div style="clear: both; background-color: red;">content</div> 
</div> 
+0

Xin lỗi, chiều rộng tối thiểu không có tác dụng trong trường hợp này –

2

tôi cố định nó bằng cách sử dụng jQuery để bắt chước hành vi của các trình duyệt không phải IE:

// IE fix for div widths - size header to width of content 
    if (!$.support.cssFloat) { 
     $("div:has(.boxheader) > table").each(function() { 
       $(this).parent().width($(this).width()); 
     }); 
    } 
+0

Làm cách nào để trả lời câu hỏi gốc? – Craig

+0

Nó khắc phục sự cố. Thay vì thiết lập chiều rộng tĩnh như các áp phích khác, tôi đã đặt nó một cách linh động. –

+5

Ném một thư viện JavaScript 50K vào đây không phải là giải pháp tốt nhất khi một bản hack CSS có thể sửa lỗi này. – Rob

1

Hãy thử đặt position:relative; to-yếu tố phụ huynh và các yếu tố con. Nó giải quyết vấn đề cho tôi.

+3

không hoạt động với tôi –

+0

cũng không hoạt động đối với tôi. – Ben

1

Đã biết gần đây rằng các phần tử nổi bên phải cần được nối với các div trước các phần tử khác. Đây là cách khắc phục dễ nhất mà không cần thêm một dòng thay đổi.

<div style="background-color:blue; padding: 1px; height: 20px;"> 
    <div style="float: right; background-color:green;">title</div> 
    <div style="float: left; background-color:yellow;">toolbar</div> 
</div> 
+0

Điều này đúng, tuy nhiên, sự khác biệt quan trọng ở đây là 'div' bên ngoài của bạn không được thả nổi. Nếu bạn nổi, nó không hoạt động. – kasimir

+0

+1 tính năng này hoạt động trong trường hợp của tôi, cảm ơn – soupy1976